ひょっとするとタイトルのようなことをしないといけない時が来るかもしれません。
以下のドキュメントを参考にしました。
Amazon S3: IAM ユーザーが自分の S3 ホームディレクトリにプログラムおよびコンソールでアクセスすることを許可する
下記のIAMポリシーをIAMユーザーへ適用してやればOKです。 ドキュメントと違いはhomeディレクトリはなしを想定しています。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::バケット名",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"${aws:username}/*"
]
}
}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::バケット名/${aws:username}",
"arn:aws:s3:::バケット名/${aws:username}/*"
]
}
]
}
Condition
でS3プレフィックスを指定することでそのフォルダしか操作できません。
しかし上記のポリシーだと、マネコンからの操作で一番上に空のフォルダが作れてしまうようです。
なので下記のようにしてみました。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::バケット名",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"${aws:username}/*"
]
}
}
},
{
"Effect": "Allow",
"Action": "PutObject",
"Resource": "arn:aws:s3:::バケット名/*",
"Condition": {
"StringLike": {
"s3:prefix": "${aws:username}/*"
}
}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::バケット名/${aws:username}",
"arn:aws:s3:::バケット名/${aws:username}/*"
]
}
]
}
PutObject
にもCondition
でS3プレフィックスを指定してやれば作れなくなりました。