ユーザーにファイルをS3バケットにアップロードさせ、上書きまたは削除させないようにするにはどうすればよいですか?


19

ユーザーに次の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ます。

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

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

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

回答:


25

Amazon S3用のAmazon IAMポリシーを作成する場合、サービスの操作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/*"
      ]
    }
  ]
}

1
驚くべきことに、それは完璧に機能しました。ありがとうございました!だから、sid必要ありませんか?
ザーナルコス14年

1
Sidによると、これはポリシーステートメント指定するオプションの識別子であり、ポリシー内で一意である必要があります。それは、W / O作業罰金に思える(但し、下記参照)を考えると、私は簡潔とするときversionizing政策のために、ここでそれを削除する傾向があるが、例えば、自動的に生成する政策を気にしない-しかし、その後のあたりのよう一部のAWSサービス(たとえば、Amazon SQSまたはAmazon SNS)は、この要素を必要とする場合があります[...]
ステフェンオペル14年

3
OPは「ユーザーにバケットへのファイルのアップロードを許可しますが、上書きまたは削除は許可しない」と言いますが、このポリシーはPutObjectオブジェクトのオーバーライドを許可します。それを区別する方法はないと思います。
熊Chiamiov

2
@XiongChiamiov-S3の 'PutObject'アクションは実際に上書きを意味します。これは、S3がデフォルトでどのように機能するかということです。誤って削除されないように保護する必要がある場合は、バージョニング 使用して、Amazon S3バケットに保存されているすべてのオブジェクトのすべてのバージョンを保存、取得、復元することを検討してください。-これにより、意図しないユーザーアクションとアプリケーションエラーの両方から簡単に回復できます。
ステフェンオペル

4
はい。バージョニングを使用すると、上書きされたオブジェクトを回復できます(ただし、オブジェクトが既に存在していることを発見してから、それを実行する必要があります)。とにかく、-1は質問に対する正確な答えを提供しないためです。
熊Chiamiov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.