我想将一个大文件上传到我的 Amazon Simple Storage Service (Amazon S3)桶。在上传请求中,我附上了 AWS Key Management Service(AWS KMS)密钥的加密信息。但是,我收到“Access Denied”错误。
简短描述
确认您有权对用于加密对象的 AWS KMS 密钥执行 kms:Decrypt 操作。
对于大型文件,使用 AWS 命令行界面(AWS CLI)、AWS SDK 和许多第三方程序的高级别 AWS S3 命令会自动执行分段上传。要使用 AWS KMS 密钥加密分段上传,您必须拥有 kms:GenerateDataKey 和 kms:Decrypt 权限。kms:GenerateDataKey 权限允许您启动上传。kms:Decrypt 权限让您可以使用用于同一对象前几部分的密钥对新上传的段进行加密。
**注意:**要使用 AWS KMS 密钥执行加密分段上传,您必须具备以下条件:
如果您的 AWS Identity and Access Management(IAM)用户或角色与 KMS 密钥位于同一 AWS 账户中,则在密钥政策中您必须拥有这些权限。如果您的 IAM 用户或角色所属的账户与 KMS 密钥不同,则您必须同时拥有密钥政策和 IAM 用户或角色的权限。
解决方法
密钥政策
在 AWS 管理控制台策略视图中查看 AWS KMS 密钥政策。
在密钥政策中,搜索将您的 IAM 用户或角色的亚马逊资源名称(ARN)列为 AWS 主体的语句。ARN 采用以下格式:arn:aws:iam::111122223333:user/john。
然后,查看您的 IAM 用户或角色语句允许的操作列表。对于分段上传,允许的操作列表必须包括带有 SSE-KMS 的 kms:Decrypt。
例如,密钥策略中的以下语句允许用户 John 执行 kms:Decrypt 和 kms:GenerateDataKey 操作:
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/john"
},
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}
IAM 权限
要查看您的 IAM 权限,请打开 IAM 控制台,然后选择您的 IAM 用户或角色。
查看适用于您的 IAM 用户或角色的权限策略列表。确保应用的策略允许您对用于加密对象的密钥执行 kms:Decrypt 操作:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": [
"arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd"
]
}
}
此示例语句授予 IAM 用户访问权限,以对密钥 arn:aws:kms:example-region-1:123456789098:key/111aa2bb-333c-4d44-5555-a111bb2c33dd 执行 kms:Decrypt 和 kms:GenerateDataKey。
有关如何更新 IAM 权限的说明,请参阅更改 IAM 用户的权限。
相关信息
AWS 策略生成器
Data encryption in Amazon S3