从外部流程加载临时凭证 - Amazon SDK for Java 2.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从外部流程加载临时凭证

警告

以下内容描述从外部流程获取临时凭证的方法。这可能很危险,因此请谨慎行事。如果可能,应优先选择其他凭证提供者。如果使用此选项,则应确保使用操作系统的安全最佳实践尽可能锁定 config 文件。

确保您的自定义凭证工具不会向 StdErr 中写入任何机密信息。SDK 和 Amazon CLI 可以捕获和记录此类信息,可能会将其向未经授权的用户公开。

使用适用于 Java 的 SDK 2.x,您可以从外部流程获取用于自定义用例的临时凭证。可通过两种方式配置此功能。

使用 credential_process 设置

如果您有提供临时凭证的方法,则可以通过将 credential_process 设置作为配置文件定义的一部分添加到 config 文件中来进行集成。您指定的值必须使用命令文件的完整路径。如果文件路径包含任何空格,则必须用引号将其括起来。

SDK 将完全按照给定的形式调用命令,然后从 stdout 中读取 JSON 数据。

以下示例演示如何对不带空格的文件路径和带空格的文件路径使用此设置。

Linux/macOS
文件路径中没有空格
[profile process-credential-profile] credential_process = /path/to/credential/file/credential_file.sh --custom-command custom_parameter
文件路径中有空格
[profile process-credential-profile] credential_process = "/path/with/space to/credential/file/credential_file.sh" --custom-command custom_parameter
Windows
文件路径中没有空格
[profile process-credential-profile] credential_process = C:\Path\To\credentials.cmd --custom_command custom_parameter
文件路径中有空格
[profile process-credential-profile] credential_process = "C:\Path\With Space To\credentials.cmd" --custom_command custom_parameter

以下代码段演示如何生成一个使用名为 process-credential-profile 的配置文件中定义的临时凭证的服务客户端。

Region region = Region.US_WEST_2; S3Client s3Client = S3Client.builder() .region(region) .credentialsProvider(ProfileCredentialsProvider.create("process-credential-profile")) .build();

有关使用外部流程作为临时凭证来源的详细信息,请参阅《Amazon SDKs and Tools Reference Guide》中的流程凭证部分

使用 ProcessCredentialsProvider

除了使用 config 文件中的设置之外,您还可以使用 SDK 的 ProcessCredentialsProvider 通过 Java 加载临时凭证。

以下示例演示如何通过使用 ProcessCredentialsProvider 和配置使用临时凭证的服务客户端来指定外部流程的各种版本。

Linux/macOS
文件路径中没有空格
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("/path/to/credentials.sh optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
文件路径中有空格
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("/path\\ with\\ spaces\\ to/credentials.sh optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
Windows
文件路径中没有空格
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("C:\\Path\\To\\credentials.exe optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();
文件路径中有空格
ProcessCredentialsProvider credentials = ProcessCredentialsProvider .builder() .command("\"C:\\Path\\With Spaces To\\credentials.exe\" optional_param1 optional_param2") .build(); S3Client s3 = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(credentials) .build();