我正在尝试将通知推送到使用 KMS 密钥加密的 SNS 主题。推送由角色 R1 发送。 角色 R1 具有以下权限:
{
"Statement": [
{
"Action": "sns:Publish",
"Effect": "Allow",
"Resource": [
"arn:..sns..:topicA",
"arn:..sns..:topicB",
],
"Sid": ""
},
{
"Action": "kms:GenerateDataKey",
"Effect": "Allow",
"Resource": [
"arn:aws:kms:...:key/keyTopicA",
"arn:aws:kms:...:key/keyTopicB"
],
"Sid": ""
}
],
"Version": "2012-10-17"
}
我的密钥 A 和 B 具有以下密钥策略
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<AccountID>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
所以没有 KeyPolicy 明确允许我的角色,权限是通过以下授权完成的:
{
"Grants":[
{
"KeyId":"arn:aws:kms:...:key/keyTopicA",
"GrantId":"<GrantID>",
"Name":"grantA",
"GranteePrincipal":"arn:aws:iam::...:role/R1",
"IssuingAccount":"arn:aws:iam::...:root",
"Operations":[
"GenerateDataKey"
]
}
]
}
KeyTopicB 也一样
现在,当我尝试推送通知时,出现以下错误:
密文指的是一个不存在的客户主密钥,本地区不存在,或者不允许您访问。 (服务:AWSKMS;状态代码:400;错误代码:AccessDeniedException;
我认为这可能是另一种可能性(错误的密钥/区域),但如果我修改密钥策略以明确添加我的角色 R1,那么这项工作一切都很好。我很困惑为什么用 Grant 做这件事不起作用。我是否遗漏了有关 Grant 工作原理的信息?
KMS(密钥管理服务)是亚马逊网络服务(AWS)提供的一项服务,允许用户管理其数据的加密密钥。 KMS 不允许用户直接加密数据,而是为用户提供一个安全的平台来存储和管理他们的加密密钥。