StorageGRIDのポリシーと権限
ここでは、StorageGRID S3のポリシーと権限の例を示します。
ポリシーの構造
StorageGRIDでは、グループポリシーはAWSユーザ(IAM)のS3サービスポリシーと同じです。
StorageGRIDではグループポリシーが必要です。S3アクセスキーを持っていてユーザグループに割り当てられていないユーザや、一部の権限を許可するポリシーが設定されていないグループに割り当てられているユーザは、データにアクセスできません。
バケットポリシーとグループポリシーは、ほとんどの要素を共有します。ポリシーはJSON形式で作成され、 "AWSポリシージェネレータ"
すべてのポリシーで、効果、アクション、リソースが定義されます。バケットポリシーではプリンシパルも定義されます。
Effect*はリクエストを許可するか拒否するかのどちらかになります。
プリンシパル
-
バケットポリシーにのみ適用されます。
-
プリンシパルは、権限を付与または拒否するアカウント/ユーザです。
-
次のように定義できます。
-
ワイルドカード"+*"
"Principal":"*"
"Principal":{"AWS":"*"}
-
テナント内のすべてのユーザのテナントID(AWSアカウントに相当)
"Principal": { "AWS": "27233906934684427525" }
-
ユーザ(バケットが存在するテナント内からのローカルまたはフェデレーテッド、またはグリッド内の別のテナント)
"Principal": { "AWS": "arn:aws:iam::76233906934699427431:user/tenant1user1" }
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-user/tenant2user1" }
-
グループ(バケットが配置されているテナント内からのローカルまたはフェデレーテッド、またはグリッド内の別のテナント)。
"Principal": { "AWS": "arn:aws:iam::76233906934699427431:group/DevOps" }
"Principal": { "AWS": "arn:aws:iam::27233906934684427525:federated-group/Managers" }
-
Action *は、ユーザに許可または拒否される一連のS3処理です。
|
グループポリシーの場合、S3操作を実行するには、許可されているs3:ListBucket操作が必要です。 |
Resource *は、プリンシパルに対してアクションの実行を許可または拒否するバケットです。必要に応じて、ポリシーアクションが有効な場合の*条件*を指定できます。
JSONポリシーの形式は次のようになります。
{
"Statement": [
{
"Sid": "Custom name for this permission",
"Effect": "Allow or Deny",
"Principal": {
"AWS": [
"arn:aws:iam::tenant_ID::user/User_Name",
"arn:aws:iam::tenant_ID::federated-user/User_Name",
"arn:aws:iam::tenant_ID:group/Group_Name",
"arn:aws:iam::tenant_ID:federated-group/Group_Name",
"tenant_ID"
]
},
"Action": [
"s3:ListBucket",
"s3:Other_Action"
],
"Resource": [
"arn:aws:s3:::Example_Bucket",
"arn:aws:s3:::Example_Bucket/*"
],
}
]
}
AWSポリシージェネレータの使用
AWSポリシージェネレータは、実装しようとしている正しい形式と情報でJSONコードを取得するのに役立つ優れたツールです。
StorageGRIDグループポリシーの権限を生成するには、次の手順を実行します。ポリシーのタイプに応じたIAMポリシーを選択します。*希望する効果のボタンを選択します。「許可」または「拒否」です。ポリシーでdeny権限を指定して開始し、アクションドロップダウンにAllow権限*を追加することを推奨します。この権限または[すべての操作]ボックスに含めるS3操作の横にあるボックスをクリックします。[Amazon Resource Name(ARN)]ボックスにバケットパスを入力します。バケット名の前に「arn:aws:s3:::」を含めます。ex."arn:aws:s3:::example_bucket"
バケットポリシーの権限を生成するには:ポリシーのタイプに[S3 Bucket Policy]を選択します。*希望する効果のボタンを選択します。「許可」または「拒否」です。ポリシーをdeny権限で開始し、Principalのユーザまたはグループ情報にAllow permissions * Typeを追加することを推奨します。[Actions]ドロップダウンで、この権限または[All Actions]ボックスに含めるS3アクションの横にあるボックスをクリックします。*[Amazon Resource Name(ARN)]ボックスにバケットパスを入力します。バケット名の前に「arn:aws:s3:::」を含めます。ex."arn:aws:s3:::example_bucket"
たとえば、すべてのユーザにバケット内のすべてのオブジェクトに対するGetObject処理の実行を許可するバケットポリシーを生成し、指定したアカウントの「Marketing」グループに属するユーザにのみフルアクセスを許可するとします。
-
ポリシータイプとして[S3][Bucket Policy]を選択します。
-
「許可」エフェクトを選択します。
-
マーケティンググループの情報を入力します。arn:aws:iam::95390887230002558202:federated-group/Marketing
-
[すべてのアクション]のボックスをクリックします。
-
バケット情報を入力します。arn:aws:s3:::example_bucket、arn:aws:s3:::example_bucket /*
-
[Add Statement]ボタンをクリックします。
-
「許可」エフェクトを選択します。
-
すべてのユーザのアスタリスク「*」を入力します。
-
[GetObject actions]と[ListBucket actions]の横にあるボックスをクリックします。
-
バケット情報を入力します。arn:aws:s3:::example_bucket、arn:aws:s3:::example_bucket /*
-
[Add Statement]ボタンをクリックします。
-
「ポリシーの生成」ボタンをクリックすると、生成されたポリシーを含むポップアップウィンドウが表示されます。
-
次のような完全なJSONテキストをコピーします。
{
"Id": "Policy1744399292233",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1744399152830",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::95390887230002558202:federated-group/Marketing"
]
}
},
{
"Sid": "Stmt1744399280838",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": "*"
}
]
}
このJSONはそのまま使用することも、"Statement"行の上にあるIDとバージョンの行を削除することもできます。また、アクセス許可ごとに、より意味のあるタイトルでSIDをカスタマイズしたり、削除したりすることもできます。
例:
{
"Statement": [
{
"Sid": "MarketingAllowFull",
"Action": "s3:*",
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": {
"AWS": [
"arn:aws:iam::95390887230002558202:federated-group/Marketing"
]
}
},
{
"Sid": "EveryoneReadOnly",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::example_bucket",
"arn:aws:s3:::example_bucket/*"
],
"Principal": "*"
}
]
}
グループポリシー(IAM)
ホームディレクトリ形式のバケットアクセス
このグループポリシーでは、users usernameという名前のバケット内のオブジェクトへのアクセスのみがユーザに許可されます。
{
"Statement": [
{
"Sid": "AllowListBucketOfASpecificUserPrefix",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::home",
"Condition": {
"StringLike": {
"s3:prefix": "${aws:username}/*"
}
}
},
{
"Sid": "AllowUserSpecificActionsOnlyInTheSpecificUserPrefix",
"Effect": "Allow",
"Action": "s3:*Object",
"Resource": "arn:aws:s3:::home/?/?/${aws:username}/*"
}
]
}
オブジェクトロックバケットの作成を拒否します
このグループポリシーでは、ユーザがバケットを作成してそのバケットでオブジェクトロックを有効にすることはできません。
|
このポリシーはStorageGRID UIでは適用されず、S3 APIでのみ適用されます。 |
{
"Statement": [
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
},
{
"Action": [
"s3:PutBucketObjectLockConfiguration",
"s3:PutBucketVersioning"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::*"
}
]
}
オブジェクトロックの保持制限
このバケットポリシーでは、Object-Lockの保持期間が10日以下に制限されます
{
"Version":"2012-10-17",
"Id":"CustSetRetentionLimits",
"Statement": [
{
"Sid":"CustSetRetentionPeriod",
"Effect":"Deny",
"Principal":"*",
"Action": [
"s3:PutObjectRetention"
],
"Resource":"arn:aws:s3:::testlock-01/*",
"Condition": {
"NumericGreaterThan": {
"s3:object-lock-remaining-retention-days":"10"
}
}
}
]
}
ユーザーによるオブジェクトの削除をversionIdで制限します
このグループポリシーは、versionIdでバージョン管理オブジェクトを削除することをユーザに制限します
{
"Statement": [
{
"Action": [
"s3:DeleteObjectVersion"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::*"
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::*"
}
]
}
グループを読み取り専用アクセスで単一のサブディレクトリ(プレフィックス)に制限する
このポリシーでは、グループのメンバーにバケット内のサブディレクトリ(プレフィックス)への読み取り専用アクセスを許可します。バケット名は「study」、サブディレクトリは「study01」です。
{
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndstudyListingOfBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3::: study"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"study01/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfstudy01",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::study"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"study01/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInstudy01Folder",
"Effect": "Allow",
"Action": [
"s3:Getobject"
],
"Resource": [
"arn:aws:s3:::study/study01/*"
]
}
]
}
バケットポリシー
バケットを読み取り専用アクセス権を持つ単一ユーザに制限します
このポリシーでは、1人のユーザにバケットへの読み取り専用アクセスを許可し、他のすべてのユーザへのアクセスを明示的に拒否します。評価を迅速に行うには、ポリシーの先頭にDenyステートメントをグループ化することを推奨します。
{
"Statement": [
{
"Sid": "Deny non user1",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::34921514133002833665:user/user1"
},
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
]
},
{
"Sid": "Allow user1 read access to bucket bucket1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::34921514133002833665:user/user1"
},
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*"
]
}
]
}
バケットを読み取り専用アクセス権を持つ少数のユーザに制限する。
{
"Statement": [
{
"Sid": "Deny all S3 actions to employees 002-005",
"Effect": "deny",
"Principal": {
"AWS": [
"arn:aws:iam::46521514133002703882:user/employee-002",
"arn:aws:iam::46521514133002703882:user/employee-003",
"arn:aws:iam::46521514133002703882:user/employee-004",
"arn:aws:iam::46521514133002703882:user/employee-005"
]
},
"Action": "*",
"Resource": [
"arn:aws:s3:::databucket1",
"arn:aws:s3:::databucket1/*"
]
},
{
"Sid": "Allow read-only access for employees 002-005",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::46521514133002703882:user/employee-002",
"arn:aws:iam::46521514133002703882:user/employee-003",
"arn:aws:iam::46521514133002703882:user/employee-004",
"arn:aws:iam::46521514133002703882:user/employee-005"
]
},
"Action": [
"s3:GetObject",
"s3:GetObjectTagging",
"s3:GetObjectVersion"
],
"Resource": [
"arn:aws:s3:::databucket1",
"arn:aws:s3:::databucket1/*"
]
}
]
}
バケット内のバージョン管理オブジェクトのユーザによる削除を制限する
このバケットポリシーは、ユーザ(ユーザID「56622399308951294926」で識別)がversionIdでバージョン管理オブジェクトを削除することを制限します
{
"Statement": [
{
"Action": [
"s3:DeleteObjectVersion"
],
"Effect": "Deny",
"Resource": "arn:aws:s3:::verdeny/*",
"Principal": {
"AWS": [
"56622399308951294926"
]
}
},
{
"Action": "s3:*",
"Effect": "Allow",
"Resource": "arn:aws:s3:::verdeny/*",
"Principal": {
"AWS": [
"56622399308951294926"
]
}
}
]
}