适用于 Java 的 AWS 开发工具包
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 AWS 凭证

要向 Amazon Web Services 提交请求,您必须为 AWS SDK for Java 提供 AWS 凭证。您可以通过下列方式来执行此操作:

  • 使用默认凭证提供程序链(推荐)

  • 使用特定的凭证提供程序或提供程序链 (或创建您自己的)。

  • 自行提供凭证。这些凭证可以是 AWS 账户凭证、IAM 凭证或从 AWS STS 获取的临时凭证。

重要

出于安全考虑,强烈建议您使用 IAM 用户凭证而非 AWS 账户凭证来进行 AWS 访问。有关更多信息,请参阅 Amazon Web Services General Reference 中的 AWS 安全凭证

使用默认凭证提供程序链

在初始化新服务客户端而不提供任何参数时,AWS SDK for Java将尝试使用由 DefaultCredentialsProvider 类实现的默认凭证提供程序链来查找 AWS 凭证。默认凭证提供程序链将按此顺序查找凭证:

  1. Java 系统属性aws.accessKeyIdaws.secretAccessKey。AWS SDK for Java使用 SystemPropertyCredentialsProvider 加载这些凭证。

  2. 环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。AWS SDK for Java使用 EnvironmentVariableCredentialsProvider 类加载这些凭证。

  3. 默认凭证配置文件–通常位于 ~/.aws/credentials(此位置可能因平台而异),此凭证文件由多个 AWS 开发工具包和 AWS CLI 共享。AWS SDK for Java使用 ProfileCredentialsProvider 加载这些凭证。

    您可以使用由 AWS CLI 提供的 aws configure 命令创建凭证文件。或者,您可以通过使用文本编辑器编辑文件来创建凭证文件。有关凭证文件格式的信息,请参阅 AWS 凭证文件格式

  4. Amazon ECS 容器凭证– 如果设置了环境变量 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI,则从 Amazon ECS 加载凭证。AWS SDK for Java使用 ContainerCredentialsProvider 加载这些凭证。

  5. 实例配置文件凭证–在 Amazon EC2 实例上使用,并通过 Amazon EC2 元数据服务传送。AWS SDK for Java使用 InstanceProfileCredentialsProvider 加载这些凭证。

设置凭证

要使用 AWS 凭证,必须在上述位置中的至少一个 位置设置该凭证。有关设置凭证的信息,请参阅以下主题:

设置备用凭证配置文件

默认情况下,AWS SDK for Java 使用默认配置文件,但可通过几种方式自定义源自凭证文件的配置文件。

您可以使用 AWS_PROFILE 环境变量来更改开发工具包所加载的配置文件。

例如,在 Linux, OS X, or Unix 上,您可运行以下命令来将配置文件更改为 myProfile

export AWS_PROFILE="myProfile"

在 Windows 上,您将使用以下命令。

set AWS_PROFILE="myProfile"

设置 AWS_PROFILE 环境变量将影响所有正式支持的 AWS 开发工具包和工具(包括 AWS CLI 和 AWS CLI for PowerShell)的凭证加载。如果只需要更改 Java 应用程序的配置文件,则可改用系统属性 aws.profile

设置备用凭证文件位置

AWS SDK for Java 会自动从默认凭证文件位置加载 AWS 凭证。但是,您也可以通过在 AWS_CREDENTIAL_PROFILES_FILE 环境变量中设置凭证文件的完整路径来指定位置。

您可以使用此功能临时更改 AWS SDK for Java 查找凭证文件的位置 (例如,通过使用命令行设置此变量)。或者,您也可以在您的用户环境或系统环境中设置该环境变量,在用户范围或系统范围内对其进行更改。

覆盖默认凭证文件位置

  • AWS_CREDENTIAL_PROFILES_FILE 环境变量设置为 AWS 凭证文件的位置。

    • 在 Linux, OS X, or Unix 上,请使用 export

      export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
    • 在 Windows 上,请使用 set

      set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file

AWS 凭证文件格式

在使用 aws configure 命令创建 AWS 凭证文件时,该命令将采用以下格式创建一个文件。

[default] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY} [profile2] aws_access_key_id={YOUR_ACCESS_KEY_ID} aws_secret_access_key={YOUR_SECRET_ACCESS_KEY}

在方括号中指定配置文件名 (例如:[default]),后跟该配置文件中的可配置字段作为键值对。您的凭证文件可包含多个配置文件,可使用 aws configure --profile PROFILE_NAME 选择要配置的配置文件来添加或编辑这些配置文件。除了访问密钥和秘密访问密钥之外,您还可以使用 aws_session_token 字段指定会话令牌。

加载凭证

在设置凭证后,可使用默认凭证提供程序链来加载这些凭证。

为此,应该实例化 AWS 服务客户端而不向生成器显式提供凭证,如下所示。

S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .build();

指定凭证提供程序或提供程序链

您可以通过客户端生成器来指定一个不同于默认凭证提供程序链的凭证提供程序。

向将 AwsCredentialsProvider 接口作为输入的客户端生成器提供凭证提供程序或提供程序链的实例。以下示例展示使用环境凭证的具体情况。

S3Client s3 = S3Client.builder() .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build();

有关 AWS SDK for Java提供的凭证提供程序和提供程序链的完整列表,请参阅 AwsCredentialsProvider 中的所有已知实施类

注意

您可以使用此方法提供您创建的凭证提供程序或提供程序链,方式为使用您自己的可实现 AwsCredentialsProvider 接口的凭证提供程序。

明确指定凭证

如果默认凭证链和特定的或自定义的提供程序或提供程序链都不适用于您的代码,您可以通过自行提供来明确设置这些凭证。如果您已使用 AWS STS 获得临时凭证,请使用此方法指定用于 AWS 访问的凭证。

向 AWS 客户端明确提供凭证

  1. 实例化一个提供 AwsCredentials 接口的类,例如 AwsSessionCredentials。为该类提供您将用于连接的 AWS 访问密钥和私有密钥。

  2. 使用 AwsCredentials 对象创建 StaticCredentialsProvider

  3. 使用 StaticCredentialsProvider 配置客户端生成器并构建客户端。

以下是示例。

AwsSessionCredentials awsCreds = AwsSessionCredentials.create( "access_key_id", "secret_key_id", "session_token"); S3Client s32 = S3Client.builder() .credentialsProvider(StaticCredentialsProvider.create(awsCreds)) .build();

更多信息