我的 Amazon Simple Storage Service (Amazon S3) 存储桶被自定义 AWS Key Management Service (AWS KMS) 密钥加密。当用户尝试从其他 AWS 账户访问我的存储桶时,他们收到访问被拒绝错误。如何修复此问题?

要授权账户 B 中的用户访问账户 A 中的 AWS KMS 加密存储桶,您必须拥有以下权限:

  • 账户 A 的存储桶策略必须授予账户 B 访问权。
  • 账户 A 的 AWS KMS 密钥策略必须授予账户 B 中的用户访问权。
  • 账户 B 的 AWS Identity and Access Management (IAM) 用户策略必须同时授予用户访问存储桶和账户 A 中的密钥的权利。

要对访问被拒绝错误进行故障排查,请验证这些权限均已正确设置。 

账户 A 的存储桶策略必须授予账户 B 中的用户访问权

从账户 A 中审查存储桶策略并确认其中有一条语句允许从账户 B 的账户 ID 访问。

例如,此存储桶策略允许 s3:GetObject 访问账户 ID 111122223333:

{
  "Id": "ExamplePolicy1",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt1",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*",
      "Principal": {
        "AWS": [
          "111122223333"
        ]
      }
    }
  ]
}

账户 A 中的 AWS KMS 密钥策略必须授予账户 B 中的用户访问权

AWS KMS 密钥策略必须授予账户 B 中的用于执行下述操作的权限: kms:Encryptkms:Decryptkms:ReEncrypt*kms:GenerateDataKey*kms:DescribeKey。例如,如果您只想向一个 IAM 用户或角色授予密钥访问权,密钥策略语句将与以下内容类似:  

{
   "Sid": "Allow use of the key",
   "Effect": "Allow",
   "Principal": {
     "AWS": [
       "arn:aws:iam::111122223333:role/role_name",
     ]
   },
   "Action": [
     "kms:Encrypt",
     "kms:Decrypt",
     "kms:ReEncrypt*",
     "kms:GenerateDataKey*",
     "kms:DescribeKey"
   ],
   "Resource": "*"
 }

从账户 A 中,使用 AWS 管理控制台策略视图审查密钥策略。在密钥策略中,查找 “Sid”: “允许使用密钥”。然后,确认账户 B 中的用户被列为该语句的委托人。

如果您没有看到语句 “Sid”: “允许使用密钥”,则切换到使用控制台默认视图查看密钥策略。然后,将账户 B 的账户 ID 添加为有权访问密钥的外部账户。

账户 B 中的 IAM 用户策略必须同时授予用户访问账户 A 中存储桶和密钥的权利

从账户 B 中,打开 IAM 控制台,然后在账户 B 中打开与该用户相关的 IAM 用户或角色。

查看应用于 IAM 用户或角色的权限策略列表。然后,确认应用了同时向存储桶和密钥授予访问权的策略。

注:如果账户 B 中的 IAM 用户或角色已经具有管理员访问权限,则您不需要通过用户的 IAM 策略授予对密钥的访问权。

作为存储桶访问的示例语句,该语句授予 IAM 用户访问 awsexamplebucket 上的 s3:GetObjects3:PutObject 的权利:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt2",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket/*"
    }
  ]
}

作为密钥访问的示例语句,该语句授予 IAM 用户使用密钥 (arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd) 的访问权:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt3",
      "Action": [
        "kms:Decrypt",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:GenerateDataKey",
        "kms:ReEncrypt*"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
    }
  ]
}

有关如何添加或更正 IAM 用户权限的说明,请参见更改 IAM 用户的权限


此页面对您有帮助吗? |

返回 AWS Support 知识中心

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

发布时间:2019 年 3 月 25 日