跨账户更新秘密值

问题描述 投票:0回答:2

我在一个帐户中的一个函数上编写了一个 Python 脚本,该脚本尝试使用带有

client.get_secret_value()
的 boto3 从第二个帐户获取秘密值。然而,
client.update_secret()
似乎只适用于同一帐户中的秘密,而不适用于第二个帐户中的秘密。

secretUpdated = client.update_secret(
    SecretId=’arn for my test secret',
    Description='',
    KmsKeyId='kms key arn’,
    SecretString='the Secret string for my test secret with key values'
)

我回来了

Access denied
,但据我所知,它应该具有
secretsmanager:UpdateSecret
,无论是第一个帐户中的功能还是另一个帐户中的秘密,它都设置在我添加的所有相同位置
getsecret
(角色上的函数策略和秘密上的资源策略)所以我不知道跨账户时是否需要在脚本中添加任何额外的参数?

amazon-web-services boto3
2个回答
0
投票

只能在与您正在使用的 IAM 凭证关联的账户中访问/更新密钥。 (否则,我将能够查看/更改您的帐户中的秘密!)

您有两个选择:

选项 1:使用与“其他”帐户关联的凭据

为有权使用 Secrets Manager 的“其他”账户中的 IAM 用户获取访问密钥和秘密密钥。然后,将这些凭据与 boto3 一起使用。这可以通过几种方式完成:

  • 使用 aws configure --profile account2
     将凭证存储为 
    不同的配置文件
  • 然后使用这样的配置文件:
import boto3

session = boto3.Session(profile_name='account2')
secrets_client = session.client('secretsmanager')

  • 将凭证传递给客户端:
import boto3

secrets_client = boto3.client('secretsmanager', aws_access_key_id='AKIAxxx', aws_secret_access_key='xyz')

secrets_client
随后将访问另一个帐户。

请参阅:凭证 — Boto3 Docs 文档

选项 2:在“其他”账户中承担 IAM 角色

  • 在“其他”账户中创建 IAM 角色并授予其 Secrets Manager 权限
  • 向 IAM 角色添加信任策略,允许您的“普通”账户中的 IAM 用户“代入”该角色
  • 使用 boto3,调用
    assume_role()
    承担另一个账户中的 IAM 角色
import boto3
from boto3.session import Session


client = boto3.client('sts')

response = client.assume_role(RoleArn='arn:aws:iam::00000000000000:role/example-role`, RoleSessionName='account2')
     
session = Session(aws_access_key_id='AKIAxxx', aws_secret_access_key='xyz')
secrets_client = session.client('secretsmanager')

请参阅:切换到 IAM 角色 (AWS API) - AWS Identity and Access Management


0
投票

假设所有策略均符合要求,我使用 boto3 引导程序上的完整秘密 ARN 以及秘密端 AWS KMS 密钥的完整 ARN 集解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.