web-dev-qa-db-ja.com

ユーザーがS3バケットにファイルをアップロードできるが、上書きまたは削除できないようにする方法は?

ユーザーに対して次のIAMポリシーがあります

_{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1395161912000",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:PutObject",
        "s3:*"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Sid": "list",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    }
  ]
}
_

目標は、ユーザーがファイルをバケットにアップロードできるようにすることですが、上書きや削除はできません。バックアップ用です。 ListBucketPutObjectから始めましたが、機能しなかったため_*_を追加しました。 _*_でも、ユーザーはファイルをアップロードできず、_Access Denied_を取得します。

シミュレータを試してみると、ListBucketに対してDenied - Implicitly denied (no matching statements found).が返されますが、暗黙的に許可しているので奇妙に見えます。

私はS3クライアントとしてCyber​​duckと3Hubの両方を試しました。

何が間違っているのでしょうか?

19
Znarkus

Amazon IAMAmazon S ​​のポリシーを作成する場合、 サービスの操作 の違いに注意する必要があります(例 ListAllMyBuckets )、 バケットの操作 (例 ListBucket )および オブジェクトの操作 (例 GetObject )。

特に、ポリシーのResource仕様は、次のパターンに従って適切なターゲットエンティティに対処する必要があります(例:さまざまな Amazon S3のポリシーの例 を参照)。

  • サービスの操作-arn:aws:s3:::*
  • バケットの操作-arn:aws:s3:::<bucket>
  • オブジェクトの操作-arn:aws:s3:::<bucket>/<object>

解決

Access Deniedが発生しています。PutObjectにバケットレベルのリソースを指定しているため、arn:aws:s3:::<bucket>/*のようなオブジェクトレベルのリソース指定が必要です-したがって、次のポリシーでサンプルの使用をカバーする必要があります場合:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": [
        "arn:aws:s3:::*"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucketname/*"
      ]
    }
  ]
}
25
Steffen Opel