AWS アカウントの AWS Key Management Service (AWS KMS) キーで暗号化したオブジェクトのみを Amazon Simple Storage Service (Amazon S3) バケットに保存したいと思います。どうしたら該当するオブジェクトのみをバケットにアップロードできますか?
簡単な説明
Amazon S3 のデフォルト暗号化を使用して、暗号化ヘッダーなしでアップロードされたオブジェクトが S3 バケットに保存される前に AWS KMS によって暗号化されるようにします。暗号化ヘッダーは、x-amz-server-side-encryption やx-amz-server-side-encryption-aws-kms-key-id などのヘッダーです。次に、バケットポリシーを使用して、アップロードされたオブジェクトが、AWS アカウントの AWS KMS キー ID を使用して AWS KMS を使用して暗号化されていることを確認します。
注意: AWS KMS キーによって暗号化されたオブジェクトをアップロードするには、キーおよび S3 バケットが同じ AWS リージョンにある必要があります。
解決方法
Amazon S3 デフォルト暗号化
Amazon S3 コンソールでバケットの Amazon S3 デフォルト暗号化を AWS KMS に設定するには、以下のステップに従います。
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化したオブジェクト用のバケットを選択します。
- [Properties] (プロパティ) ビューを選択します。
- [Default encryption] (デフォルト暗号化)、[AWS-KMS] の順に選択します。
- [AWS KMS key] (AWS KMS キー) で、AWS KMS キーを選択します。
- [Bucket Key] (バケットキー) で [Enable] (有効にする) を選択します。この設定により、Amazon S3 バケットキーを使用できます。
- [Save] (保存) を選択します。
注意: REST API、AWS コマンドラインインターフェイス (AWS CLI)、または AWS SDK を使用して Amazon S3 デフォルト暗号化を有効にするには、「Amazon S3 のデフォルトバケット暗号化の有効化」を参照してください。
バケットポリシー
以下の手順に従って、別の暗号化設定 (AES-256) を使用するアップロードリクエストを拒否するようにバケットポリシーを設定します。または、AWS KMS 暗号化を使用するものの、AWS アカウント以外のキー ID を含むリクエスト:
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化したオブジェクト用のバケットを選択します。
- [Permissions] (許可) ビューを選択します。
- [バケットポリシー] を選択します。
- 次のようなバケットポリシーを入力します。
**注意:**bucketname はお客様のバケットの名前に置き換えてください。us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab を、お客様の AWS リージョン、AWS アカウント ID、および AWS KMS キー ID に置き換えてください。
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "RequireKMSEncryption",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucketname/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "RequireSpecificKMSKey",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringNotLikeIfExists": {
"s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
}
}
]
}
このバケットポリシーを S3 バケットに追加したら、S3 バケットにオブジェクトをアップロードするときに x-amz-server-side-encryption とx-amz-server-side-encryption-aws-kms-key-id というヘッダーを含める必要があります。詳細情報は、「リクエスト構文」を参照してください。
関連情報
Amazon Simple Storage Service (Amazon S3) が AWS KMS を使用する方法
Amazon S3 バケットキーを使用した SSE-KMS のコストの削減