首页 > 解决方案 > Boto3 中 Java 的 DefaultAWSCredentialsProviderChain 等效项

问题描述

我有一项服务需要进行身份验证 1. 通过从 ec2 实例元数据中获取凭据 2. 或使用 sts

在java中,我正在使用DefaultAWSCredentialsProviderChainwhich 工作正常。python的boto3中是否有等价物?

目前,如果我通过 ec2 元数据连接,我正在使用:

    provider = InstanceMetadataProvider(iam_role_fetcher=InstanceMetadataFetcher(timeout=1000, num_attempts=2))
    creds = provider.load()

    session = boto3.Session(
        aws_access_key_id=creds.access_key,
        aws_secret_access_key=creds.secret_key,
        aws_session_token=creds.token
    )

但如果我使用 sts 我将其更改为:

    sts = boto3.client('sts')
    response = sts.assume_role(
        RoleArn='aws:arn:iam::account_id:role/role-that-allows-s3-access',
        RoleSessionName='my-random-session-name',
        DurationSeconds=2000  # how many seconds these credentials will work
    )

    session = boto3.Session(
        aws_access_key_id=response['Credentials']['AccessKeyId'],
        aws_secret_access_key=response['Credentials']['SecretAccessKey'],
        aws_session_token=response['Credentials']['SessionToken']
    )

标签: pythonamazon-web-servicesamazon-s3boto3

解决方案


您无需InstanceMetadataProviderclient. 默认情况下,boto3 的工作方式与配置凭据DefaultAWSCredentialsProviderChain中的说明相同。

因此,例如,如果您要在实例上使用 s3,您可以:

s3 = boto3.client('s3')

这将自动从元数据中获取凭据。


推荐阅读