在Python(Boto3)中切换凭据的8种方法


介绍

boto3在使用Python控制各种AWS资源时使用,但是有多种类型的切换凭证的方法,并且优先级顺序容易混淆,因此我也对其进行了回顾。这使得在AWS环境之间轻松切换。

boto3凭证搜索顺序

boto3按以下顺序搜索和使用凭据:

  • 将凭据作为参数传递给boto.client()方法
  • 创建会话对象时作为参数传递的凭据
  • 环境变量
  • 共享凭据文件(?/ .aws /凭据)
  • AWS配置文件(?/ .aws / config)
  • 承担角色提供者
  • Boto2配置文件(/etc/boto.cfg,?/ .boto)
  • 具有IAM角色的Amazon EC2实例上的实例元数据服务
  • 在下面,请阅读YOUR_ACCESS_KEY和YOUR_SECRET_KEY以及您自己环境的值。

    1.将凭据

    作为参数传递给boto.client()方法

    1
    2
    3
    4
    5
    6
    7
    import boto3

    client = boto3.client(
        's3',
        aws_access_key_id=YOUR_ACCESS_KEY,
        aws_secret_access_key=YOUR_SECRET_KEY,
    )

    这是一种在调用boto3.client时传递要显式使用的环境的凭据信息的方法。
    最好避免在代码中写入原始值,例如通过环境变量获取实际值。

    2.创建会话对象时将凭据

    作为参数传递

    1
    2
    3
    4
    5
    6
    import boto3

    session = boto3.Session(
        aws_access_key_id=YOUR_ACCESS_KEY,
        aws_secret_access_key=YOUR_SECRET_KEY,
    )

    1相似,它是一种在创建boto3.Session时传递要明确使用的环境的凭据信息的方法。

    3.环境变量

    1
    2
    export AWS_ACCESS_KEY_ID=YOUR_AWS_ACCESS_KEY_ID
    export AWS_SECRET_ACCESS_KEY=YOUR_AWS_SECRET_ACCESS_KEY

    如果在执行Python的环境的环境变量中设置凭据信息,则boto3将引用它。
    这是一种简单的方法,在不进行凭据切换时经常使用。

    4.共享的凭证文件(?/ .aws /凭证)

    ?/ .aws /凭据

    1
    2
    3
    [your_profile_name]
    aws_access_key_id = YOUR_ACCESS_KEY
    aws_secret_access_key = YOUR_SECRET_KEY

    1
    2
    3
    4
    import boto3

    session = boto3.Session(profile_name='your_profile_name')
    client = session.client('s3')

    ~/.aws/credencials中为每个配置文件设置aws_access_key_idaws_secret_access_key之后,在boto3中指定设置的配置文件名称。
    由于可以使用通过awscli中的熟悉方法设置的配置文件信息,因此它具有出色的可见性,并且经常在本地开发环境中使用。

    5. AWS配置文件(?/ .aws / config)

    ?/ .aws /配置

    1
    2
    3
    4
    5
    [profile YOUR_PROFILE_NAME]
    region = YOUR_REGION
    output = TOUR_OUTPUT
    aws_access_key_id = YOUR_AWS_ACCESS_KEY_ID
    aws_secret_access_key = YOUR_SECRET_KEY

    如果使用

    aws configure命令设置凭据,则access_key_idsecret_access_key将列在凭据文件中。由于也可以在配置文件中描述此内容,因此,除了区域和输出信息外,还可以如上所述描述凭证信息。

    6.假设角色提供者

    ?/ .aws /配置

    1
    2
    3
    [profile YOUR_TARGET_PROFILE_NAME]
    role_arn = YOUR_TARGRT_ROLE_ARN
    source_profile = YOUR_PROFILE_NAME

    如果您不直接使用目标AWS账户的访问密钥和秘密密钥并通过IAM角色进行操作,则可以从目标AWS环境中请求AssumeRole并使用返回的凭证进行操作。
    可以通过在~/.aws/config中设置要使用的角色的ARN和原始配置文件名称来使用它。

    7. Boto2配置文件(/etc/boto.cfg,?/ .boto)

    由于它与

    boto2向后兼容,如果设置了Boto_CONFIG,它将检查Boto_CONFIG指定的文件,否则将检查/etc/boto.cfg~/.boto

    8.具有IAM角色

    的Amazon EC2实例上的实例元数据服务

    スクリーンショット 2020-08-02 15.48.49.png

    可以为Amazon EC2分配IAM角色,因此它在EC2上运行,并且如果未设置上述任何一项,它将从实例的元数据服务中读取凭证。
    要利用此功能,您需要指定在创建EC2实例时要使用的IAM角色。

    参考

    本文是参考以下信息编写的。

    • 凭证-Boto3 Docs 1.14.33文档