gpt4 book ai didi

amazon-web-services - AWS Secret Manager 访问拒绝问题

转载 作者:行者123 更新时间:2023-12-03 23:44:30 26 4
gpt4 key购买 nike

我有一个存储在账户 A 中的 key (USRFTP),我想从 EC2 盒中访问此 key ,在账户 B 中使用角色 ASHISHROLE。我正在运行 python 代码以获取如下所示的 key ,在给定的 key 中使用资源策略下面,KMS 政策如下,但仍然遇到这个问题
botocore.exceptions.ClientError: 调用 GetSecretValue 操作时发生错误 (AccessDeniedException):用户:arn:aws:sts::ACCOUNTB:assumed-role/ASHISHROLE/i-********* 未被授权在资源上执行:secretsmanager:GetSecretValue: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"
}
}
}
]
}

最佳答案

跨账户权限最困难的概念是 它需要从两个方向授予权限
在您的情况下,您有:

  • Account-A 中的 Secrets Manager
  • Account-B 中的 EC2 实例
  • Account-B 中的 IAM 角色 (Role-B)

  • 这需要从 A 到 B 的权限:
  • Account-A 中的 Secret 需要一个允许从 Role-B 访问的“Secret Key Resource Policy”(您已经这样做了)

  • 它还需要从 B 到 A 的权限:
  • Role-B 必须被授予访问 Account-A 中的 Secret 的权限

  • 这可能看起来很奇怪,但我喜欢这样想:
  • 默认情况下,IAM 用户/IAM 角色没有权限
  • 要使用 Secrets Manager(即使在同一账户中),必须授予 IAM 角色权限,例如 secretsmanager:GetSecretValue -- 否则不允许执行任何操作
  • 默认情况下,无法从另一个 AWS 账户访问一个 AWS 账户(例如,我无法访问您的账户)
  • 如果一个 AWS 账户愿意让另一个账户访问它,则它必须授予访问权限。这可以在 S3、SNS、SQS、KMS 和 Secrets Manager 等服务的资源级别完成,因为它们能够为资源创建策略。没有此功能的服务无法授予跨账户访问权限,必须通过在同一账户中承担角色来使用。

  • 您问题中的配置似乎缺少需要授予 Role-B 访问 Secrets Manager 的权限,例如:
    {
    "Version" : "2012-10-17",
    "Statement" : [
    {
    "Effect": "Allow",
    "Action": "secretsmanager:GetSecretValue",
    "Resource": "arn:aws:secretsmanager:us-east-2:ACCOUNTA:secret:USRFTP"
    }
    ]
    }

    关于amazon-web-services - AWS Secret Manager 访问拒绝问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63728452/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com