AWS KMS を使用して Amazon S3 バケット内の特定のフォルダを暗号化するにはどうすればよいですか?
最終更新日: 2021 年 1 月 5 日
Amazon Simple Storage Service (Amazon S3) バケット内の特定のフォルダを AWS Key Management Service(AWS KMS) キーで暗号化したいと考えています。どうすればそれができますか?
解決方法
Amazon S3 コンソールを使用したフォルダの暗号化
1. Amazon S3 コンソールを開きます。
2. 暗号化するフォルダに移動します。
3. フォルダを選択し、 [アクション] を選択します。
4. [サーバー側の暗号化を編集する] を選択します。
5. [サーバー側の暗号化を有効にする] で [有効] を選択します。
6. AWS Key Management Service キー (SSE-KMS) で [暗号化キータイプ] を選択します 。
7. フォルダの暗号化に使用する AWS KMS キーを選択します。
注: aws/s3 という名前のキーは、AMS KMS が管理するデフォルトキーです。フォルダをデフォルトキーまたはカスタムキーのいずれかを使って暗号化できます。
8. [変更を保存] を選択します。
AWS CLI を使用したフォルダの暗号化
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用して、既存のフォルダの暗号化を変更することはできません。代わりに、AWS KMS 暗号化でフォルダ自体にコピーするコマンドを実行することができます。
AWS KMS のデフォルトキー (aws/s3) を使ってファイルを暗号化するには、次のコマンドを実行します。
aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms
このコマンド構文により、AWS KMS 暗号化を使用してフォルダ自体をコピーします。
注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
独自の AWS KMS キーを使用してファイルを暗号化するには、次のコマンドを実行します。
aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms --sse-kms-key-id a1b2c3d4-e5f6-7890-g1h2-123456789abc
--sse-kms-key-id には必ず独自のキー ID を指定してください。
今後のアップロードでは、AWS KMS でオブジェクトの暗号化が必要になります
暗号化を変更した後で、フォルダに既に保持されているオブジェクトのみが暗号化されます。暗号化の変更後にフォルダーに追加されたオブジェクトは、暗号化せずにアップロードできます。バケットポリシーを使用すると、今後のアップロードは AWS KMS でオブジェクトを暗号化する必要があります。
例:
{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
{
"Sid": "DenyIncorrectEncryptionHeader",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket/awsexamplefolder/*",
"Condition": {
"StringNotEquals": {
"s3:x-amz-server-side-encryption": "aws:kms"
}
}
},
{
"Sid": "DenyUnEncryptedObjectUploads",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::awsexamplebucket/awsexamplefolder/*",
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": true
}
}
}
]
}
このバケットポリシーは、AWS KMS によるサーバー側の暗号化がリクエストに含まれている場合を除き、docexamplebucket/docexamplefolder/* 上の s3:PutObject へのアクセスを拒否します。