我們宣布
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
提供臨時登入資料給 AWS SDK for Java
若要向其提出要求 Amazon Web Services,您必須提供 AWS 暫時登入資料, AWS SDK for Java 以便在呼叫服務時使用。您可採用以下方式:
-
使用預設登入資料供應者鏈結 (建議)。
-
使用特定的登入資料供應者或供應者鏈結 (或建立您自己的項目)。
-
在代碼中自己提供臨時憑據。
使用預設登入資料供應商鏈結
當您在未提供任何引數的情況下初始化新的服務用戶端時,會 AWS SDK for Java 嘗試使用 D efault AWSCredentialsProviderChain 類別實作的預設認證提供者鏈來尋找暫時認證。預設登入資料供應者鏈結會依以下順序尋找登入資料:
-
環境變數-
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
、和AWS_SESSION_TOKEN
。會 AWS SDK for Java 使用EnvironmentVariableCredentialsProvider類別來載入這些認證。 -
Java 系統屬性-
aws.accessKeyId
aws.secretKey
、和aws.sessionToken
。使 AWS SDK for Java 用載SystemPropertiesCredentialsProvider入這些認證。 -
來自環境或容器的 Web 身份權杖認證。
-
默認憑據配置文件文件-通常位於
~/.aws/credentials
(位置可能因平台而異),並由許多 AWS SDK 共享。 AWS CLI使 AWS SDK for Java 用載ProfileCredentialsProvider入這些認證。您可以使用提供的
aws configure
指令建立認證檔案 AWS CLI,也可以使用文字編輯器編輯檔案來建立認證檔案。如需認證檔案格式的相關資訊,請參閱AWS 認證檔案格式。 -
Amazon ECS 容器登入資料-如果設定了環境變數
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
,則會從 Amazon ECS 載入。使 AWS SDK for Java 用載ContainerCredentialsProvider入這些認證。您可以指定此值的 IP 位址。 -
執行個體設定檔登入資料-用於 EC2 執行個體,並透過 Amazon EC2 中繼資料服務提供。使 AWS SDK for Java 用載InstanceProfileCredentialsProvider入這些認證。您可以指定此值的 IP 位址。
注意
只有在未設定執行個體設定檔證明資料時才
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
會使用。如需詳細ContainerCredentialsProviderWrapper資訊,請參閱 EC2。
設定臨時認證
為了能夠使用 AWS 臨時身份證明,它們必須至少設置在先前的位置之一。如需設定登入資料的相關資訊,請參閱下列主題:
-
若要在環境中或預設認證設定檔檔案中指定認證,請參閱設定暫時性憑入。
-
若要設定 Java 系統屬性,請參閱官方 Java 教學課程
網站的系統屬性教學課程。 -
若要在 EC2 執行個體上設定和使用執行個體設定檔登入資料,請參閱在上使用 IAM 角色授予 AWS 資源存取權 Amazon EC2。
設定替代認證設定檔
依預設 AWS SDK for Java 會使用預設設定檔,但有多種方法可以自訂來自認證檔案的設定檔。
您可以使用 AWS 設定檔環境變數來變更 SDK 載入的設定檔。
例如,在 Linux、macOS 或 Unix 上,您可以執行下列指令,將設定檔變更為「myProfile」。
export AWS_PROFILE="myProfile"
在視窗上,您可以使用以下內容。
set AWS_PROFILE="myProfile"
設定AWS_PROFILE
環境變數會影響所有官方支援的 AWS SDK 和工具 (包括 AWS CLI 和 AWS Tools for Windows PowerShell) 的認證載入。若只要變更 Java 應用程式的設定檔,您可以aws.profile
改用 system 屬性。
注意
環境變數會優先於系統屬性。
設定替代認證檔案位置
會從預設認證檔案位置自動 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
-
在視窗上,使用:
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類,並提供 SDK 將用於連接的 AWS 訪問 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();