【发布时间】:2021-05-26 22:21:52
【问题描述】:
假设我有一个使用 KMS 密钥加密的存储桶,KMS 密钥策略是这样的
{
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam:::my_role_here"
},
"Action" : [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource" : "arn:aws:kms:::long_kms_id",
"Condition": {
"StringLike": {
"kms:RequestAlias": "alias/my_kms_alias"
}
}
}
我的 IAM 角色的政策是
{
"Sid": "AllowUseOfKmsKey",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:DescribeKey",
"kms:Encrypt",
"kms:GenerateDataKey*",
"kms:ReEncrypt*"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:RequestAlias": "alias/my_kms_alias"
}
}
}
但是,当我执行 PUT 操作时,访问被拒绝:An error occurred (AccessDenied) when calling the PutObject operation: Access Denied。但是,如果我删除 IAM 角色策略中的 Condition,这将有效。
我一直在关注这个doc,但似乎没有任何效果或解释清楚。如果我给它一个 KMS 别名,如何确保我想要访问我的 S3 存储桶的角色能够访问它?
【问题讨论】:
-
为什么要复制权限?如果您在 KMS 策略中拥有它们,那么为什么在 IAM 角色中拥有相同的权限集?
-
嗯,如果是跨账户@Marcin 有关系吗?
-
这无关紧要,因为您的 KMS 策略已经允许该角色执行这些操作,无论其帐户如何。您是否尝试过不使用 IAM 政策?
标签: amazon-web-services devops amazon-kms