截至 2024 年 7 月 31 日, AWS SDK for Java 1.x 已進入維護模式,並將end-of-support
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
提供臨時登入資料給 AWS SDK for Java
若要向 提出請求 Amazon Web Services,您必須提供 AWS 臨時登入資料 AWS SDK for Java ,供 呼叫 服務時使用。您可採用以下方式:
-
使用預設登入資料供應者鏈結 (建議)。
-
使用特定的登入資料供應者或供應者鏈結 (或建立您自己的項目)。
-
在程式碼中自行提供臨時登入資料。
使用預設登入資料供應商鏈結
當您初始化新的服務用戶端而不提供任何引數時, AWS SDK for Java 會嘗試使用 DefaultAWSCredentialsProviderChain 類別實作的預設登入資料提供者鏈來尋找臨時登入資料。預設登入資料供應者鏈結會依以下順序尋找登入資料:
-
環境變數
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 Identity Token 登入資料。
-
預設憑證設定檔檔案 - 通常位於
~/.aws/credentials
(每個平台的位置可能不同),並由許多 AWS SDKs和 共用 AWS CLI。 AWS SDK for Java 使用 ProfileCredentialsProvider載入這些登入資料。您可以使用 提供的
aws configure
命令來建立登入資料檔案 AWS CLI,或使用文字編輯器編輯檔案來建立登入資料檔案。如需登入資料檔案格式的資訊,請參閱AWS 登入資料檔案格式。 -
ECS 如果已
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
設定環境變數,則會從 Amazon 載入 Amazon ECS容器憑證。 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 會使用預設的設定檔,但有方法可以自訂從登入資料檔案取得的設定檔。
您可以使用 AWS 設定檔環境變數來變更 載入的設定檔SDK。
例如,在 Linux、macOS 或 Unix 上,您會執行下列命令,將設定檔變更為 myProfile。
export AWS_PROFILE="myProfile"
在 Windows 上,您會使用下列項目。
set AWS_PROFILE="myProfile"
設定AWS_PROFILE
環境變數會影響所有官方支援 AWS SDKs 和 工具 (包括 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
-
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 提供 SDK用於連線的存取金鑰、 AWS 私密金鑰和 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();