KMS キーで暗号化したオブジェクトのみを S3 バケットに保存したいのですが、これはどのように実行できますか?
最終更新日: 2018 年 8 月 31 日
簡単な説明
Amazon S3 デフォルト暗号化を使用して、暗号化ヘッダー (x-amz-server-side-encryption や x-amz-server-side-encryption-aws-kms-key-id など) なしでアップロードされたオブジェクトを (S3 バケットに保存する前に) AWS KMS で確実に暗号化します。次に、バケットポリシーを使用し、別の暗号化設定 (AES-256) を使用したオブジェクトのアップロードを禁止して、AWS KMS 暗号化でアップロードされたオブジェクトに AWS アカウントのキー ID が含まれていることを確認します。
注意: AWS KMS キーによって暗号化されたオブジェクトをアップロードするには、キーおよび S3 バケットが同じ AWS リージョンにある必要があります。
解決方法
Amazon S3 デフォルト暗号化
Amazon S3 コンソールでバケットの Amazon S3 デフォルト暗号化を AWS KMS に設定するには、以下のステップに従います。
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化したオブジェクト用のバケットを選択します。
- [Properties] (プロパティ) ビューを選択します。
- [Default encryption] (デフォルト暗号化)、[AWS-KMS] の順に選択します。
- [保存] を選択します。
注意: REST API、AWS Command Line Interface (AWS CLI)、または AWS SDK を使用して Amazon S3 デフォルト暗号化を有効にするには、「Amazon S3 のデフォルトバケット暗号化の有効化」を参照してください。
バケットポリシー
アップロードリクエストで異なる暗号化設定 (AES-256) を使用している場合や、AWS KMS 暗号化を使用しているが該当する AWS アカウントのキー ID とは異なる場合、これらのリクエストを拒否するようにバケットポリシーを設定するには、以下のステップに従います。
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化したオブジェクト用のバケットを選択します。
- [Permissions] (許可) ビューを選択します。
- [バケットポリシー] を選択します。
- 次のようなバケットポリシーを入力します。
警告: samplebucketname は実際のバケット名に置き換え、 us-east-1:111122223333 は正しい AWS リージョンおよび AWS アカウント ID に置き換えてください。
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenySSE-S3",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::samplebucketname/*",
"Condition": {
"StringEquals": {
"s3:x-amz-server-side-encryption": "AES256"
}
}
},
{
"Sid": "RequireKMSEncryption",
"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/*"
}
}
}
]
}