web-dev-qa-db-ja.com

読み取り専用およびライトワンスアクセス用のAmazon S3 ACL

私はウェブアプリケーションを開発していますが、現在、データへのアクセスに使用するAWSアカウントに次のACLが割り当てられています。

{
  "Statement": [
    {
      "Sid": "xxxxxxxxx", // don't know if this is supposed to be confidential
      "Action": [
        "s3:*"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::cdn.crayze.com/*"
      ]
    }
  ]
}

ただし、AWSの認証情報が侵害された場合に攻撃者がデータを破壊できないように、これをもう少し制限したいと思います。

ドキュメントから、次のアクションのみを許可したいようです:s3:GetObjectおよびs3:PutObject、ただし、アカウントがまだ存在していないオブジェクトのみを作成できるようにしたい-つまり、既存のオブジェクトに対するPUTリクエストは拒否する必要があります。これは可能ですか?

51
Jake Petroules

Amazon S3 では、おそらく想像したように、これは不可能です。ただし、 Versioning を使用することでこの制限を回避できます。は、オブジェクトの複数のバリアントを同じバケットに保持する手段ですそして、このようなユースケースを念頭に置いて開発されました:

バージョン管理を有効にして、オブジェクトが誤って削除されたり上書きされたりするのを防止したり、オブジェクトをアーカイブして以前のバージョンのオブジェクトを取得したりできます。

たとえば、関連するFAQもいくつかあります。

  • バージョニングとは? -バージョニングを使用すると、Amazon S3バケットに保存されているすべてのオブジェクトのすべてのバージョンを保存、取得、復元できます。バケットのバージョニングを有効にすると、Amazon S3は、それらに対してPUT、POST、COPY、またはDELETE操作を実行するたびに既存のオブジェクトを保持します。デフォルトでは、GETリクエストは最新のバージョンを取得します。上書きまたは削除されたオブジェクトの古いバージョンは、リクエストでバージョンを指定することで取得できます。

  • バージョニングを使用する理由 -Amazon S3は、耐久性の高いストレージインフラストラクチャをお客様に提供します。バージョン管理は、顧客が誤ってオブジェクトを上書きまたは削除した場合に回復する手段を提供することにより、追加レベルの保護を提供します。 これにより、意図しないユーザーアクションやアプリケーションエラーから簡単に回復できます。データの保持とアーカイブにバージョニングを使用することもできます。 [強調鉱山]

  • バージョニングによってオブジェクトが誤って削除されないようにするにはどうすればよいですか? -ユーザーがオブジェクトに対してDELETE操作を実行すると、その後のデフォルトのリクエストは行われなくなりますオブジェクトを取得します。ただし、そのオブジェクトのすべてのバージョンは引き続きAmazon S3バケットに保存され、取得または復元できます。 バージョンを完全に削除できるのは、Amazon S3バケットの所有者のみです。[鉱山を強調]

バケット所有者(もちろん、アクセスするユーザーとは異なる可能性があります)のAWS認証情報について本当に最優先事項である場合は、さらに一歩進んでください。 どのようにして最大の保護を確保できますか?保存されたバージョン?

多要素認証 を使用するバージョニングのMFA削除機能を使用して、追加のセキュリティ層を提供できます。 [...] Amazon S3バケットでMFA Deleteを使用したバージョニングを有効にする場合、オブジェクトのバージョンを完全に削除するには2つの認証形式が必要です:AWSアカウントの認証情報と有効な6桁のコードとシリアル番号物理的に所有しているデバイス。 [...]

47
Steffen Opel

これが偶然の上書きであり、回避しようとしている場合、およびビジネス要件で不整合の短い時間枠が許容される場合は、Lambda関数でロールバックを実行できます。

  1. 「同じ名前の新しいオブジェクトがない」というポリシーを作成します。ほとんどの場合それは起こりません。それを実施するには:
  2. AWS Lambda関数 でS3:PutObjectイベントをリッスンします。
  3. イベントが発生したときに、複数のバージョンが存在するかどうかを確認します。
  4. 複数のバージョンが存在する場合は、最新のバージョンを除いてすべて削除します。
  5. 何が起こったかをアップローダーに通知します(元のアップローダーをx-amz-meta-*オブジェクトの。詳細 ここ )。
7

これをS3 Object Lockで実行できます。これはバケットごとの設定であり、2種類のWORMロックのいずれかを配置できます。

  • 「保持期間」-変更できません
  • 「リーガルホールド」-バケットの所有者はいつでも変更できます

https://docs.aws.Amazon.com/AmazonS3/latest/dev/object-lock.html

2
Dan Pritts