StorageGRID が AWS ポリシーを使用して S3 バケットとオブジェクトへのアクセスを制御する方法
StorageGRID は Amazon Web Services (AWS) のポリシー言語を使用して、S3 テナントがバケットおよびバケット内のオブジェクトへのアクセスを制御できるようにします。StorageGRID システムは、S3 REST API ポリシー言語のサブセットを実装しています。S3 API のアクセスポリシーは JSON 形式で記述されます。
アクセスポリシーの概要
StorageGRID は、3種類のアクセスポリシーをサポートしています。
-
*バケットポリシー*は、GetBucketPolicy、PutBucketPolicy、およびDeleteBucketPolicy S3 API操作、またはテナントマネージャーもしくはテナント管理APIを使用して管理されます。バケットポリシーはバケットに紐付けられており、バケット所有者アカウントまたはその他のアカウントのユーザーによるバケットおよびバケット内のオブジェクトへのアクセスを制御するように構成されます。バケットポリシーは、1つのバケットと、場合によっては複数のグループにのみ適用されます。
-
*グループポリシー*は、Tenant ManagerまたはTenant Management APIを使用して設定します。グループポリシーはアカウント内のグループに関連付けられており、そのグループがそのアカウントが所有する特定のリソースにアクセスできるように設定されます。グループポリシーは、1つのグループと、場合によっては複数のバケットにのみ適用されます。
-
セッションポリシー は、AssumeRole リクエストの一部として含まれます。セッションポリシーは特定のセッションにのみ適用され、グループポリシーおよびバケットポリシーによって付与される権限に加えて、ユーザーが持つ権限をさらに詳細に定義します。
|
|
グループポリシー、バケットポリシー、セッションポリシーの間には、優先順位の違いはありません。 |
StorageGRID バケットポリシーとグループポリシーは、Amazon が定義した特定の文法に従います。各ポリシーの中にはポリシーステートメントの配列があり、各ステートメントには以下の要素が含まれています。
-
ステートメント ID (Sid)(オプション)
-
影響
-
Principal/NotPrincipal
-
リソース/NotResource
-
アクション/NotAction
-
条件(任意)
ポリシーステートメントは、権限を指定するために次の構造を使用して作成されます:<Effect> を付与して、<Condition> が適用される場合に <Principal> が <Resource> に対して <Action> を実行することを許可/拒否します。
各ポリシー要素は、特定の機能に使用されます。
| 要素 | 説明 |
|---|---|
Sid |
Sid要素は省略可能です。Sidは、ユーザー向けの説明としてのみ使用されるものです。StorageGRIDシステムによって保存されますが、解釈はされません。 |
影響 |
Effect要素を使用して、指定された操作が許可されるか拒否されるかを設定します。サポートされているAction要素キーワードを使用して、バケットまたはオブジェクトに対して許可(または拒否)する操作を指定する必要があります。 |
Principal/NotPrincipal |
ユーザー、グループ、アカウントに対して、特定のリソースへのアクセス権限や特定のアクションの実行権限を付与できます。リクエストにS3署名が含まれていない場合、ワイルドカード文字(*)をプリンシパルとして指定することで、匿名アクセスが許可されます。デフォルトでは、アカウントのルートユーザーのみが、そのアカウントが所有するリソースにアクセスできます。 バケットポリシーでは、Principal要素のみを指定する必要があります。グループポリシーの場合、ポリシーが関連付けられているグループが暗黙のPrincipal要素となります。 |
リソース/NotResource |
リソース要素は、バケットとオブジェクトを識別します。Amazon Resource Name (ARN)を使用してリソースを識別することで、バケットやオブジェクトに対するアクセス許可を許可または拒否できます。 |
アクション/NotAction |
権限を構成する2つの要素は、アクション要素とエフェクト要素です。グループがリソースを要求すると、そのリソースへのアクセスが許可されるか、拒否されるかのいずれかになります。明示的に権限を割り当てない限りアクセスは拒否されますが、明示的な拒否を使用することで、別のポリシーによって付与された権限を上書きすることができます。 |
条件 |
Condition要素は省略可能です。条件を使用すると、ポリシーを適用するタイミングを決定する式を作成できます。 |
Action要素では、ワイルドカード文字(*)を使用して、すべての操作、または操作のサブセットを指定できます。例えば、このActionはs3:GetObject、s3:PutObject、s3:DeleteObjectなどの権限に一致します。
s3:*Object
Resource 要素では、ワイルドカード文字 (*) と (?) を使用できます。アスタリスク(*)は0文字以上の文字に一致しますが、疑問符(?)は任意の1文字に一致します。
Principal 要素では、すべてのユーザーに権限を付与する匿名アクセスの設定を除き、ワイルドカード文字はサポートされていません。たとえば、ワイルドカード(*)を Principal の値として設定します。
"Principal":"*"
"Principal":{"AWS":"*"}
次の例では、ステートメントでEffect、Principal、Action、およびResource要素を使用しています。この例は、Effectの「Allow」を使用して、Principalである管理グループ federated-group/admin`と財務グループ `federated-group/finance`に対して、指定した名前のバケットに対するAction `s3:ListBucket`の実行権限 `mybucket、およびそのバケット内のすべてのオブジェクトに対するAction `s3:GetObject`の実行権限を付与する、完全なバケットポリシー記述を示しています。
{
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::27233906934684427525:federated-group/admin",
"arn:aws:iam::27233906934684427525:federated-group/finance"
]
},
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::mybucket",
"arn:aws:s3:::mybucket/*"
]
}
]
}
バケットポリシーのサイズ制限は20,480バイト、グループポリシーのサイズ制限は5,120バイトです。
ポリシーの整合性
デフォルトでは、グループポリシーに加えた更新はすべて最終的に整合性が保たれます。グループポリシーが整合性を保つようになると、ポリシーのキャッシュ処理のため、変更が反映されるまでにさらに15分ほどかかる場合があります。デフォルトでは、バケットポリシーに加えた更新はすべて強整合性が保たれます。
必要に応じて、バケットポリシーの更新における整合性保証を変更できます。たとえば、サイト停止中にバケットポリシーの変更を有効にする場合などです。
この場合、PutBucketPolicyリクエストに `Consistency-Control`ヘッダーを設定するか、PUT Bucket 整合性リクエストを使用することができます。バケットポリシーが整合性を保つようになると、ポリシーのキャッシュのため、変更が反映されるまでにさらに8秒かかる場合があります。
|
|
一時的な状況に対処するために整合性を別の値に設定した場合は、作業が完了したら必ずバケットレベルの設定を元の値に戻してください。そうでない場合、今後のすべてのバケット要求は変更された設定を使用します。 |
セッションポリシーとは何ですか?
セッションポリシーとは、ユーザーがグループを代理で利用する場合など、特定のセッション中に利用可能な権限を一時的に制限するアクセスポリシーのことです。セッションポリシーでは、許可できる権限は一部のみであり、追加の権限を付与することはできません。グループ自体は、より広範な権限を持っている可能性があります。
ポリシーステートメントでARNを使用する
ポリシーステートメントでは、ARN は Principal 要素と Resource 要素で使用されます。
-
S3リソースARNを指定するには、以下の構文を使用します。
arn:aws:s3:::bucket-name arn:aws:s3:::bucket-name/object_key
-
IDリソースARN(ユーザーおよびグループ)を指定するには、以下の構文を使用します:
arn:aws:iam::account_id:root arn:aws:iam::account_id:user/user_name arn:aws:iam::account_id:group/group_name arn:aws:iam::account_id:federated-user/user_name arn:aws:iam::account_id:federated-group/group_name
その他の考慮事項:
-
オブジェクトキー内の0個以上の文字に一致させるには、アスタリスク(*)をワイルドカードとして使用できます。
-
オブジェクトキーで指定できる国際文字は、JSON UTF-8 または JSON \u エスケープシーケンスを使用してエンコードする必要があります。パーセント表記はサポートされていません。
PutBucketPolicy 操作の HTTP リクエストボディは、charset=UTF-8 でエンコードする必要があります。
ポリシーでリソースを指定する
ポリシーステートメントでは、Resource要素を使用して、アクセス許可または拒否するバケットまたはオブジェクトを指定できます。
-
各ポリシーステートメントには、Resource要素が必要です。ポリシーでは、リソースは要素 `Resource`で表されます。または、除外の場合は `NotResource`で表されます。
-
S3リソースARNを使用してリソースを指定します。例:
"Resource": "arn:aws:s3:::mybucket/*"
-
オブジェクトキーの中にポリシー変数を使用することもできます。例えば:
"Resource": "arn:aws:s3:::mybucket/home/${aws:username}/*" -
リソース値には、グループポリシー作成時にまだ存在しないバケットを指定できます。
ポリシーでプリンシパルを指定する
Principal要素を使用して、ポリシーステートメントによってリソースへのアクセスが許可または拒否されるユーザー、グループ、またはテナントアカウントを識別します。
-
バケットポリシー内の各ポリシーステートメントには、Principal要素を含める必要があります。グループポリシーのポリシーステートメントには、グループ自体がプリンシパルであると解釈されるため、Principal要素は必要ありません。
-
ポリシーでは、プリンシパルは要素「Principal」、または除外の場合は「NotPrincipal」で示されます。
-
アカウントベースのIDは、IDまたはARNを使用して指定する必要があります。
"Principal": { "AWS": "account_id"} "Principal": { "AWS": "identity_arn" } -
この例では、テナントアカウントID 27233906934684427525を使用します。このアカウントには、アカウントのルートとアカウント内のすべてのユーザーが含まれます。
"Principal": { "AWS": "27233906934684427525" } -
アカウントのルートのみを指定できます。
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:root" } -
特定のフェデレーションユーザー(「Alex」)を指定できます。
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/Alex" } -
特定のフェデレーショングループ(「Managers」)を指定できます:
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" } -
匿名プリンシパルを指定できます。
"Principal": "*"
-
曖昧さを避けるため、ユーザー名の代わりにユーザーUUIDを使用できます。
arn:aws:iam::27233906934684427525:user-uuid/de305d54-75b4-431b-adb2-eb6b9e546013
例えば、Alex が組織を離れ、ユーザー名 `Alex`が削除されたとします。新しい Alex が組織に加わり、同じ `Alex`ユーザー名が割り当てられた場合、新しいユーザーが意図せず元のユーザーに付与された権限を継承してしまう可能性があります。
-
プリンシパル値には、バケットポリシー作成時にまだ存在しないグループ名またはユーザー名を指定できます。
ポリシーで権限を指定する
ポリシーにおいて、Action要素はリソースに対するアクセス許可を許可または拒否するために使用されます。ポリシーで指定できる一連の権限があり、それは要素「Action」、または除外の場合は「NotAction」で示されます。これらの各要素は、特定のS3 REST API操作にマッピングされます。
この表には、バケットに適用される権限とオブジェクトに適用される権限が一覧表示されています。
|
|
Amazon S3は現在、PutBucketReplicationアクションとDeleteBucketReplicationアクションの両方にs3:PutReplicationConfiguration権限を使用します。StorageGRIDは各アクションに個別の権限を使用します。これは、元のAmazon S3の仕様と一致しています。 |
|
|
削除は、put操作を使用して既存の値を上書きする際に実行されます。 |
バケットに適用される権限
| 権限 | S3 REST API オペレーション | StorageGRID のカスタム |
|---|---|---|
s3:CreateBucket |
CreateBucket |
○ 注:グループポリシーでのみ使用してください。 |
s3:DeleteBucket |
DeleteBucket |
|
s3:DeleteBucketMetadataNotification |
バケットメタデータ通知設定の削除 |
はい |
s3:DeleteBucketPolicy |
DeleteBucketPolicy |
|
s3:DeleteReplicationConfiguration |
DeleteBucketReplication |
はい、PUTとDELETEには別々の権限があります |
s3:GetBucketAcl |
GetBucketAcl |
|
s3:GetBucketCompliance |
GET Bucket compliance(非推奨) |
はい |
s3:GetBucketConsistency |
GET Bucket consistency |
はい |
s3:GetBucketCORS |
GetBucketCors |
|
s3:GetEncryptionConfiguration |
GetBucketEncryption |
|
s3:GetBucketLastAccessTime |
GET Bucketの最終アクセス時間 |
はい |
s3:GetBucketLocation |
GetBucketLocation |
|
s3:GetBucketMetadataNotification |
バケットメタデータ通知設定を取得します |
はい |
s3:GetBucketNotification |
GetBucketNotificationConfiguration |
|
s3:GetBucketObjectLockConfiguration |
GetObjectLockConfiguration |
|
s3:GetBucketPolicy |
GetBucketPolicy |
|
s3:GetBucketTagging |
GetBucketTagging |
|
s3:GetBucketVersioning |
GetBucketVersioning |
|
s3:GetLifecycleConfiguration |
GetBucketLifecycleConfiguration |
|
s3:GetReplicationConfiguration |
GetBucketReplication |
|
s3:ListAllMyBuckets |
|
はい、GET Storage Usageの場合です。 注:グループポリシーでのみ使用してください。 |
s3:ListBucket |
|
|
s3:ListBucketMultipartUploads |
|
|
s3:ListBucketVersions |
GET Bucket versions |
|
s3:PutBucketCompliance |
PUT Bucket compliance(非推奨) |
はい |
s3:PutBucketConsistency |
PUT Bucketの一貫性 |
はい |
s3:PutBucketCORS |
|
|
s3:PutEncryptionConfiguration |
|
|
s3:PutBucketLastAccessTime |
PUT Bucketの最終アクセス時刻 |
はい |
s3:PutBucketMetadataNotification |
PUT Bucketメタデータ通知設定 |
はい |
s3:PutBucketNotification |
PutBucketNotificationConfiguration |
|
s3:PutBucketObjectLockConfiguration |
|
|
s3:PutBucketPolicy |
PutBucketPolicy |
|
s3:PutBucketTagging |
|
|
s3:PutBucketVersioning |
PutBucketVersioning |
|
s3:PutLifecycleConfiguration |
|
|
s3:PutReplicationConfiguration |
PutBucketReplication |
はい、PUTとDELETEには別々の権限があります |
オブジェクトに適用される権限
| 権限 | S3 REST API オペレーション | StorageGRID のカスタム |
|---|---|---|
s3:AbortMultipartUpload |
|
|
s3:BypassGovernanceRetention |
|
|
s3:DeleteObject |
|
|
s3:DeleteObjectTagging |
DeleteObjectTagging |
|
s3:DeleteObjectVersionTagging |
DeleteObjectTagging(オブジェクトの特定バージョン) |
|
s3:DeleteObjectVersion |
DeleteObject(オブジェクトの特定バージョン) |
|
s3:GetObject |
|
|
s3:GetObjectAcl |
GetObjectAcl |
|
s3:GetObjectLegalHold |
GetObjectLegalHold |
|
s3:GetObjectRetention |
GetObjectRetention |
|
s3:GetObjectTagging |
GetObjectTagging |
|
s3:GetObjectVersionTagging |
GetObjectTagging(オブジェクトの特定バージョン) |
|
s3:GetObjectVersion |
GetObject(オブジェクトの特定バージョン) |
|
s3:ListMultipartUploadParts |
ListParts、RestoreObject |
|
s3:PutObject |
|
|
s3:PutObjectLegalHold |
PutObjectLegalHold |
|
s3:PutObjectRetention |
PutObjectRetention |
|
s3:PutObjectTagging |
PutObjectTagging |
|
s3:PutObjectVersionTagging |
PutObjectTagging(オブジェクトの特定バージョン) |
|
s3:PutOverwriteObject |
|
はい |
s3:RestoreObject |
RestoreObject |
PutOverwriteObject 権限を使用する
s3:PutOverwriteObject 権限は、オブジェクトの作成または更新を行う操作に適用されるカスタム StorageGRID 権限です。この権限の設定により、クライアントがオブジェクトのデータ、ユーザー定義のメタデータ、または S3 オブジェクトのタグ付けを上書きできるかどうかが決まります。
この権限の設定可能な項目は以下のとおりです:
-
許可:クライアントはオブジェクトを上書きできます。これはデフォルト設定です。
-
拒否:クライアントはオブジェクトを上書きできません。「拒否」に設定すると、PutOverwriteObject 権限の仕組みは以下のとおりです。
-
同じパスに既存のオブジェクトが見つかった場合:
-
オブジェクトのデータ、ユーザー定義のメタデータ、またはS3オブジェクトのタグ付けは上書きできません。
-
進行中の取り込み操作はすべてキャンセルされ、エラーが返されます。
-
S3 バージョン管理が有効になっている場合、拒否設定により、PutObjectTagging または DeleteObjectTagging 操作がオブジェクトとその非現行バージョンの TagSet を変更できなくなります。
-
-
既存のオブジェクトが見つからない場合、この権限は無効です。
-
-
この権限が存在しない場合、効果は「許可」が設定されている場合と同じです。
|
|
現在のS3ポリシーで上書きが許可されており、PutOverwriteObject権限が「拒否」に設定されている場合、クライアントはオブジェクトのデータ、ユーザー定義のメタデータ、またはオブジェクトのタグ付けを上書きすることができません。さらに、クライアントの変更を防止する*チェックボックスが選択されている場合(*構成 > セキュリティ設定 > ネットワークとオブジェクト)、その設定はPutOverwriteObject権限の設定より優先されます。 |
ポリシーで条件を指定する
条件とは、ポリシーがいつ有効になるかを定めるものです。条件は、演算子とキーと値のペアで構成されます。
条件式は、評価にキーと値のペアを使用します。Condition要素には複数の条件を含めることができ、各条件には複数のキーと値のペアを含めることができます。条件ブロックは次の形式を使用します:
Condition: {
condition_type: {
condition_key: condition_values
次の例では、IpAddress 条件は SourceIp 条件キーを使用しています。
"Condition": {
"IpAddress": {
"aws:SourceIp": "54.240.143.0/24"
...
},
...
サポートされている条件演算子
条件演算子は以下のように分類されます:
-
文字列
-
数字
-
ブーリアン
-
IPアドレス
-
ヌルチェック
| 条件演算子 | 説明 |
|---|---|
StringEquals |
キーと文字列値を完全一致(大文字小文字を区別)に基づいて比較します。 |
StringNotEquals |
否定一致(大文字小文字を区別)に基づいて、キーと文字列値を比較します。 |
StringEqualsIgnoreCase |
キーと文字列値を完全一致に基づいて比較します(大文字小文字は区別しません)。 |
StringNotEqualsIgnoreCase |
否定一致に基づいてキーと文字列値を比較します(大文字と小文字は区別しません)。 |
StringLike |
キーと文字列値を完全一致(大文字小文字を区別)に基づいて比較します。ワイルドカード文字として「*」と「?」を含めることができます。 |
StringNotLike |
否定一致(大文字小文字を区別)に基づいて、キーと文字列値を比較します。ワイルドカード文字として * と ? を含めることができます。 |
NumericEquals |
キーと数値を完全一致に基づいて比較します。 |
NumericNotEquals |
否定一致に基づいて、キーと数値を比較します。 |
NumericGreaterThan |
キーと数値を「より大きい」という条件に基づいて比較します。 |
NumericGreaterThanEquals |
キーと数値を「以上」の一致に基づいて比較します。 |
NumericLessThan |
キーと数値を「より小さい」条件に基づいて比較します。 |
NumericLessThanEquals |
キーと数値を「以下」のマッチングに基づいて比較します。 |
ブール値 |
キーをブール値と「true or false」の一致に基づいて比較します。 |
IpAddress |
キーをIPアドレスまたはIPアドレスの範囲と比較します。 |
NotIpAddress |
否定一致に基づいて、キーをIPアドレスまたはIPアドレスの範囲と比較します。 |
Null |
現在のリクエストコンテキストに条件キーが存在するかどうかを確認します。 |
IfExists |
Null条件を除く、任意の条件演算子に追加して、その条件キーが存在しないかどうかを確認します。条件キーが存在しない場合は TRUE を返します。 |
サポートされている条件キー
| 条件キー | 操作 | 説明 |
|---|---|---|
aws:SourceIp |
IPオペレーター |
リクエストが送信されたIPアドレスと比較します。バケット操作またはオブジェクト操作に使用できます。 注: S3 リクエストが管理ノードおよびゲートウェイノードのロードバランサーサービス経由で送信された場合、これはロードバランサーサービスの上流の IP アドレスと比較されます。 注: サードパーティ製の非透過型ロードバランサーを使用する場合、これはそのロードバランサーのIPアドレスと比較されます。 `X-Forwarded-For`ヘッダーは有効性を確認できないため、無視されます。 |
aws:username |
リソース/アイデンティティ |
リクエストが送信された送信者のユーザー名と比較します。バケット操作またはオブジェクト操作に使用できます。 |
s3:区切り文字 |
s3:ListBucket および s3:ListBucketVersions 権限 |
ListObjectsまたはListObjectVersionsリクエストで指定された区切り文字パラメータと比較されます。 |
s3:ExistingObjectTag/<tag-key> |
s3:DeleteObjectTagging s3:DeleteObjectVersionTagging s3:GetObject s3:GetObjectAcl 3:GetObjectTagging s3:GetObjectVersion s3:GetObjectVersionAcl s3:GetObjectVersionTagging s3:PutObjectAcl s3:PutObjectTagging s3:PutObjectVersionAcl s3:PutObjectVersionTagging |
既存のオブジェクトに特定のタグキーと値が存在する必要があります。 |
s3:max-keys |
s3:ListBucket および s3:ListBucketVersions 権限 |
ListObjectsまたはListObjectVersionsリクエストで指定された max-keys パラメータと比較します。 |
s3:object-lock-mode |
s3:PutObject |
`object-lock-mode`から展開された値と比較します。これは、PutObject、CopyObject、およびCreateMultipartUploadリクエストのリクエストヘッダーから展開されます。 |
s3:object-lock-mode |
s3:PutObjectRetention |
PutObjectRetentionリクエストのXML本文から展開された `object-lock-mode`と比較します。 |
s3:object-lock-remaining-retention-days |
s3:PutObject |
`x-amz-object-lock-retain-until-date`リクエストヘッダーで指定された保持期限、またはバケットのデフォルト保持期間から計算された保持期限と比較して、これらの値が次のリクエストの許容範囲内にあることを確認します:
|
s3:object-lock-remaining-retention-days |
s3:PutObjectRetention |
PutObjectRetention リクエストで指定された保持期限日と比較し、許容範囲内であることを確認します。 |
s3:prefix |
s3:ListBucket および s3:ListBucketVersions 権限 |
ListObjectsまたはListObjectVersionsリクエストで指定されたプレフィックスパラメータと比較します。 |
s3:RequestObjectTag/<tag-key> |
s3:PutObject s3:PutObjectTagging s3:PutObjectVersionTagging |
オブジェクト要求にタグ付けが含まれる場合、特定のタグキーと値が必要になります。 |
s3:x-amz-server-side-encryption-customer-algorithm |
s3:PutObject |
`sse-customer-algorithm`または `copy-source-sse-customer-algorithm`と比較します。これらは、PutObject、CopyObject、CreateMultipartUpload、UploadPart、UploadPartCopy、およびCompleteMultipartUploadリクエストのリクエストヘッダーから展開されます。 |
ポリシーで変数を指定する
ポリシー内で変数を使用すると、ポリシー情報が利用可能な場合に、その情報を入力できます。ポリシー変数は `Resource`要素と、 `Condition`要素内の文字列比較で使用できます。
この例では、変数 `${aws:username}`はリソース要素の一部です。
"Resource": "arn:aws:s3:::bucket-name/home/${aws:username}/*"
この例では、変数 `${aws:username}`は条件ブロック内の条件値の一部です。
"Condition": {
"StringLike": {
"s3:prefix": "${aws:username}/*"
...
},
...
| 変数 | 説明 |
|---|---|
|
SourceIp キーを指定された変数として使用します。 |
|
指定された変数としてユーザー名キーを使用します。 |
|
サービス固有のプレフィックスキーを、指定された変数として使用します。 |
|
指定された変数として、サービス固有のmax-keysキーを使用します。 |
|
特殊文字。この文字をリテラルの「*」文字として使用します。 |
|
特殊文字。文字をリテラルの「?」文字として使用します。 |
|
特殊文字。文字をリテラルの $ 文字として使用します。 |
特別な取り扱いが必要なポリシーを作成する
ポリシーによっては、セキュリティ上危険であったり、継続的な運用に危険を及ぼすような権限を付与してしまう場合があります。例えば、アカウントのルートユーザーを締め出してしまうといった場合です。StorageGRID S3 REST API の実装は、ポリシー検証時には Amazon よりも制限が少ないですが、ポリシー評価時には Amazon と同程度に厳格です。
| ポリシーの説明 | ポリシー タイプ | Amazon の動作 | StorageGRIDの動作 |
|---|---|---|---|
ルートアカウントに対するすべての権限を自分自身に拒否する |
バケット |
有効かつ強制適用されますが、root ユーザーアカウントはすべての S3 バケットポリシー操作に対する権限を保持します。 |
同じ |
ユーザー/グループに対する自身の権限をすべて拒否する |
グループ |
有効かつ施行済み |
同じ |
外部アカウントグループに任意の権限を許可する |
バケット |
無効なプリンシパル |
有効ですが、ポリシーで許可されている場合、すべての S3 バケットポリシー操作の権限は 405 Method Not Allowed エラーを返します |
外部アカウントのルートまたはユーザーにすべての権限を許可する |
バケット |
有効ですが、ポリシーで許可されている場合、すべての S3 バケットポリシー操作の権限は 405 Method Not Allowed エラーを返します |
同じ |
すべてのアクションに対して全員に権限を付与する |
バケット |
有効ですが、すべての S3 バケットポリシー操作の権限は、外部アカウントの root とユーザーに対して 405 Method Not Allowed エラーを返します。 |
同じ |
すべてのアクションに対する全員の権限を拒否する |
バケット |
有効かつ強制適用されますが、root ユーザーアカウントはすべての S3 バケットポリシー操作に対する権限を保持します。 |
同じ |
プリンシパルは存在しないユーザーまたはグループです |
バケット |
無効なプリンシパル |
有効 |
リソースは存在しないS3バケットです |
グループ |
有効 |
同じ |
プリンシパルはローカルグループです |
バケット |
無効なプリンシパル |
有効 |
このポリシーは、所有者以外のアカウント(匿名アカウントを含む)にオブジェクトを配置する権限を付与します。 |
バケット |
有効。オブジェクトの所有権は作成者アカウントにあり、バケットポリシーは適用されません。作成者アカウントは、オブジェクトACLを使用してオブジェクトへのアクセス権限を付与する必要があります。 |
有効。オブジェクトの所有権は、バケット所有者のアカウントに帰属します。バケットポリシーが適用されます。 |
Write-once-read-many(WORM)保護
データ、ユーザー定義のオブジェクトメタデータ、およびS3オブジェクトのタグ付けを保護するために、Write Once Read Many(WORM)バケットを作成できます。WORMバケットを設定することで、新しいオブジェクトの作成を許可し、既存コンテンツの上書きや削除を防止できます。ここで説明する方法のいずれかを使用してください。
上書きが常に拒否されるようにするには、次の方法があります。
-
グリッドマネージャから、構成 > セキュリティ > セキュリティ設定 > ネットワークとオブジェクト に移動し、クライアントによる変更を防止する チェックボックスを選択します。
-
以下のルールとS3ポリシーを適用します。
-
S3ポリシーに PutOverwriteObject DENY 操作を追加します。
-
S3ポリシーに DeleteObject の DENY 操作を追加します。
-
S3ポリシーに PutObject の ALLOW 操作を追加します。
-
|
|
S3ポリシーで DeleteObject を DENY に設定しても、「30日後にコピーをゼロにする」などのルールが存在する場合、ILM によるオブジェクトの削除を防ぐことはできません。 |
|
|
これらのルールやポリシーをすべて適用したとしても、同時書き込みを防ぐことはできません(状況Aを参照)。これらは、完了した連続上書きを防ぐ対策を講じています(状況Bを参照)。 |
状況A:同時書き込み(対策なし)
/mybucket/important.doc PUT#1 ---> OK PUT#2 -------> OK
状況B:連続した上書き処理(対策済み)
/mybucket/important.doc PUT#1 -------> PUT#2 ---X (denied)