搭配使用暫時憑證與 AWS 資源 - AWS Identity and Access Management

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配使用暫時憑證與 AWS 資源

您可以使用臨時安全登入資料,使用 AWS CLI 或 AWS API (使用 AWS SDK) 對 AWS 資源進行程式設計要求。暫時性憑證提供的許可與長期安全憑證許可相同,例如 IAM 使用者憑證。不過,有幾個差異:

  • 當您使用臨時安全憑據進行呼叫時,調用必須包含會話令牌,該令牌與這些臨時憑據一起返回。 AWS 使用會話令牌來驗證臨時安全憑據。

  • 暫時性憑證在指定的間隔時間後到期。暫時性憑證到期後,使用這些憑證進行的任何呼叫都將失敗,所以您必須產生一組新的暫時性憑證。暫時性憑證無法延期或重新整理超過原始指定間隔。

  • 當您使用暫時憑證發出請求時,您的主體可能會包含一組標籤。這些標籤來自工作階段標籤和連接到您擔任角色的標籤。如需有關工作階段標籤的詳細資訊,請參閱 傳遞工作階段標籤 AWS STS

如果您使用的是 AWS SDKAWS Command Line Interface(AWS CLI) 或 Windows PowerShell 工具,取得和使用臨時安全性登入資料的方式會隨內容而有所不同。如果您在 EC2 執行個體內執行程式碼或 Windows 專用工具 PowerShell 命令,您可以利用適用於 Amazon EC2 的角色。 AWS CLI否則,您可以呼叫 AWS STS API 以取得暫時憑證,然後明確地使用他們呼叫 AWS 服務。

注意

您可以使用 AWS Security Token Service (AWS STS) 建立並為受信任的使用者提供可控制資源存取權的臨時安全登入 AWS 資料。如需有關的更多資訊 AWS STS,請參閱IAM 中的暫時安全憑證。 AWS STS 是具有預設端點的全域服務https://sts.amazonaws.com。此端點位在美國東部 (維吉尼亞北部) 區域,但您從此端點和其他端點取得的憑證為全域有效。這些憑證可配合任何區域中的服務和資源使用。您也可以選擇對任何支援的區域中的端點進行 AWS STS API 呼叫。從地理位置較靠近您的區域的伺服器提出請求,可以降低延遲發生機率。無論您的憑證來自哪個區域,都能全域使用。如需詳細資訊,請參閱 AWS STS 在一個管理 AWS 區域

在 Amazon EC2 執行個體中使用暫時憑證

如果您想要在 EC2 執行個體內執行 AWS CLI 命令或程式碼,建議取得登入資料的方式是使用 Amazon EC2 的角色。您建立 IAM 角色,指定要授予在 EC2 執行個體上執行之應用程式的許可。當您啟動執行個體時,會建立角色與執行個體的關聯。

然後 AWS CLI,在執行個體上執行的 Windows PowerShell 命令適用的應用程式、和工具可以從執行個體中繼資料取得自動暫時安全登入資料。您不必明確取得暫時安全憑證。適用於 Windows 的 AWS 開發套件和工具 PowerShell 會自動從 EC2 執行個體中繼資料服務 (IMDS) 取得登入資料並加以使用。 AWS CLI暫時性憑證擁有您為與執行個體定義關聯的角色所定義的許可。

如需詳細資訊及範例,請參閱下列:

使用暫時性安全憑證與 AWS 開發套件

要在代碼中使用臨時安全憑據,您可以通過編程方式調用類似的 AWS STS API AssumeRole 並提取生成的憑據和會話令牌。然後,您可以使用這些值作為後續呼叫的認證 AWS。下列範例顯示如何在使用 SDK 時使用臨時安全性憑證的虛擬程式碼: AWS

assumeRoleResult = AssumeRole(role-arn); tempCredentials = new SessionAWSCredentials( assumeRoleResult.AccessKeyId, assumeRoleResult.SecretAccessKey, assumeRoleResult.SessionToken); s3Request = CreateAmazonS3Client(tempCredentials);

如需使用 Python 撰寫的範例 (使用 AWS SDK for Python (Boto)),請參閱切換到IAM角色(AWS API)。此範例會示範如何呼叫 AssumeRole 以取得暫時安全憑證,然後使用這些憑證呼叫 Amazon S3。

如需如何呼叫 AssumeRoleGetFederationToken 以及其他 API 操作的詳細資訊,請參閱 AWS Security Token Service API 參考。有關從結果取得臨時安全憑證和工作階段權杖的詳細資訊,請參閱您正在使用的軟體開發套件的說明文件。您可以在主要文件頁面的 AWS SDK 和工具組區段中找到所有 SDK 的AWS 文件

您必須在舊的憑證到期之前,確實取得一組新的憑證。在某些軟體開發套件中,您可以使用為您管理重新整理憑證程序的提供者;檢查您正在使用的開發套件的文件。

使用暫時性安全憑證與 AWS CLI

您可以使用暫時性安全憑證與 AWS CLI。這很適合用於測試政策。

若使用 AWS CLI,您便可以呼叫 AWS STS API (例如 AssumeRoleGetFederationToken),然後擷取產生的輸出。以下範例顯示對 AssumeRole 的呼叫,其會傳送輸出至檔案。在此範例中,會假設profile參數是組態檔案中的設 AWS CLI 定檔。同時也假設會參考有權擔任角色之 IAM 使用者的憑證。

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/role-name --role-session-name "RoleSession1" --profile IAM-user-name > assume-role-output.txt

當命令完成時,您可以從您路由的任何地方擷取存取金鑰 ID、私密存取金鑰和工作階段權杖。您可以手動或使用指令碼執行這項作業。然後,您可以將這些值指派給環境變數。

當您執行 AWS CLI 命令時,會以特定順序 AWS CLI 尋找認證 — 首先在環境變數中,然後在組態檔案中尋找認證。因此,在您將暫存認證放入環境變數之後,依預設 AWS CLI 會使用這些認證。(如果您在指令中指定profile參數,則會 AWS CLI 略過環境變數。 而是在配置文件中查 AWS CLI 找,如果需要,它可以讓您覆蓋環境變量中的認證。)

下列範例顯示如何設定暫時安全性登入資料的環境變數,然後呼叫 AWS CLI 命令。由於 AWS CLI 命令中未包含任何profile參數,因此會先在環境變數中 AWS CLI 尋找認證,因此會使用暫時認證。

Linux

$ export AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY $ export AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of session token> $ aws ec2 describe-instances --region us-west-1

Windows

C:\> SET AWS_ACCESS_KEY_ID=ASIAIOSFODNN7EXAMPLE C:\> SET AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY C:\> SET AWS_SESSION_TOKEN=AQoDYXdzEJr...<remainder of token> C:\> aws ec2 describe-instances --region us-west-1

使用暫時性安全憑證與 API 操作

如果您直接向 HTTPS API 請求發出 AWS,則可以使用從 AWS Security Token Service (AWS STS) 獲得的臨時安全登入資料來簽署這些請求。若要這麼做,您可以使用從中接收的存取金鑰 ID 和秘密存取金鑰 AWS STS。使用存取金鑰 ID 和私密存取金鑰簽署請求的方式,就和使用長期憑證簽署請求一樣。您還將從中接收的會話令牌添加到 API 請求中 AWS STS。您將工作階段權杖新增到 HTTP 標頭,或查詢名為 X-Amz-Security-Token 的字串參數。您將工作階段權杖新增到 HTTP 標頭「或」查詢字串參數,但不是兩者。如需簽署 HTTPS API 要求的詳細資訊,參閱 AWS 一般參考. AWS

其他資訊

如需 AWS STS 與其他 AWS 服務搭配使用的詳細資訊,請參閱下列連結: