Boto3使用的身份验证信息(适用于Python的AWS开发工具包)


Boto 3使用的凭据在"凭据-Boto 3"中进行了汇总,并按指定顺序从8个位置搜索凭据。

凭证搜索顺序

Boto3尝试通过多种方法(例如参数和配置文件)获取凭据。方法和顺序在"配置凭据-凭据— Boto 3"中,相关部分的翻译如下。

boto3的凭据搜索机制是根据以下列表进行搜索,并在找到凭据时在此处停止。 Boto3搜索凭据的顺序为:

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

  • 创建对象时作为参数传递的Session凭据

  • 环境变量
  • 共享凭据文件(~/.aws/credentials)
  • AWS配置文件(~/.aws/config)
  • 提供开卷承保
  • Boto2配置文件(/etc/boto.cfg and ~/.boto)
  • 配置了IAM角色的Amazon EC2实例上的实例元数据服务
  • 我们将在下面介绍其中一些使用API??访问密钥和API秘密密钥或命名配置文件的应用。

    1.使用client()方法和resource()方法

    直接指定

    boto3.client()方法或boto3.session.Session().client()方法中,使用参数指定以下内容。

    <表格>

    指定值


    <身体>

    aws_access_key_id

    API访问密钥

    aws_secret_access_key

    API秘密密钥

    aws_session_token

    (用于多因素身份验证)会话令牌


    以下是在交互式shell中执行的示例。

    1
    2
    3
    >>> import boto3
    >>> client = boto3.client('iam', aws_access_key_id='YOURACCESSKEY', aws_secret_access_key='YOURSECRETKEY')
    >>> client.list_users()

    即使使用resource()(boto3.resource()boto3.session.Session().resource())方法而不是

    client(),也可以指定上述三个参数。

    1
    2
    3
    >>> import boto3
    >>> resource = boto3.resource('iam', aws_access_key_id='YOURACCESSKEY', aws_secret_access_key='YOURSECRETKEY')
    >>> list(resource.users.all())

    2.创建Session对象

    时作为参数传递的凭证

    指定认证信息

    使用

    boto3.session.Session()创建会话对象时,请使用参数指定以下内容。 client()方法生成的客户端和resource()方法从生成的Session对象生成的资源都使用此凭据。

    <表格>

    指定值


    <身体>

    aws_access_key_id

    API访问密钥

    aws_secret_access_key

    API秘密密钥

    aws_session_token

    (用于多因素身份验证)会话令牌


    以下是在交互式shell中执行的示例。

    1
    2
    3
    4
    >>> import boto3
    >>> session = boto3.session.Session(aws_access_key_id='YOURACCESSKEY', aws_secret_access_key='YOURSECRETKEY')
    >>> client = session.client('iam')
    >>> client.list_users()

    指定配置文件

    使用

    boto3.session.Session()创建会话对象时,请使用参数指定以下内容。将使用在指定的命名配置文件中配置的凭据。 client()方法生成的客户端和resource()方法从生成的Session对象生成的资源都使用此凭据。

    <表格>

    指定值


    <身体>

    profile_name

    个人资料名称


    以下是在交互式shell中执行的示例。

    1
    2
    3
    4
    >>> import boto3
    >>> session = boto3.session.Session(profile_name='YOURPROFILENAME')
    >>> client = session.client('iam')
    >>> client.list_users()

    3.环境变量

    指定认证信息

    使用环境变量指定以下内容。如果在上一节之前未指定显式凭证,则将使用此凭证。

    <表格>

    环境变量名称

    指定值


    <身体>

    AWS_ACCESS_KEY_ID

    API访问密钥

    AWS_SECRET_ACCESS_KEY

    API秘密密钥

    AWS_SESSION_TOKEN

    (用于多因素身份验证)会话令牌


    以下是在bash环境中设置上述环境变量之后调用Python交互式shell的执行示例。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ export AWS_ACCESS_KEY_ID=YOURACCESSKEY
    $ export AWS_SECRET_ACCESS_KEY=YOURSECRETKEY
    $ python3
    Python 3.6.9 (default, Nov  7 2019, 10:44:02)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import boto3
    >>> client = boto3.client('iam')
    >>> client.list_users()

    指定配置文件

    使用环境变量指定以下内容。如果在上一节中未指定任何显式凭据,则将使用在此指定的命名配置文件中配置的凭据。

    <表格>

    环境变量名称

    指定值


    <身体>

    AWS_PROFILE

    个人资料名称


    以下是在bash环境中设置上述环境变量之后调用Python交互式shell的执行示例。

    1
    2
    3
    4
    5
    6
    7
    8
    $ export AWS_PROFILE=YOURPROFILENAME
    $ python3
    Python 3.6.9 (default, Nov  7 2019, 10:44:02)
    [GCC 8.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import boto3
    >>> client = boto3.client('iam')
    >>> client.list_users()

    4.共享的凭据文件(~/.aws/credentials)

    如果到目前为止没有凭据,将使用在凭据文件(~/.aws/credentials)中配置为default配置文件的凭据。首次使用AWS CLI时,通常使用aws configure命令进行设置。有关更多信息,请参阅AWS CLI轻松设置。

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

    如果您到目前为止没有凭证,将使用AWS配置文件(~/.aws/config)中配置为default配置文件的凭证。但是,通常,AWS配置文件中管理的配置文件信息是区域(region)和默认输出格式(output),并且不包括身份验证信息。

    7. Boto2配置文件(/etc/boto.cfg and ~/.boto)

    如果到目前为止尚无身份验证信息,则将确认Boto2配置文件中存储的身份验证信息是否存在。 Boto2配置文件默认放置在/etc/boto.cfg~/.boto中。以下是内容示例。

    1
    2
    3
    4
    # Example ~/.boto file
    [Credentials]
    aws_access_key_id = foo
    aws_secret_access_key = bar

    这是为了向后兼容,除了"凭据"部分外,Boto2配置文件将被忽略。

    认证方法,指定方法和优先级

    Boto3中可用的凭据包括(a)API访问密钥和API秘密密钥,(b)默认配置文件,(c)命名配置文件和(d)角色(此处未提及细节),这意味着四种类型的身份验证是可能的。到目前为止,这与指定方法相对应。

    <表格>

    身份验证方法

    规范方法


    <身体>

    (a)API访问密钥和API秘密密钥

    1,2,3,4,5,7

    (b)默认配置文件

    4

    (c)命名个人资料

    2、3

    (d)滚动

    6,8


    当您认为未使用假定的身份验证方法时,似乎有必要检查是否使用更高优先级的指定方法进行了其他指定。

    例如,即使您在AWS_PROFILE环境变量中指定了命名配置文件,如果在boto3.session.Session()中指定了其他配置文件名称,也将优先使用。您会注意到您是否故意这样做,但是如果默认值在其中某处可能会造成混淆。

    参考

    关于boto3身份验证。

    • 凭据-Boto 3

    关于AWS凭证文件和配置文件。

    • 配置和凭证文件设置-AWS命令行界面
    • 命名为Profile-AWS命令行界面
    • AWS CLI轻松设置--AWS CLI设置--AWS命令行界面

    关于boto3的每种方法。

    • boto3.client()
    • boto3.reference()
    • boto3.session.Session()。client()
    • boto3.session.Session()。资源()
    • boto3.session.Session()

    关于Boto2配置文件。

    • Boto配置— boto v2.49.0
    • 凭据-Boto 3 Docs 1.12.26文档--Boto2 Config