仅授予对 Amazon 别名密钥的访问权限的 IAM 策略
IAM policy to grant access only to Amazon aliased keys
在 KMS there are the amazon aliased keys (e.g./alias/aws/s3
) and Customer Master Keys(CMK)中。
对于每个开发团队,我有一些带有别名的 CMK(例如 /alias/team1/default
、/alias/team1/confidential
)
我想允许所有 IAM users/groups/roles 访问 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
您可以使用密钥别名作为 API 的资源,这些 API 用于控制对作用于别名本身的 API 的访问(例如 Create/Delete 别名)并且别名不能用作 ARN 代替用于控制对底层密钥的访问的密钥 ID。您可以参考以下 URL 中的 table,其中解释了哪些 resource/ARN 与 KMS API 一起使用。
http://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html
可以考虑这种方式:让IAM Group承担IAM角色,在CMK的密钥策略中允许IAM角色。
来源:https://forums.aws.amazon.com/thread.jspa?threadID=173540
虽然我知道问题已解决,但我很想从最佳来源发布此信息。
不能在策略中使用别名
参考以下来自https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf
的段落
It should be noted that CMK aliases can’t be used within policies.
This is because the mapping of aliases to keys can be manipulated
outside the policy, which would allow for an escalation of privilege.
Therefore, key IDs must be used in KMS key policies, IAM policies, and
KMS grants
在 KMS there are the amazon aliased keys (e.g./alias/aws/s3
) and Customer Master Keys(CMK)中。
对于每个开发团队,我有一些带有别名的 CMK(例如 /alias/team1/default
、/alias/team1/confidential
)
我想允许所有 IAM users/groups/roles 访问 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
您可以使用密钥别名作为 API 的资源,这些 API 用于控制对作用于别名本身的 API 的访问(例如 Create/Delete 别名)并且别名不能用作 ARN 代替用于控制对底层密钥的访问的密钥 ID。您可以参考以下 URL 中的 table,其中解释了哪些 resource/ARN 与 KMS API 一起使用。
http://docs.aws.amazon.com/kms/latest/developerguide/kms-api-permissions-reference.html
可以考虑这种方式:让IAM Group承担IAM角色,在CMK的密钥策略中允许IAM角色。
来源:https://forums.aws.amazon.com/thread.jspa?threadID=173540
虽然我知道问题已解决,但我很想从最佳来源发布此信息。
不能在策略中使用别名
参考以下来自https://d1.awsstatic.com/whitepapers/aws-kms-best-practices.pdf
It should be noted that CMK aliases can’t be used within policies. This is because the mapping of aliases to keys can be manipulated outside the policy, which would allow for an escalation of privilege. Therefore, key IDs must be used in KMS key policies, IAM policies, and KMS grants