我登录到AWS控制台的是MFA,因为我正在使用Google Authenticator。 我有S3 DEV存储桶,要访问该DEV存储桶,我必须切换角色,切换后才能访问DEV存储桶。
我需要帮助,如何在boto3中用python实现相同的功能。
我需要在数据框中打开许多csv文件,如果没有该解析访问权限,我将无法继续。
我尝试配置AWS凭证和配置并在我的python代码中使用它,但没有帮助。
AWS文档尚不清楚如何在python中使用和执行操作时执行角色切换。
import boto3
import s3fs
import pandas as pd
import boto.s3.connection
access_key = 'XXXXXXXXXXX'
secret_key = 'XXXXXXXXXXXXXXXXX'
# bucketName = 'XXXXXXXXXXXXXXXXX'
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
预期结果应该是在与MFA一起切换python代码中的角色后访问该存储桶。
答案 0 :(得分:0)
通常,将凭据放入程序代码对安全性不利。最好将它们存储在配置文件中。您可以使用AWS Command-Line Interface (CLI) aws configure
命令来完成此操作。
以这种方式存储凭据后,任何AWS开发工具包(例如boto3)都将自动检索凭据,而无需在代码中引用它们。
请参阅:Configuring the AWS CLI - AWS Command Line Interface
配置文件还有一项附加功能,允许您存储要承担的角色。这可以通过使用角色ARN指定配置文件来完成:
# In ~/.aws/credentials:
[development]
aws_access_key_id=foo
aws_access_key_id=bar
# In ~/.aws/config
[profile crossaccount]
role_arn=arn:aws:iam:...
source_profile=development
source_profile
指向包含用于进行AssumeRole()
调用的凭据的配置文件,而role_arn
指定要承担的角色。
最后,您可以告诉boto3使用该特定配置文件获取凭据:
session = boto3.Session(profile_name='crossaccount')
# Any clients created from this session will use credentials
# from the [crossaccount] section of ~/.aws/credentials.
dev_s3_client = session.client('s3')
以上所有方法的替代方法(boto3会为您完成)是在代码中调用assume_role()
,然后使用返回的临时凭证来定义新的session
连接到服务。但是,上述使用配置文件的方法要容易得多。