Amazon S3バケットの特定のフォルダーにだけアクセスを許可する
IAM ポリシーを使用して、AWS Amazon S3 バケット内の特定のフォルダーにだけアクセスを許可する方法について説明します。
■ IAM ユーザーの作成
Amazon S3 バケットへアクセスする際に使用する認証情報を作成します。
AWS マネジメント コンソールで IAM ユーザーを作成し、アクセス キーとシークレット キーを発行します。
■ IAM ポリシーの作成
Amazon S3 バケットへのアクセス権限を定義する IAM ポリシーを作成します。
以下のようなインライン ポリシーを作成し、先程の IAM ユーザーに付与します。
例として、my-bucket バケット配下の、Suzuki フォルダー内のみ(サブフォルダーを含む)アクセスを許可する例を示します。
バケット名(my-bucket
)、およびフォルダー名(Suzuki
)は適宜置き換えてください。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndSuzukiListingOfMyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"Suzuki/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::my-bucket"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"Suzuki/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::my-bucket/Suzuki/*"
]
}
]
}
これで、AWS Amazon S3 バケット内の特定のフォルダーにだけアクセスを許可することができました。
なお、ポリシー変数 ${aws:username}
を使用することで、固定のフォルダー名(Suzuki
)の代わりに、任意のユーザー名を指定することも可能です。
※ StringLike のみがアスタリスク (*) をワイルドカードとして認識します。StringEquals はアスタリスク (*) をワイルドカードとして認識しませんので、ご注意ください。