4

アップロード ポリシーとフォーム フィールドを使用して、アップロードごとにサーバー側の暗号化を有効にするなど、ブラウザから S3 にファイルを直接アップロードするための直接ブラウザ アップロード フォームを使用していますfor x-amz-server-side-encryption

問題は、アップロードされたファイルにサーバー側の暗号化を適用する S3 側のバケット ポリシーにあります。バケット ポリシーが設定されていないため、サーバー側の暗号化が有効になっているため、ファイルは完全にアップロードされます。バケット ポリシーを追加すると、HTTP 403 (AccessDenied) エラーでアップロードが拒否されます。

私が使用している完全なバケット ポリシーは次のとおりです (Amazon のドキュメントから引用)。

{
  "Version": "2008-10-17",
  "Id": "PutObjPolicy",
  "Statement": [
    {
      "Sid": "DenyUnEncryptedObjectUploads",
      "Effect": "Deny",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::MY-BUCKET-NAME/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
  ]
}

署名され、アップロード フォームで使用されるポリシー (エンコードされておらず、フォーマットされていない) の例を次に示します。

{
  "expiration": "2013-04-14T14:29:56.000Z",
  "conditions": [
    {
      "bucket": "MY-BUCKET-NAME"
    },
    {
      "acl": "private"
    },
    {
      "x-amz-server-side-encryption": "AES256"
    },
    [
      "starts-with", "$key", "uploads/"
    ],
    {
      "success_action_status": "201"
    }
  ]
}

簡潔にするためにアップロード フォームの詳細は省略しますが、対応する非表示のフォーム フィールドをx-amz-server-side-encryption. 繰り返しますが、これはバケット ポリシーがなくても機能するため、これのクライアント側の側面は良好な状態にあると思います。この時点で、特定のクラスの PUT を具体的に許可する必要があると思いますが、何を追加すればよいかわかりません。

何か案は?

4

0 に答える 0