AWS KMS を使用して Amazon S3 バケット内の特定のフォルダーを暗号化するには?

最終更新日: 2019 年 6 月 20 日

Amazon Simple Storage Service(Amazon S3) バケット内の特定のフォルダーを AWS Key Management Service(AWS KMS) キーで暗号化します。どうすればそれを行うことができますか? 

解決方法

Amazon S3 コンソールを使用したフォルダーの暗号化

  1. Amazon S3 コンソールを開きます。
  2. 暗号化するフォルダーに移動します。
  3. フォルダーを選択し、 [Actions] を選択します。
  4. [Change encryption] を選択します。
  5. [Change encryption] で、AWS-KMS を選択します。
  6. [Select a key] で、フォルダーを暗号化する AWS KMS キーを選択します。
    注: aws/s 3 という名前のキーは、AMS KMS により管理されたデフォルトキーです。フォルダーをデフォルトキー、またはカスタムキーのいずれかを使って、暗号化できます。
  7. [Save] を選択します。

AWS コマンドラインインターフェイス (AWS CLI) を使用したフォルダーの暗号化

注 : AWS CLI コマンドを使用して、既存のフォルダーの暗号化を変更することはできません。代わりに、AWS KMS 暗号化でフォルダー自体にコピーする AWS CLI コマンドを実行することができます。

デフォルトの AWS KMS キー (aws/s 3) を使用してファイルを暗号化するには、このコマンドを実行して、AWS KMS 暗号化によりフォルダ―自体にコピーします。

aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms

独自の AWS KMS キーを使用してファイルを暗号化するには、次のコマンドを実行します。sse-kms-key-id の値としてキーの ID を指定しなければなりません。

aws s3 cp s3://awsexamplebucket/abc s3://awsexamplebucket/abc --recursive --sse aws:kms --sse-kms-key-id a1b2c3d4-e5f6-7890-g1h2-123456789abc

今後のアップロードでは、AWS KMS でオブジェクトの暗号化が必要になります

暗号化を変更した後で、フォルダーにすでに保持されているオブジェクトのみが暗号化されます。暗号化の変更後にフォルダーに追加されたオブジェクトは、暗号化せずにアップロードできます。バケットポリシーを使用すると、今後のアップロードは AWS KMS でオブジェクトを暗号化 する必要があります。

たとえば、次のバケットポリシーは、要求に AWS KMS によるサーバー側の暗号化を含まない限り、awsexamplebucket/awsexamplefolder/*s3:PutObject へのアクセスを拒否します。

{
  "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
        }
      }
    }
  ]
}