这些区域有:AWS SDK for Java团队正在招聘软件开发工程师
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用AWS凭证
向发出请求Amazon Web Services,你必须提供AWS的凭证AWS SDK for Java. 您可以通过下列方式来执行此操作:
-
使用默认凭证提供程序链(推荐)。
-
使用特定的凭证提供程序或提供程序链 (或创建您自己的)。
-
自行提供凭证。这些凭证可以是根账户凭证、IAM 凭证或从获取的临时凭证。AWS STS.
为了安全起见,我们强烈推荐您使用 IAM 用户而不是根账户AWS访问。有关更多信息,请参阅 。IAM 最佳实践中的IAM用户指南。
使用默认凭证提供程序链
在初始化新服务客户端而不提供任何参数时,AWS SDK for Java尝试查找AWS通过使用默认的凭证提供程序链由实施DefaultAWSCredentialsProviderChain类。默认凭证提供程序链将按此顺序查找凭证:
-
环境变量-
AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
. AWS SDK for Java使用 EnvironmentVariableCredentialsProvider 类加载这些凭证。 -
Java 系统属性-
aws.accessKeyId
和aws.secretKey
. AWS SDK for Java使用 SystemPropertiesCredentialsProvider 加载这些凭证。 -
来自环境或容器的 Web 身份令牌凭证。
-
默认凭据配置文件文件-通常位于
~/.aws/credentials
(位置可能因平台而异),并由多个AWSSDK 和AWS CLI. AWS SDK for Java使用 ProfileCredentialsProvider 加载这些凭证。可以使用创建凭证文件
aws configure
提供的命令AWS CLI,或者,您可以通过使用文本编辑器编辑文件来创建文件。有关凭证文件格式的信息,请参阅AWS凭证文件格式. -
Amazon ECS 容器凭证-如果是环境变量,则从 Amazon 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凭据,必须在至少有一个之前的位置。有关设置凭证的信息,请参阅以下主题:
-
要在环境或者在默认情况下凭据配置文件文件请参阅设置AWS发展凭证和区域.
-
要设置 Java 系统属性,请参阅官方 Java 教程
网站中的系统属性教程。 -
要设置和使用实例配置文件证使用 EC2 实例,请参阅使用 IAM 角色授予对的访问权AWS开启的资源Amazon EC2.
设置备用凭证配置文件
默认情况下,AWS SDK for Java 使用默认配置文件,但可通过几种方式自定义源自凭证文件的配置文件。
您可以使用AWS配置文件环境变量以更改开发工具包加载的配置文件。
例如,在 Linux、macOS 或 Unix 上,您可运行以下命令来将配置文件更改为myProfile.
export AWS_PROFILE="myProfile"
在 Windows 上,您将使用以下配置文件。
set AWS_PROFILE="myProfile"
设置AWS_PROFILE
环境变量影响所有官方支持的凭据加载AWS开发工具包和工具包(包括AWS CLI和AWS Tools for Windows PowerShell)。要仅更改 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
-
凭证文件格式
当您使用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
、metadata_service_timeout
和 metadata_service_num_attempts
。无法使用 CLI 配置这些文件-如果您想使用这些文件,则必须手动编辑它们。有关配置文件及其可用字段的更多信息,请参阅配置AWS Command Line Interface中的AWS Command Line Interface用户指南。
加载凭证
在设置凭证后,可使用默认凭证提供程序链来加载这些凭证。
要做到这一点,你需要实例化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访问。
-
实例化一个提供的类AWS 开发工具包接口,例如BasicAWSCredentials,然后为其提供AWS您将用于连接的访问密钥和私有密钥。
-
使用 对象创建 AWSStaticCredentialsProvider
AWSCredentials
。 -
使用
AWSStaticCredentialsProvider
配置客户端生成器并构建客户端。
以下是示例。
BasicAWSCredentials awsCreds = new BasicAWSCredentials("access_key_id", "secret_key_id"); AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(awsCreds)) .build();
在使用从 STS 获取的临时凭证时,将创建一个 BasicSessionCredentials 对象,并为该对象传递 STS 提供的凭证和会话令牌。
BasicSessionCredentials sessionCredentials = new BasicSessionCredentials( session_creds.getAccessKeyId(), session_creds.getSecretAccessKey(), session_creds.getSessionToken()); AmazonS3 s3 = AmazonS3ClientBuilder.standard() .withCredentials(new AWSStaticCredentialsProvider(sessionCredentials)) .build();