Amazon S3 から KMS で暗号化されたオブジェクトをダウンロードするときに AWS KMS キーを指定する必要がありますか?

最終更新日: 2020 年 11 月 10 日

Amazon Simple Storage Service (Amazon S3) に保存され、AWS Key Management Service 管理キー (SSE-KMS) を使ってサーバー側の暗号化を使用するオブジェクトをダウンロードしたいと考えています。オブジェクトをバケットからダウンロードするには AWS KMS キーを指定する必要がありますか?

解決方法

S3 バケットから SSE-KMS で暗号化されたオブジェクトをダウンロードするときに AWS KMS キー ID を指定する必要はありません。代わりに、AWS KMS キーを復号化するための権限が必要です。

ユーザーが GET リクエストを送信すると、Amazon S3 は、リクエストを送信した AWS Identity and Access Management (IAM) ユーザーまたはロールが、オブジェクトに関連付けられているキーの復号化を許可されているかどうかを確認します。IAM ユーザーまたはロールがキーと同じ AWS アカウントに属している場合は、復号化する権限を AWS KMS キーのポリシーに付与する必要があります。

注: IAM ユーザーまたはロールと KMS キーが同じアカウントにある場合は、IAM ポリシーを使用してキーへのアクセスを制御することもできます。ただし、キーポリシーを変更して、IAM ポリシーを明示的に有効にし、キーへのアクセスを許可する必要があります。詳細については、AWS KMS での IAM ポリシーの使用を参照してください。

IAM ユーザーまたはロールがキーとは異なるアカウントに属している場合は、IAM ユーザーのポリシーとキーのポリシーの両方に復号化の権限を与える必要があります。

以下は、ユーザーが AWS KMS キーの復号化と S3 バケットからのダウンロードの両方を許可する IAM ポリシーの例です。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "VisualEditor0",
      "Effect": "Allow",
      "Action": [
        "kms:Decrypt",
        "s3:GetObject"
      ],
      "Resource": [
        "arn:aws:kms:example-region-1:123456789012:key/example-key-id",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ]
    }
  ]
}
以下は、ユーザーがキーを復号化できるようにするキーポリシーステートメントの例です。
{
  "Sid": "Allow decryption of the key",
  "Effect": "Allow",
  "Principal": {
    "AWS": [
      "arn:aws:iam::123456789012:user/Bob"
    ]
  },
  "Action": [
    "kms:Decrypt"
  ],
  "Resource": "*"
}

重要: IAM ユーザーまたはロールがバケットとは異なるアカウントに属する場合は、バケットポリシーによってユーザーにオブジェクトへのアクセス権も付与されるようにしてください。たとえば、ユーザーがバケットからダウンロードする必要がある場合、ユーザーにはバケットポリシーで s3:GetObject アクションの権限が必要です。

キーを復号化する権限を取得したら、次のような AWS コマンドラインインターフェイス (AWS CLI) コマンドを使用して、キーで暗号化された S3 オブジェクトをダウンロードできます。

aws s3api get-object --bucket DOC-EXAMPLE-BUCKET --key dir/example-object-name example-object-name

注: AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください