自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
向提供临时证书 AWS SDK for Java
要向发出请求 Amazon Web Services,您必须提供 AWS 临时证书, AWS SDK for Java 以供其在调用服务时使用。您可以通过下列方式来执行此操作:
-
使用默认凭证提供程序链(推荐)。
-
使用特定的凭证提供程序或提供程序链(或创建您自己的)。
-
在代码中自行提供临时凭证。
使用默认凭证提供程序链
在不提供任何参数的情况下初始化新的服务客户端时,会 AWS SDK for Java 尝试使用 D efaultAWSCredentials ProviderChain 类实现的默认凭证提供程序链来查找临时证书。默认凭证提供程序链将按此顺序查找凭证:
-
环境变量-
AWS_ACCESS_KEY_ID
、AWS_SECRET_KEY
或AWS_SECRET_ACCESS_KEY
、和AWS_SESSION_TOKEN
。 AWS SDK for Java 使用EnvironmentVariableCredentialsProvider类来加载这些凭证。 -
Java 系统属性-
aws.accessKeyId
、aws.secretKey
(但不是aws.secretAccessKey
)和aws.sessionToken
。 AWS SDK for Java 使用SystemPropertiesCredentialsProvider来加载这些凭证。 -
来自环境或容器的 Web 身份令牌凭证。
-
默认凭证配置文件 ——通常位于
~/.aws/credentials
(位置可能因平台而异),并由许多 AWS SDKs和共享。 AWS CLI AWS SDK for Java 使用ProfileCredentialsProvider来加载这些凭证。您可以使用提供的
aws configure
命令创建凭据文件 AWS CLI,也可以使用文本编辑器编辑该文件来创建凭证文件。有关凭证文件格式的信息,请参阅 AWS 凭证文件格式。 -
亚马逊ECS容器凭证-ECS 如果设置了环境变量
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
,则从亚马逊加载。 AWS SDK for Java 使用ContainerCredentialsProvider来加载这些凭证。可以指定此值的 IP 地址。 -
实例配置文件凭证-用于EC2实例,并通过 Amazon EC2 元数据服务提供。 AWS SDK for Java 使用InstanceProfileCredentialsProvider来加载这些凭证。可以指定此值的 IP 地址。
注意
仅在未设置
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
时使用实例配置文件凭证。请参阅EC2ContainerCredentialsProviderWrapper了解更多信息。
设置临时凭证
为了能够使用 AWS 临时证书,必须至少在前面的一个位置设置临时证书。有关设置凭证的信息,请参阅以下主题:
-
要在环境 或默认凭证配置文件 中指定凭证,请参阅配置临时凭证。
-
要设置 Java 系统属性,请参阅官方 Java 教程
网站中的系统属性教程。 -
要为您的EC2实例设置和使用实例配置文件证书,请参阅IAM中的使用角色授予 AWS 资源访问权限 Amazon EC2。
设置备用凭证配置文件
默认 AWS SDK for Java 使用默认配置文件,但也有一些方法可以自定义哪个配置文件来自凭据文件。
您可以使用 P AWS rofile 环境变量来更改加载的配置文件SDK。
例如,在 Linux、macOS 或 Unix 上,你可以运行以下命令将配置文件更改为。myProfile
export AWS_PROFILE="myProfile"
在 Windows 上,您将使用以下配置文件。
set AWS_PROFILE="myProfile"
设置AWS_PROFILE
环境变量会影响所有官方支持的工具 AWS SDKs和工具(包括和 AWS Tools for Windows PowerShell)的 AWS CLI 凭证加载。如果只需要更改 Java 应用程序的配置文件,则可改用系统属性 aws.profile
。
注意
环境变量优先于系统属性。
设置备用凭证文件位置
会自动从默认凭证文件位置 AWS SDK for Java 加载 AWS 临时证书。但是,您也可以通过在 AWS_CREDENTIAL_PROFILES_FILE
环境变量中设置凭证文件的完整路径来指定位置。
您可以使用此功能临时更改证书文件所在的位置(例如,通过使用命令行设置此变量)。 AWS SDK for Java 或者,您也可以在您的用户环境或系统环境中设置该环境变量,在用户范围或系统范围内对其进行更改。
覆盖默认凭证文件位置
-
将
AWS_CREDENTIAL_PROFILES_FILE
环境变量设置为 AWS 凭据文件的位置。-
在 Linux、macOS 或 Unix 上,请使用:
export AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
-
在 Windows 上,请使用:
set AWS_CREDENTIAL_PROFILES_FILE=path/to/credentials_file
-
Credentials
文件格式
根据本指南中的基本设置说明,您的凭证文件应采用以下基本格式。
[default] aws_access_key_id=
<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>
[profile2] aws_access_key_id=<value from AWS access portal>
aws_secret_access_key=<value from AWS access portal>
aws_session_token=<value from AWS access portal>
在方括号中指定配置文件名(例如:[default]
),后跟该配置文件中的可配置字段作为键值对。您的 credentials
文件可包含多个配置文件,可使用 aws configure --profile
PROFILE_NAME
选择要配置的配置文件来添加或编辑这些配置文件。
您可以指定其他字段,例如 metadata_service_timeout
和 metadata_service_num_attempts
。无法使用配置这些文件 CLI ——如果要使用它们,则必须手动编辑文件。有关配置文件及其可用字段的更多信息,请参阅 AWS Command Line Interface 用户指南AWS Command Line Interface中的配置。
加载凭证
在您设置临时证书后,将使用默认的凭证提供程序链SDK加载它们。
为此,您需要实例化 AWS 服务 客户端,而无需向生成器明确提供证书,如下所示。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withRegion(Regions.US_WEST_2) .build();
指定凭证提供程序或提供程序链
您可以通过客户端生成器来指定一个不同于默认凭证提供程序链的凭证提供程序。
您可以向以AWSCredentialsProvider接口作为输入的客户端生成器提供凭证提供程序或提供程序链的实例。以下示例演示使用环境 凭证的具体情况。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new EnvironmentVariableCredentialsProvider()) .build();
有关 AWS SDK for Java提供的凭证提供者和提供者链的完整列表,请参阅中的所有已知实现类。AWSCredentialsProvider
注意
您可以使用此技术来提供凭证提供程序或提供者链,这些证书提供程序或通过使用自己实现AWSCredentialsProvider
接口的凭证提供程序或对类进行子类来创建。AWSCredentialsProviderChain
明确指定临时凭证
如果默认凭证链和特定的或自定义的提供程序或提供程序链都不适用于您的代码,您可以通过自行提供来明确设置这些凭证。如果您使用检索了临时证书 AWS STS,请使用此方法指定 AWS 访问凭证。
-
实例化该BasicSessionCredentials类,并为其提供用于 AWS 连接的访问 AWS 密钥、密钥和SDK会 AWS 话令牌。
-
AWSStaticCredentialsProvider用该
AWSCredentials
对象创建。 -
使用
AWSStaticCredentialsProvider
配置客户端生成器并构建客户端。
示例如下:
BasicSessionCredentials awsCreds = new BasicSessionCredentials("access_key_id", "secret_key_id", "session_token"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();