我希望下载存储在 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 策略中已经授予了密钥解密的权限,用户仍需要密钥策略授予的权限才能正常下载。

如果 IAM 用户或角色与密钥分属于不同的账户,则必须在 IAM 用户策略和密钥策略中都属于解密权限。

以下示例 IAM 策略允许用户解密 AWS KMS 密钥并从 S3 存储桶下载:

{
  "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:::example-bucket-name/*"
      ]
    }
  ]
}

以下示例密钥策略语句允许用户对密钥解密:

{
  "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 example-bucket-name --key dir/example-object-name example-object-name

此页内容对您是否有帮助? |

返回 AWS Support 知识中心

需要帮助? 请访问 AWS 支持中心

发布时间:2019 年 2 月 7 日