Permissionの設定について
世間的にはAWSのサービスを利用するのが大流行りなようなので、私も最近よく利用している。(おいAmazon、ちゃんと税金払えよ)
中でもS3は単なる静的Webページを公開するだけならローコスト&ハイパフォーマンスなサービスで超便利。サーバの監視が全くと言っていいほど要らないので運用が楽すぎる。
で、そんなS3だけど、権限周りが結構ややこしいのでちょっとまとめておく。
こんなシチュエーションを想定している
簡単に手順を説明すると
管理ユーザでバケット&ユーザ作成
- S3バケット(company)を作成
- /user1、home/user1、home/user2 フォルダを作成
- IAM画面でグループ(AllUsers)を作成
- Group Permissions → Custom Policyで以下のポリシーを設定
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"], ※1
"Resource":"arn:aws:s3:::*"
},
{
"Effect":"Allow",
"Action":["s3:ListBucket"],
"Resource": "arn:aws:s3:::バケット名",
"Condition" : {
"StringLike": {
"s3:prefix": [
"", ※2
"home/", ※2
"home/${aws:username}/*"
]
}
}
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::バケット名/home/${aws:username}/*"
},
{
"Action": "s3:DeleteObject",
"Effect": "Deny", ※3
"Resource": "arn:aws:s3:::バケット名/home/${aws:username}/"
}
]
} - IAMユーザ(user1,user2)を作成し、AllUsersグループに所属させる
user1でS3にファイルアップロードとかDLとか
- user1でAWS管理コンソールにログインしS3サービス画面を表示
- バケット一覧が表示される ※1
- homeフォルダをクリックしたらuser1、user2が見える ※2
- user2 をクリックすると何も見えない
- user1 をクリックすると空
- フォルダ作成、ファイルアップできる
- 今アップしたファイルをDLできる
- フォルダ、ファイルを削除できる
- user1フォルダを削除してみる→できない ※3
- user2フォルダも当然削除できない
AWS管理コンソールでは、一覧権限が無いと操作できないので、止む無しで※1、※2の設定を入れている。最初、これらの権限無しで試してたのだが、何もできないので、「なんじゃこれ?バグっとんちゃうん??」と思いながら色々やってたのだが、どうやらそういう仕様らしいです。AWS管理コンソールを使う限りは諦めてください。(もちろんAPIで操作する場合は要らないので、世に出回っているS3クライアントならこれらの権限が必要ないかもしれません)
参考URL)
- Conditionについて:http://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Condition
- S3の場合にCondition内で使用できる条件(ポリシーキー)について:http://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/UsingIAMPolicies.html#AmazonS3PolicyKeys