S3 IAMでアクセス制御 (特定のフォルダにのみ権限付与)
IAMを使ってみたのでメモ。
1. AWS Management Console から IAM の画面を開き、ユーザを作成する。
2. アクセス制御したいユーザを選択し、Permissions → Attach User Policy を選択する。
3. Custom Policy を選択する。
4. Policy Document に JSON形式で適用したいポリシーを書く。
ポリシー内容
・BuketName/Folder1 へのみアクセス可能。
・BuketName/Folder1 でのみ、アップロード/ダウンロード/オブジェクト作成・削除 が可能。
・作成したユーザは、AWS Management ConsoleのS3画面(その他も)の詳細は見れない。
"s3:prefix": "Folder1/*"
"arn:aws:s3:::BuketName"
が、対象のバケット、フォルダとなります。
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketAcl", "s3:GetBucketLocation", "s3:GetBucketNotification", "s3:GetBucketPolicy", "s3:GetBucketVersioning", "s3:GetObject", "s3:GetObjectAcl", "s3:GetObjectTorrent", "s3:GetObjectVersion", "s3:GetObjectVersionAcl", "s3:ListAllMyBuckets", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListBucketVersions", "s3:ListMultipartUploadParts", "s3:PutBucketAcl", "s3:PutBucketNotification", "s3:PutBucketVersioning", "s3:PutObject", "s3:PutObjectAcl", "s3:PutObjectVersionAcl" ], "Sid": "StmtXXXXXXXXXXXXXXXXXXX", "Condition": { "StringLike": { "s3:prefix": "Folder1/*" } }, "Resource": [ "arn:aws:s3:::BuketName" ], "Effect": "Allow" } ] }
はじめはチンプンカンプンでしたが、3. Custom Policy のところで、 Policy Generator を選べば
だいたい何を書けば良いのか解ります。
(というか、わざわざ自分で書く必要はあまりないかも知れません。。)
↑ ここで付与したい権限を選べば自動でJSON形式のポリシーを作成してくれます。
・S3用クライアントツール
http://s3browser.com/
http://www.cloudberrylab.com/
ちなみに特定のEC2をとあるIAMユーザに見せないということは出来ないようです。
出来ると思ってた・・。
https://forums.aws.amazon.com/thread.jspa?threadID=118384
https://forums.aws.amazon.com/thread.jspa?threadID=75498#Message-complete
実現するには、Consolidated Billing で親子関係の別アカウント作ってという
方法だと思われます。
(AWS担いでいるベンダーの多くは、Consolidated Billing を使っているはず。)
http://www.slideshare.net/AmazonWebServicesJapan/awsaws-billing
以上です。