Amazon Simple Storage Service (Amazon S3) バケットにおいて、AWS アカウント 内の AWS Key Management Service (AWS KMS) キーで暗号化されたオブジェクトのみを保存するようにしたいと考えています。該当するオブジェクトのみをバケットにアップロードできるようにする方法を教えてください。
簡単な説明
Amazon S3 のデフォルト暗号化を使用すると、アップロードするオブジェクトを S3 バケットに保存する前に、暗号化ヘッダー (例: x-amz-server-side-encryption、x-amz-server-side-encryption-aws-kms-key-id) を含まないオブジェクトを AWS KMS で暗号化できます。次に、バケットポリシーを使用すると、他の暗号化設定 (AES-256) が行われたオブジェクトのアップロードは許可されず、AWS KMS 暗号化でアップロードされたオブジェクトには、AWS アカウント内のキー ID が付与されます。
注: AWS KMS キーで暗号化されたオブジェクトをアップロードするには、キーと S3 バケットを同じ AWS リージョンに配置する必要があります。
解決策
Amazon S3 のデフォルト暗号化
Amazon S3 コンソールを使用し、バケットの Amazon S3 デフォルト暗号化を AWS KMS に設定するには、次の手順を実行します。
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化されたオブジェクトに使用するバケットを選択します。
- [プロパティ] ビューを選択します。
- [デフォルトの暗号化] を選択し、[AWS-KMS] を選択します。
- [保存] を選択します。
注: REST API、AWS コマンドラインインターフェイス (AWS CLI)、または AWS SDK を使用して Amazon S3 のデフォルト暗号化を有効にする方法については、「デフォルト暗号化を構成する」を参照してください。
バケットポリシー
次の手順を実行し、バケットポリシーにおいて、リクエストが他の暗号化設定 (AES-256) を使用する場合、または AWS KMS 暗号化を使用しているものの AWS アカウントに属していないキー ID を含む場合に拒否する設定を行います。
- Amazon S3 コンソールを開きます。
- AWS KMS で暗号化されたオブジェクトに使用するバケットを選択します。
- [アクセス許可] ビューを選択します。
- [バケットポリシー] を選択します。
- 次の例を参考にバケットポリシーを入力します。
注: 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/*"
}
}
}
]
}
関連情報
Amazon Simple Storage Service (Amazon S3) が AWS KMS を使用する際の動作