Permissionの設定について

世間的にはAWSのサービスを利用するのが大流行りなようなので、私も最近よく利用している。(おいAmazon、ちゃんと税金払えよ)
中でもS3は単なる静的Webページを公開するだけならローコスト&ハイパフォーマンスなサービスで超便利。サーバの監視が全くと言っていいほど要らないので運用が楽すぎる。
で、そんなS3だけど、権限周りが結構ややこしいのでちょっとまとめておく。

こんなシチュエーションを想定している

  • 自分の会社でAWSアカウントを持っている
  • 社員にはIAMユーザが作成されており、AWS管理コンソールにログインできる
  • 社内用共有S3バケットがあり、各ユーザ毎のフォルダ

簡単に手順を説明すると

管理ユーザでバケット&ユーザ作成

  1. S3バケット(company)を作成
  2. /user1、home/user1、home/user2 フォルダを作成
  3. IAM画面でグループ(AllUsers)を作成
  4. 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}/"
    }
    ]
    }
  5. IAMユーザ(user1,user2)を作成し、AllUsersグループに所属させる

user1でS3にファイルアップロードとかDLとか

  1. user1でAWS管理コンソールにログインしS3サービス画面を表示
  2. バケット一覧が表示される ※1
  3. homeフォルダをクリックしたらuser1、user2が見える ※2
  4. user2 をクリックすると何も見えない
  5. user1 をクリックすると空
  6. フォルダ作成、ファイルアップできる
  7. 今アップしたファイルをDLできる
  8. フォルダ、ファイルを削除できる
  9. user1フォルダを削除してみる→できない ※3
  10. user2フォルダも当然削除できない

AWS管理コンソールでは、一覧権限が無いと操作できないので、止む無しで※1、※2の設定を入れている。最初、これらの権限無しで試してたのだが、何もできないので、「なんじゃこれ?バグっとんちゃうん??」と思いながら色々やってたのだが、どうやらそういう仕様らしいです。AWS管理コンソールを使う限りは諦めてください。(もちろんAPIで操作する場合は要らないので、世に出回っているS3クライアントならこれらの権限が必要ないかもしれません)

参考URL)