【发布时间】:2020-12-22 23:25:13
【问题描述】:
我有一个存储在帐户 A 中的密钥 (USRFTP),我想从 EC2 框中访问此密钥,其角色为帐户 B 中的 ASHISHROLE。我正在运行 python 代码来获取密钥,如下所示,秘密使用资源策略key 如下,KMS 策略如下,但还是遇到这个问题
botocore.exceptions.ClientError:调用 GetSecretValue 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::ACCOUNTB:assumed-role/ASHISHROLE /i-*********is无权执行:secretsmanager:GetSecretValue on resource:arn:aws:secretsmanager:us-east-2:ACCOUNTA:secret:USRFTP-KJHJH
import boto3
import base64
from botocore.exceptions import ClientError
def get_secret():
secret_name = "arn:aws:secretsmanager:us-east-2:ACCOUNTA:secret:USRFTP"
region_name = "us-east-2"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
print("here")
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
if 'SecretString' in get_secret_value_response:
return get_secret_value_response['SecretString']
else:
return base64.b64decode(get_secret_value_response['SecretBinary'])
print(get_secret())
SECRET KEY RESOURCE POLICY
{
"Version" : "2012-10-17",
"Statement" : [ {
"Effect" : "Allow",
"Principal" : {
"AWS" : "arn:aws:iam::ACCOUNTB:role/ASHISHROLE"
},
"Action" : "secretsmanager:GetSecretValue",
"Resource" : "*"
} ]
}
KMS POLICY
{
"Id": "key-consolepolicy-3",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTA:root"
},
"Action": "kms:*",
"Resource": "*"
},
{
"Sid": "Allow access for Key Administrators",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTA:role/OKin"
},
"Action": [
"kms:Create*",
"kms:Describe*",
"kms:Enable*",
"kms:List*",
"kms:Put*",
"kms:Update*",
"kms:Revoke*",
"kms:Disable*",
"kms:Get*",
"kms:Delete*",
"kms:TagResource",
"kms:UntagResource",
"kms:ScheduleKeyDeletion",
"kms:CancelKeyDeletion"
],
"Resource": "*"
},
{
"Sid": "Allow use of the key",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTB:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "*"
},
{
"Sid": "Allow attachment of persistent resources",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::ACCOUNTB:root"
},
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": "*",
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
}
]
}
【问题讨论】:
-
您是否按照Share Secrets Manager Secrets Between Accounts 中的说明进行操作,尤其是第 3 步,该步骤授予 IAM 角色访问 Account-A 中的 Secret 的 IAM 权限? (您没有在您的问题中显示此策略。)为了解释,除了被授予访问权限之外,必须特别授予账户 B 中的 IAM 角色对账户 A 中的密钥(或所有密钥)调用
secretsmanager:GetSecretValue的权限通过添加到 Secret 本身的资源权限。 -
@JohnRotenstein 请回复为答案,所以我可以将其标记为答案。是的,我还需要在账户 B 中添加策略。我也有一个语法错误,例如 :secret:/* > 这应该是实际的 :secret:*
标签: amazon-web-services aws-secrets-manager