Amazon S3 バケットにある特定のフォルダへのアクセス権を、ユーザーに付与するにはどうすればよいですか?

最終更新日: 2020 年 11 月 5 日

AWS Identity and Access Management (IAM) ユーザーに対し、Amazon Simple Storage Service (Amazon S3) バケットにある特定のフォルダーへのアクセス権を付与したいと思います。その方法を教えてください。

解決方法

IAM ユーザーが、S3 バケットと同じ AWS アカウントに属しているのであれば、IAM ポリシーを使用して、そのバケットの特定のフォルダーに対するアクセス権を、ユーザーに付与することができます。バケットのポリシーで、対象のフォルダーに対するユーザーからのアクセスを明示的に拒否していなければ、IAM ポリシーによりアクセス権を付与するだけで、バケット側のポリシーを変更する必要はありません。 IAM ポリシーは、個別の IAM ユーザーに追加することも、複数のユーザーが切り替えられるように IAM ロールにアタッチすることも可能です。

IAM ID(ユーザーもしくはロール)と S3 バケットが、それぞれ異なる AWS アカウントに属している場合は、IAM ポリシーとバケットポリシーの両方に、アクセス権を付与する必要があります。クロスアカウントのアクセスの詳細については、別の AWS アカウントのユーザーに、オブジェクトを Amazon S3 バケットにアップロードするアクセス権を与えるにはどうすれば良いですか?、を参照してください。

次に示す IAM ポリシーの例では、DOC-EXAMPLE-BUCKET/media フォルダーから、Amazon S3 コンソールを使用してオブジェクトをダウンロードすることを、ユーザーに許可しています。このポリシーには以下のようなステートメントが含まれています。

  • AllowStatement1 により、ユーザーに対し、同じ AWS アカウントに属するバケットをリストする権限を付与します。ユーザーには、コンソールを使用して対象のバケットを開くために、この権限が必要です。
  • AllowStatement2A により、ユーザーが DOC-EXAMPLE-BUCKET にあるフォルダーをリストできるように許可します。このリストは、ユーザーがコンソールを使用してフォルダーを開くために必要です。同時にこのステートメントでは、ユーザーがコンソールを使用して、プレフィックス media/ により検索することも許可しています。
  • AllowStatement3 では、DOC-EXAMPLE-BUCKET/media にあるコンテンツをリストする権限を、ユーザーに対し付与します。
  • AllowStatement4A により、DOC-EXAMPLE-BUCKET/media フォルダーからオブジェクト(s3:GetObject)をダウンロードすることを、ユーザーに対し許可します。
{
 "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":["","media"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },    
   {
     "Sid": "AllowStatement4A",
     "Effect": "Allow",
     "Action": ["s3:GetObject"],
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/media/*"]
   }
 ]
}

別の例として次の IAM ポリシーでは、DOC-EXAMPLE-BUCKET/media に対するオブジェクトのダウンロードとアップロードを、(AWS Command Line Interface (AWS CLI) あるいは the Amazon S3 API などの)コンソールもしくはプログラム的な手段により実行することを、ユーザーに許可しています。前出の IAM ポリシーとの違いは次のとおりです。

  • AllowStatement2B には "s3:delimiter":["/"] が含まれています。この記述により、オブジェクトのパスに含まれるフォルダーの区切り記号として、スラッシュ(/)を指定しています。ユーザーが、AWS CLI あるいは Amazon S3 API を使用してリクエストを生成する場合は、区切り記号を指定しておくことがベストプラクティスです。
  • AllowStatement4B により、DOC-EXAMPLE-BUCKET/media フォルダーに対するオブジェクトのダウンロード(s3:GetObject)とアップロード(s3:PutObject)を、ユーザーに許可しています。
{
 "Version":"2012-10-17",
 "Statement": [
   {
     "Sid": "AllowStatement1",
     "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::*"]
   },
  {
     "Sid": "AllowStatement2B",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringEquals":{"s3:prefix":["","media"],"s3:delimiter":["/"]}}
    },
  {
     "Sid": "AllowStatement3",
     "Action": ["s3:ListBucket"],
     "Effect": "Allow",
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET"],
     "Condition":{"StringLike":{"s3:prefix":["media/*"]}}
    },
   {
     "Sid": "AllowStatement4B",
     "Effect": "Allow",
     "Action": ["s3:GetObject", "s3:PutObject"],
     "Resource": ["arn:aws:s3:::DOC-EXAMPLE-BUCKET/media/*"]
   }
 ]
}

この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?