Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 假设在python中扮演IAM角色,如何做到这一点?_Amazon Web Services_Amazon Iam - Fatal编程技术网

Amazon web services 假设在python中扮演IAM角色,如何做到这一点?

Amazon web services 假设在python中扮演IAM角色,如何做到这一点?,amazon-web-services,amazon-iam,Amazon Web Services,Amazon Iam,我的aws配置有几个配置文件: cat配置 [default] region = us-west-2 [profile sandbox] region = us-west-2 role_arn = arn:aws:iam::11111111111:role/team-role source_profile = default [profile cat] role_arn = arn:aws:iam::22222222222:role/data-systems-role region = us

我的aws配置有几个配置文件:

cat配置

[default]
region = us-west-2

[profile sandbox]
region = us-west-2
role_arn = arn:aws:iam::11111111111:role/team-role
source_profile = default

[profile cat]
role_arn = arn:aws:iam::22222222222:role/data-systems-role
region = us-west-2
source_profile = default
当我从CLI运行此命令时,我可以通过在末尾键入
--profile
来承担
cat
角色

aws secretsmanager get-secret-value --secret-id "prod/Aurora/klondike/twou_id_ro" --profile dsci
但我不知道如何在python代码中实现这一点。我有此代码,但它似乎承担了错误的角色:

 session = boto3.session.Session()
    client = session.client(
        service_name='secretsmanager',
        region_name=region_name
    )


{'Error': {'Message': 'User: arn:aws:sts::3333333333:assumed-role/.../user@company.com is not authorized to perform: secretsmanager:GetSecretValue on resource: arn:aws:secretsmanager:us-west-2...
我想我的代码是默认的?如何让python代码担任
cat
角色?
当一个角色被承担时,它会从sts那里得到暂时的信任,对吗?这就是发生的事情吗?

这里是你应该做的。在代码中,使用默认会话构造函数,例如:

session = boto3.Session()
client = session.client(...)
AWS_PROFILE=sandbox python3 my-boto-app.py
当使用IAM角色在EC2上运行时,您的应用程序将使用与该IAM角色关联的凭据

现在,理想情况下,您希望编写的代码在不做任何更改的情况下也能在笔记本电脑上运行。你可以做到。上面的代码可以正常工作。它将从您的或默认AWS凭据配置文件中提取凭据

如果您在笔记本电脑上运行,并且希望不要使用默认的AWS凭据配置文件,而是使用您专门设置的另一个配置文件来承担IAM角色,如
cat
sandbox
配置文件,则只需在您的环境中提供该配置文件,例如:

session = boto3.Session()
client = session.client(...)
AWS_PROFILE=sandbox python3 my-boto-app.py
或:

但我更喜欢前者,因为
AWS_PROFILE
环境变量赋值是临时的


最后,请阅读文档。它们很有帮助。

以下是您应该做的。在代码中,使用默认会话构造函数,例如:

session = boto3.Session()
client = session.client(...)
AWS_PROFILE=sandbox python3 my-boto-app.py
当使用IAM角色在EC2上运行时,您的应用程序将使用与该IAM角色关联的凭据

现在,理想情况下,您希望编写的代码在不做任何更改的情况下也能在笔记本电脑上运行。你可以做到。上面的代码可以正常工作。它将从您的或默认AWS凭据配置文件中提取凭据

如果您在笔记本电脑上运行,并且希望不要使用默认的AWS凭据配置文件,而是使用您专门设置的另一个配置文件来承担IAM角色,如
cat
sandbox
配置文件,则只需在您的环境中提供该配置文件,例如:

session = boto3.Session()
client = session.client(...)
AWS_PROFILE=sandbox python3 my-boto-app.py
或:

但我更喜欢前者,因为
AWS_PROFILE
环境变量赋值是临时的


最后,请阅读文档。它们很有用。

在第一行中使用:
boto3.session.session(profile\u name='dsci')
。可以在此处找到会话对象引用:。要测试它是否有效,需要几行代码:
client=session.client('sts',region\u name='us-east-1')
,下一行:
print(client.get\u caller\u identity())
在第一行中使用它:
bot3.session.session(profile\u name='dsci')
。可以在此处找到会话对象引用:。为了测试它是否有效,有几行代码将起作用:
client=session.client('sts',region\u name='us-east-1')
,下一行:
print(client.get\u caller\u identity())
在引擎盖下进行sts调用?我不想只在我的电脑上工作。。。我希望它在我的deployment服务器上工作,该服务器可能没有配置文件。在这种情况下,我应该使用我想扮演的角色从sts那里获得信任?在这两种情况下,是的,它都在进行sts假设角色调用。第二个选项更接近您在使用IAM角色启动的AWS计算实例上的体验(假设您正在这样做)。在这种情况下,您不需要第一个选项。通常编写的代码只是使用默认值创建会话和客户端,并将其留给SDK凭据提供程序链—在笔记本电脑上,它将使用默认凭据,除非将AWS_PROFILE=xyz包装在其周围。在EC2等上,它将从元数据服务中检索IAM基于角色的凭据。这就是将要发生的事情。。。应用程序将部署在具有角色的EC2实例上。那么为什么需要设置一个配置文件呢?我不能直接编写调用STS的代码吗?设置AWS_配置文件对我有什么作用?设置此环境变量会改变什么?我的ec2实例是否有一个aws/config文件,其中包含指向角色的配置文件?请参阅凭据文档以了解所有选项()。您不需要在EC2上设置配置文件。这个例子是如何使用环境变量,特别是AWS_PROFILE,这样当您在笔记本电脑上运行代码时,它可以承担所需的IAM角色,而无需在应用程序中显式编码。这样,同样的代码可以在笔记本电脑和EC2上运行。是的,正确。您只能在本地使用AWS_配置文件。您不会在EC2上使用它。我试图澄清我的答案。早前用手机创作和格式化很有挑战性。在引擎盖下,那是在打sts电话吗?我不想只在我的电脑上工作。。。我希望它在我的deployment服务器上工作,该服务器可能没有配置文件。在这种情况下,我应该使用我想扮演的角色从sts那里获得信任?在这两种情况下,是的,它都在进行sts假设角色调用。第二个选项更接近您在使用IAM角色启动的AWS计算实例上的体验(假设您正在这样做)。在这种情况下,您不需要第一个选项。通常编写的代码只是使用默认值创建会话和客户端,并将其留给SDK凭据提供程序链—在笔记本电脑上,它将使用默认凭据,除非将AWS_PROFILE=xyz包装在其周围。在EC2等上,它将从元数据服务中检索IAM基于角色的凭据。这就是将要发生的事情。。。应用程序将部署在具有角色的EC2实例上。那么为什么需要设置一个配置文件呢?我不能直接编写调用STS的代码吗?设置AWS_配置文件对我有什么作用?设置此环境变量会改变什么?我的ec2实例是否有一个aws/config文件,其中的概要文件指向r