17

AWS EC2 に移行するにあたり、正当な理由でインスタンスのユーザー権限を制限したいと考えています。インスタンスが行う必要があることの 1 つは、S3 上のファイルにアクセスし、そこにファイルを書き込むことです。ただし、そのユーザーにすべての権限を付与しないと、これを達成する方法が見つかりません

s3cmd を使用すると、ポリシーのアクセス許可を与えた s3 バケットで "ls" と "du" を呼び出すことができますが、これらのフォルダーのいずれかと PUT/同期しようとすると、常に 403 エラーで失敗します。root 資格情報を使用すると、転送は正しく行われます。

したがって、上記のバケットのすべてのアクセス許可をユーザーに付与すると、PUT できない理由がわかりませんが、arn:aws:s3:::* (すべてのバケット) を付与すると、PUT が可能になります。私には意味がありません。

これまでにこれに対処したことのある人はいますか?

4

4 に答える 4

29

このようなことを試してください。問題は、s3cmd が機能するために s3:ListAllMyBuckets と s3:ListBuckets が必要なことだと思います。理由はわかりませんが、バケットのリストを取得できない限り機能しません。初めてs3cmdで権限を使用しようとしたときに同じ問題が発生しましたが、これが解決策でした。

{
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Action": [ 
          "s3:ListBucket", 
          "s3:PutObject",
          "s3:PutObjectAcl"
      ],
      "Effect": "Allow",
      "Resource": [
          "arn:aws:s3:::bucket/path", 
          "arn:aws:s3:::bucket/path/*"
      ]
    }
  ]
}

編集s3:PutObjectAcl以下の Will Jessop が述べているように、s3cmd の新しいバージョンに必要なアクションを追加しました。

于 2012-07-24T14:30:23.190 に答える
4

bwightの答えはほぼ正しいです(おそらく古いバージョンのs3cmdで使用されていたものです)が、それを機能させるにはas3:PutObjectAclを追加する必要があります:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt123456",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Sid": "Stmt123457",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname",
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}
于 2014-04-18T17:29:50.820 に答える