当我从 Amazon S3 下载 KMS 加密的对象时,我是否需要指定 AWS KMS 密钥?

1 分钟阅读
0

我想从 Amazon Simple Storage Service (Amazon S3) 下载存储的对象,这些对象使用具有 AWS Key Management Service 托管的密钥进行服务器端加密 (SSE-KMS)。

解决方法

从 S3 桶下载 SSE-KMS 加密的对象时,您无需指定 AWS Key Management Service (AWS KMS) 密钥 ID。相反,您需要获得解密 AWS KMS 密钥的权限。

当用户发送 GET 请求时,Amazon S3 必须检查是否具有相应的授权。Amazon S3 检查发送请求的 AWS Identity and Access Management (IAM) 用户或角色是否有权解密对象的密钥。如果 IAM 用户或角色和密钥属于同一 AWS 账户,则必须在密钥政策上授予解密权限。

**注意:**当 IAM 用户或角色和 KMS 密钥位于同一个账户中时,您可以使用 IAM 策略来控制对密钥的访问权限。但是,您必须修改密钥政策显式启用 IAM policy 以允许访问密钥。有关详细信息,请参阅将 IAM policy 与 AWS KMS 配合使用

如果 IAM 用户或角色和密钥属于不同的账户,则您必须在 IAM 用户的策略和密钥的策略上授予解密权限。

以下是 IAM policy 示例,它允许用户解密 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:::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

相关信息

GetObject

get-object

利用服务器端加密结合存储在 AWS Key Management Service (SSE-KMS) 中的 CMK 来保护数据

AWS 官方
AWS 官方已更新 1 年前