Top > Cloud > S3

2013.10.17

IAMを使ってAWS Management Consoleから特定のBucketのみ操作を許可する方法

前に書いた『IAMを使って特定の人に特定のbucketのみ操作を許可する』は操作だけの話だったんですが
AWS Management Consoleを使おうとしたらハマったのでメモ。

  1. IAMでユーザ作成。
  2. ユーザのポリシーに以下を指定
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Sid": "Stmt1382001691000",
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
      ],
      "Sid": "Stmt1382001709000",
      "Resource": [
        "arn:aws:s3:::hoge-bucket"
      ],
      "Effect": "Allow"
    },
    {
      "Action": [
        "s3:*"
      ],
      "Sid": "Stmt1382001730000",
      "Resource": [
        "arn:aws:s3:::hoge-bucket/*"
      ],
      "Effect": "Allow"
    }
  ]
}

以上。

ハマったところは
“arn:aws:s3:::hoge-bucket”に対する操作に”s3:ListBucket”を指定するよう書いてるサイトが多いんですが
試したところ、これだけだとバケットを開こうとすると
“Sorry! You were denied access to do that.”
とエラーメッセージが出ます。
AWS Management Consoleでアクセスできるようにするには
“s3:GetBucketLocation”も追加すると操作できるようになりました。

2012.03.19

IAMを使って特定の人に特定のbucketのみ操作を許可する

S3を使う時に特定の人に特定のbucketだけを許可したい場合。

  1. AWS Management Consoleにログイン
  2. IAMタブを開く
  3. Groupsで「Create New Group」をクリックしWizardを開く
  4. Select Policy Templateで「Amazon S3 Full Access」を「Select」
  5. 下記の内容にPolicy Documentを修正
  6. 「Continue」をクリック「Create Group」でグループを作成
  7. 作成したグループに権限を割り当てたいユーザを加えて完了

Pollcy Documentはこんな感じ

{
  “Statement”: [
    {
      “Effect”: “Allow”,
      “Action”: “s3:*”,
      “Resource”: “arn:aws:s3:::hoge.bucket.hoge”
    },
    {
      “Effect”: “Allow”,
      “Action”: “s3:*”,
      “Resource”: “arn:aws:s3:::hoge.bucket.hoge/*”
    }
  ]
}

デフォルトではs3の全てのアクションが全てのリソースに対して許可されたものが作成されます。
そこでテンプレのResourceを修正して特定のbucketのみに変更。

ARNはAmazon Resource Nameの略でリソースを指定していることを表してるようです。
続いてawsのs3を指定しています。
そのあと:を3つ続けbucketを指定します。

ここで一つ目には
arn:aws:s3:::hoge.bucket.hoge
を指定。
これはbucket内のファイルリストの表示などbucketを指定しての操作を許可してます。

続いてコピペでもうひとつ作って修正。
変更点は
arn:aws:s3:::hoge.bucket.hoge/*
とResourceに bucket/* を指定することで
bucket内のオブジェクト全てに対する操作を許可してます。
これでダウンロードやアップロードが可能になるみたい。

何ができるか、についてはActionを指定するらしい(やってない)。