【发布时间】:2021-07-22 20:50:27
【问题描述】:
注意:我已经查看了其他问题,并认为这是独一无二的,因为它专门涉及使用胶水作业的跨账户机密访问。
我遇到了一个问题,即在一个帐户中担任服务角色的胶水作业无法访问存储在另一个帐户中的机密,尽管我认为我的政策应该允许它这样做。
我看到的错误(带有编辑值):An error occurred (AccessDeniedException) when calling the GetSecretValue operation: Access to KMS is not allowed. This version of secret is not encrypted with the current KMS key.
问题
下面的设置导致权限失败是怎么回事?
现状图
我对需要做什么的理解
基于the AWS docs和2018 blog post,我认为我们要做的是:
- 为密钥添加策略以允许访问服务角色
- 在 CMK 上添加策略以允许服务角色解密
- 添加策略服务角色以允许访问机密
- 添加关于服务角色的策略以允许 CMK 解密
当前政策
秘密政策
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::GLUE_ACCOUNT:role/GLUE_SERVICE_ROLE"
},
"Action" : "secretsmanager:GetSecretValue",
"Resource" : "*",
"Condition" : {
"ForAnyValue:StringEquals" : {
"secretsmanager:VersionStage" : "AWSCURRENT"
}
}
} ]
}
CMK 策略
请注意,下面已编辑的 SECRET_NAME 包含 AWS 在 ARN 中附加的几个字符,我们似乎需要包含这些字符。
{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::GLUE_ACCOUNT:role/GLUE_SERVICE_ROLE"
},
"Action": ["kms:Decrypt","kms:DescribeKey"],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:ViaService": "secretsmanager.us-east-1.amazonaws.com"
},
"StringLike": {
"kms:EncryptionContext:SecretARN": "arn:aws:secretsmanager:us-east-1:SECRET_ACCOUNT:secret:SECRET_NAME"
}
}
}
Glue 帐户中 Glue 服务角色附加的策略声明
{
"Sid": "AllowGetSecretValue",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue"
],
"Resource": [
"arn:aws:secretsmanager:us-east-1:SECRET_ACCOUNT:secret:SECRET_NAME"
]
},
{
"Sid": "AllowKMSDecrypt",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": [
"arn:aws:kms:us-east-1:SECRET_ACCOUNT:key/CMK_KEY_ID"
]
},
服务角色的信任策略
只是为了确认胶水作业确实似乎有权承担服务角色:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "glue.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
可能的后续步骤
作为思想实验,我正在考虑执行以下操作,看看它是否有效:
- 删除秘密策略中的条件
- 删除 CMK 策略中的条件
- 也将
kms:DescribeKey添加到服务帐户政策中,但我认为这不会解决问题。
【问题讨论】:
-
注意:我刚刚更新了错误消息的性质。我们的 Glue python 脚本没有使用秘密的完整 ARN,所以我们看到的错误是一个红鲱鱼。
标签: amazon-web-services boto3 amazon-iam aws-glue aws-secrets-manager