在KMS中,有亚马逊别名密钥(例如/alias/aws/s3
)和客户主密钥(CMK)。
对于每个开发团队,我都有一些带有别名的 CMK(例如 /alias/team1/default
, /alias/team1/confidential
)
我想允许所有 IAM 用户/组/角色访问 aws 别名密钥,但提供对团队级别密钥的团队级别访问权限
尝试允许访问 aws 托管式密钥时出现我的问题
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"NotAction": [
"iam:*",
"kms:*"
],
"Resource": "*",
"Condition": {
"Null": {
"aws:MultiFactorAuthAge": "false"
}
}
},
{
"Effect": "Allow",
"Resource": "arn:aws:kms:us-east-1:111111111111:alias/aws/*",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Condition": {
"Null": {
"aws:MultiFactorAuthAge": "false"
}
}
}
]
}
向iam:*
和kms:*
提供隐式拒绝,但允许访问 aws 别名密钥
使用 IAM 策略模拟器时,看起来我必须提供对完整密钥 arn ( arn:aws:kms:us-east-1:111111111111:key/abcd123-acbd-1234-abcd-acbcd1234abcd
) 而不是别名 ( arn:aws:kms:us-east-1:111111111111:alias/aws/*
) 的访问权限
有没有更好的方法来管理这个问题?
我知道我可以使用密钥策略管理对 CMK 的访问,并且不允许从 IAM 进行访问,但您不能将组用作 KMS 密钥策略中的Principal
虽然我知道问题已经解决,但我很想从最好的来源发布这个。
不能在策略中使用别名请参考以下段落 https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf
应该注意的是,不能在策略中使用 CMK 别名。 这是因为可以操纵别名到键的映射 在政策之外,这将允许特权升级。 因此,必须在 KMS 密钥策略、IAM 策略和 KMS 补助金
您可以将密钥别名用作 API 的资源,这些 API 用于控制对作用于别名本身的 API 的访问(例如创建/删除别名),并且别名不能用作 ARN 代替密钥 ID 来控制对底层密钥的访问。您可以参考以下 URL 中的表,其中说明了要与 KMS API 一起使用的资源/ARN。
http://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html
您可以考虑此方法:允许 IAM 组代入 IAM 角色,并在 CMK 的密钥策略中允许 IAM 角色。
来源: https://forums.aws.amazon.com/thread.jspa?threadID=173540