本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
中的預設登入資料提供者鏈結 AWS SDK for Java 2.x
中的預設登入資料提供者鏈結 AWS SDK for Java 2.x 會自動在預先定義的位置序列中搜尋 AWS 登入資料,允許應用程式使用 進行身分驗證, AWS 服務 而無需明確指定登入資料來源。
預設登入資料提供者鏈結由 DefaultCredentialsProvider
若要使用預設登入資料提供者鏈來提供臨時登入資料,請建立服務用戶端建置器,但不指定登入資料提供者。下列程式碼片段會建立DynamoDbClient使用預設登入資料提供者鏈結來尋找和擷取組態設定的 。
// Any external Region configuration is overridden. // The SDK uses the default credentials provider chain because no specific credentials provider is specified. Region region = Region.US_WEST_2; DynamoDbClient ddb = DynamoDbClient.builder() .region(region) .build();
登入資料設定擷取順序
適用於 Java 的 SDK 2.x 的預設登入資料提供者鏈結會使用預先定義的序列搜尋您環境中的組態。
-
Java 系統屬性
-
SDK 使用 SystemPropertyCredentialsProvider
類別從 aws.accessKeyId、aws.secretAccessKey和aws.sessionTokenJava 系統屬性載入臨時憑證。注意
如需有關如何設定 Java 系統屬性的資訊,請參閱官方 Java 教學課程網站上的系統屬性
教學課程。
-
-
環境變數
-
SDK 使用 EnvironmentVariableCredentialsProvider
類別從 AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEY和AWS_SESSION_TOKEN環境變數載入臨時憑證。
-
-
Web 身分字符和 IAM 角色 ARN
-
SDK 使用 WebIdentityTokenFileCredentialsProvider
類別,透過使用 Web 身分字符擔任角色來載入憑證。 -
登入資料提供者會尋找下列環境變數或 JVM 系統屬性:
-
AWS_WEB_IDENTITY_TOKEN_FILE oraws.webIdentityTokenFile -
AWS_ROLE_ARN或aws.roleArn -
AWS_ROLE_SESSION_NAME或aws.roleSessionName(選用)
-
-
開發套件取得值後,它會呼叫 AWS Security Token Service (STS),並使用其傳回的臨時登入資料來簽署請求。
-
Amazon Elastic Kubernetes Service (EKS) 等執行期環境會自動提供 Web 身分字符給 AWS SDKs,讓應用程式能夠取得臨時 AWS 登入資料。
-
-
共用
credentials和config檔案-
SDK 使用 ProfileCredentialsProvider
從共用 credentials和config檔案中的[default]設定檔載入 IAM Identity Center 單一登入設定或暫時登入資料。AWS SDKs和工具參考指南提供有關適用於 Java 的 SDK 如何與 IAM Identity Center 單一登入字符搭配使用的詳細資訊,以取得 SDK 用於呼叫的臨時登入資料 AWS 服務。
注意
credentials和config檔案由 AWS SDKs和工具共用。如需詳細資訊,請參閱 SDK 和工具參考指南中的 .aws/credentials 和 .aws/config 檔案。 AWS SDKs -
由於共用
credentials和config檔案中的描述檔可以包含許多不同的設定集,因此ProfileCredentialsProvider委派給一系列其他供應商,以在[default]描述檔下尋找設定:-
基本登入資料 (類別
StaticCredentialsProvider):當設定檔包含aws_access_key_id和 時aws_secret_access_key。 -
工作階段登入資料 (類別
StaticSessionCredentialsProvider):當設定檔包含aws_access_key_id、aws_secret_access_key和 時aws_session_token。 -
程序登入資料 (類別
ProcessCredentialsProvider):當設定檔包含 時credential_process。 -
SSO 登入資料 (類別
SsoCredentialsProvider):當設定檔包含 SSO 相關屬性時,例如sso_role_name、sso_account_id。 -
Web 身分字符登入資料 (類別
WebIdentityTokenCredentialsProvider):當設定檔包含role_arn和 時web_identity_token_file。 -
具有來源描述檔的角色型登入資料 (類別
StsAssumeRoleCredentialsProvider):當描述檔包含role_arn和 時source_profile。 -
具有登入資料來源的角色型登入資料 (類別
StsAssumeRoleWithSourceCredentialsProvider):當設定檔包含role_arn和 時credential_source。-
當
credential_source = Environment:它使用SystemPropertyCredentialsProvider和 的鏈EnvironmentVariableCredentialsProvider -
當
credential_source = Ec2InstanceMetadata:它使用InstanceProfileCredentialsProvider -
當
credential_source = EcsContainer:它使用ContainerCredentialsProvider
-
-
-
-
Amazon ECS 容器憑證
-
SDK 使用 ContainerCredentialsProvider
類別,使用以下環境變數載入臨時憑證: -
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI或AWS_CONTAINER_CREDENTIALS_FULL_URI -
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE或AWS_CONTAINER_AUTHORIZATION_TOKEN
-
ECS 容器代理程式會自動設定
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI環境變數,指向 ECS 登入資料端點。其他環境變數通常會在不使用標準 ECS 登入資料端點的特定案例中設定。 -
-
Amazon EC2 執行個體 IAM 角色提供的登入資料
-
SDK 使用 InstanceProfileCredentialsProvider
類別從 Amazon EC2 中繼資料服務載入臨時憑證。
-
-
如果軟體開發套件無法透過上述所有步驟找到必要的組態設定,則會擲回例外狀況,其輸出類似如下:
software.amazon.awssdk.core.exception.SdkClientException: Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()])
在程式碼DefaultCredentialsProvider中使用
您可以在程式碼中明確使用預設登入資料提供者鏈結。這功能等同於您完全不指定登入資料提供者,因為 SDK DefaultCredentialsProvider 預設會使用 。不過,明確使用它可以讓您的程式碼更易於讀取和自我記錄。它清楚地顯示您使用預設登入資料鏈的意圖。
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3Client; public class ExplicitDefaultCredentialsExample { public static void main(String[] args) { // Explicitly create the DefaultCredentialsProvider. DefaultCredentialsProvider defaultCredentialsProvider = DefaultCredentialsProvider .builder().build(); // Use it with any service client. S3Client s3Client = S3Client.builder() .region(Region.US_WEST_2) .credentialsProvider(defaultCredentialsProvider) .build(); // Now you can use the client with the default credentials chain. s3Client.listBuckets(); } }
當您建置預設登入資料提供者時,您可以提供更多組態:
DefaultCredentialsProvider customizedProvider = DefaultCredentialsProvider.builder() .profileName("custom-profile") // Use a specific profile if the chain gets to the `ProfileCredentialsProvider` stage. .asyncCredentialUpdateEnabled(true) // Enable async credential updates. .build();
此方法可讓您擁有更多控制權,同時仍提供預設登入資料鏈的便利性。