注意:我已经查看了其他问题,并认为这是独一无二的,因为它特别涉及使用粘合作业的跨账户机密访问。
我遇到了一个问题,即在一个帐户中承担服务角色的粘合作业无法访问存储在另一个帐户中的机密,尽管我认为我的政策应该允许这样做。
我看到的错误(包含已编辑的值):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,我认为我们必须做的是:
{
"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"
}
}
} ]
}
请注意,下面经过编辑的 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"
}
}
}
{
"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"
}
]
}
作为思想实验,我正在考虑执行以下操作,看看它是否有效:
kms:DescribeKey
添加到服务帐户政策中,但我认为这不会解决问题。答案 0 :(得分:1)
有时会遇到这些涉及到的问题,尽管我尽了最大努力,但在我提供的信息之外找到了回答问题的信息。
解决方案有两个: