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