62

私はWebアプリケーションを開発しており、現在、データへのアクセスに使用する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:GetObjects3:PutObject、しかし、具体的には、アカウントがまだ存在しないオブジェクトのみを作成できるようにしたいです。つまり、既存のオブジェクトに対するPUT要求は拒否する必要があります。これは可能ですか?

4

4 に答える 4

55

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

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

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

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

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

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

バケット所有者(もちろん、アクセスするユーザーとは異なる可能性があります)のAWSクレデンシャルについて本当に重要な場合は、さらに一歩進んで、保存されたバージョンを最大限に保護するにはどうすればよいですか?を参照してください。

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

于 2012-05-15T01:04:27.390 に答える
6

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

  1. 「同じ名前の新しいオブジェクトを作成しない」というポリシーにします。ほとんどの場合、それは起こりません。強制するには:
  2. AWS Lambda 関数で S3:PutObject イベントをリッスンします。
  3. イベントが発生したら、複数のバージョンが存在するかどうかを確認します。
  4. 複数のバージョンが存在する場合は、最新のものを除いてすべて削除します。
  5. アップローダに何が起こったかを通知します (元のアップローダがx-amz-meta-*オブジェクトに含まれていると便利です。詳細はこちらをご覧ください)。
于 2016-06-30T11:56:29.337 に答える
5

S3 Object Lock を使用して、オブジェクトのバージョンをロックできるようになりました。これはバケットごとの設定であり、2 種類の WORM ロックのいずれかを配置できます。

  • 「保存期間」 - 変更不可
  • 「訴訟ホールド」 - バケット所有者はいつでも変更できます

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

以下の@Kijana Woodardが述べたように、これはオブジェクトの新しいバージョンの作成を妨げません。

于 2018-12-03T19:01:09.053 に答える