Ongoing service disruptions
For the most recent update on ongoing service disruptions affecting the AWS Middle East (UAE) Region (ME-CENTRAL-1), refer to the AWS Health Dashboard. For information on AWS Service migration, see How do I migrate my services to another region?
Amazon S3 バケットにある特定のフォルダへのアクセス権をユーザーに付与するにはどうすればよいですか?
Amazon Simple Storage Service (Amazon S3) ユーザーが Amazon Simple Storage Service (Amazon S3) の特定のフォルダにしかアクセスできないように制限したいと考えています。
解決策
IAM ユーザーとバケットが同じ AWS アカウントに属している場合は、IAM ポリシーを使用してユーザーにバケットフォルダへのアクセス許可を付与します。IAM ポリシーでアクセスを許可する際に、バケットポリシーを更新する必要はありません。ただし、バケットポリシーが IAM ユーザーによるフォルダへのアクセスを明示的に拒否している場合は、そのバケットポリシーを更新する必要があります。
IAM ユーザーと S3 バケットが異なるアカウントに属している場合は、IAM ポリシーとバケットポリシーの両方でアクセス許可を付与します。詳細については、「別の AWS アカウントに属するユーザーに、Amazon S3 バケットにオブジェクトをアップロードするためのアクセス許可を付与する方法を教えてください」を参照してください。
IAM ポリシーでは、単一または複数のユーザーにアクセス許可を付与できます。複数のユーザーを対象にする場合、ポリシーにはグループまたは AWS IAM Identity Center ID を含めることができます。
単一ユーザーにアクセス許可を付与する
単一のユーザーに、そのユーザー用のフォルダーのみへのアクセス許可を付与するには、IAM ポリシーを作成します。
ポリシーの例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowStatement1", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowStatement2A", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/", "home/David" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowStatement3", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/David/*" ] } } }, { "Sid": "AllowStatement4A", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/David/*" ] } ] }
ポリシーに含めることができるステートメントの例を次に示します。
- AllowStatement1 を使用すると、ユーザーはコンソールを使用して自分のアカウントに属するバケットを一覧表示したり、バケットに移動したりできます。
- AllowStatement2A を使用すると、ユーザーはコンソールを使用して DOC-EXAMPLE-BUCKET 内のフォルダを一覧表示したり、フォルダーに移動したりできます。
- AllowStatement3 を使用すると、ユーザーは DOC-EXAMPLE-BUCKET/home/Username フォルダ内のコンテンツを一覧表示できます。
- AllowStatement4A を使用すると、DOC-EXAMPLE-BUCKET/home/Username フォルダ内でのみ、読み取り、書き込み、削除用のアクセス許可を含むすべてのアクションが許可されます。
グループポリシーを使用して複数のユーザーにアクセス許可を付与する
ポリシー変数を使用して複数ユーザー用のグループポリシーを作成します。
ポリシー変数 ${aws:username} を使用するバケットポリシーの例
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/${aws:username}/*", "home/${aws:username}" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Action": [ "s3:*" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${aws:username}/*" ] } ] }
上記のポリシーでは aws:username キーを使用し、Adele や David といった、各ユーザーのフレンドリ名を返します。 aws:username の値が特定の IAM ロールで有効でない場合は、一意の ID も使用できます。詳細については、「プリンシパルキーの値」を参照してください。
IAM ユーザーは、DOC-EXAMPLE-BUCKET/ などのすべての親レベルのプレフィックスを一覧表示できます。ユーザーは、任意のグラフィカルユーザーインターフェイス (GUI) クライアントを使用してホームディレクトリに移動することもできます。親レベルでの List アクションを指定していない場合は、コマンドラインインターフェイスを使用して特定のフォルダに直接アクセスする必要があります。
AWS IAM Identity Center を使用して複数のユーザーにアクセス許可を付与する
S3 バケットフォルダへのアクセスはAWS IAM Identity Center のプリンシパルに基づいて制御できます。AWS IAM Identity Center のディレクトリに属する各ユーザーには、一意のユーザー ID があります。フォルダへのアクセス制限を行う各ユーザーには、ポリシー変数 ${identitystore:UserId} を使用します。
S3 フォルダを作成する際、フォルダ名には IAM Identity Center のディレクトリに属するユーザーの ID と対応する名前を使用します。たとえば、ユーザー John のユニークユーザー ID が 1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c である場合、John を管理するには、S3 バケット内に、John 用のフォルダを /home/1111111111-2a2aaa222-bb33-4444-5555-5cc5555c555c という名前で作成します。ユーザーのユーザー ID を見つけるには、[IAM Identity Center コンソールで各ユーザーに移動するか、DescribeUser API](https://docs.aws.amazon.com/singlesignon/latest/IdentityStoreAPIReference/API_DescribeUser.html) を使用します。
次の IAM ポリシーの例では、${identityStore: UserId} 変数を使用しています。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowGroupToSeeBucketListInTheConsole", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::*" ] }, { "Sid": "AllowRootAndHomeListingOfCompanyBucket", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringEquals": { "s3:prefix": [ "", "home/" ], "s3:delimiter": [ "/" ] } } }, { "Sid": "AllowListingOfUserFolder", "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET" ], "Condition": { "StringLike": { "s3:prefix": [ "home/${identitystore:UserId}/*", "home/${identitystore:UserId}" ] } } }, { "Sid": "AllowAllS3ActionsInUserFolder", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/home/${identitystore:UserId}/*" ] } ] }

