使用 AWS 憑證 - AWS Tools for PowerShell

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

使用 AWS 憑證

每個 AWS Tools for PowerShell 命令都必須包含一組 AWS 憑證,用於以密碼演算法登入對應的 Web 服務請求。您可以依命令、工作階段或針對所有工作階段指定憑證。

警告

為避免安全風險,在開發專用軟體或使用真實資料時,請勿使用 IAM 使用者進行身分驗證。相反地,搭配使用聯合功能和身分提供者,例如 AWS IAM Identity Center

注意

本主題中的資訊適用於您需要手動取得及管理短期或長期憑證的情況。有關短期和長期憑證的其他資訊,請參閱 AWS SDK 和工具參考指南中的其他驗證方法

如需最佳安全實務,請依照 設定工具身分驗證 中所述使用 AWS IAM Identity Center。

做為避免公開憑證的最佳實務,請勿在命令中輸入文字憑證。請為您要使用的每一組憑證建立一個描述檔,然後將描述檔存放在兩個憑證存放區的其中一個。在命令中依名稱指定正確的描述檔,AWS Tools for PowerShell 就會擷取相關聯的憑證。如需有關如何安全地管理 AWS 的一般討論,請參閱Amazon Web Services 一般參考 中的管理 AWS 存取金鑰的最佳實務

注意

您需要 AWS 帳戶才能取得憑證並使用 AWS Tools for PowerShell。若要建立 AWS 帳戶,請參閱 AWS Account Management 參考指南中的開始使用:您是第一次使用 AWS 嗎?

憑證存放區位置

AWS Tools for PowerShell 可以使用兩個憑證存放區的任一個:

  • AWS 開發套件存放區會加密您的憑證,並將它們存放在您的主資料夾中。在 Windows 中,此存放區位於:C:\Users\username\AppData\Local\AWSToolkit\RegisteredAccounts.json

    AWS SDK for .NETToolkit for Visual Studio 也可以使用 AWS 開發套件存放區。

  • 共用憑證檔案也位在您的主資料夾中,但以純文字形式存放憑證。

    根據預設,憑證檔案存放在這裡:

    • 在 Windows 上: C:\Users\username\.aws\credentials

    • 在 Mac/Linux 上:~/.aws/credentials

    AWS 開發套件和 AWS Command Line Interface 也可以使用憑證檔案。如果您在 AWS 使用者內容之外執行指令碼,請務必將包含您憑證的檔案複製到所有使用者帳戶 (本機系統和使用者) 都能存取憑證的位置。

管理描述檔

描述檔能讓您使用 AWS Tools for PowerShell 參考不同的憑證集。您可以使用 AWS Tools for PowerShell cmdlet 來管理 AWS 開發套件存放區中的描述檔。您也可以使用 Toolkit for Visual Studio,或以程式設計方式使用 AWS SDK for .NET,來管理 AWS 開發套件存放區中的描述檔。如需如何管理憑證檔案中描述檔的指示,請參閱管理 AWS 存取金鑰的最佳實務

新增新的描述檔

若要將新的描述檔新增到 AWS 開發套件存放區,請執行 Set-AWSCredential 命令。它會將您的存取金鑰和秘密金鑰存放在您指定之描述檔名稱下的預設憑證檔案中。

PS > Set-AWSCredential ` -AccessKey AKIA0123456787EXAMPLE ` -SecretKey wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY ` -StoreAs MyNewProfile
  • -AccessKey– 存取金鑰 ID。

  • -SecretKey– 私密金鑰。

  • -StoreAs– 描述檔名稱,必須是唯一的。若要指定預設描述檔,請使用名稱 default

更新描述檔

AWS 開發套件存放區必須手動維護。如果您稍後變更服務上的憑證 (例如使用 IAM 主控台),使用本機存放的憑證執行命令會失敗,並出現下列錯誤訊息:

The Access Key Id you provided does not exist in our records.

您可以透過重複描述檔的 Set-AWSCredential 命令並將它傳遞到新的存取金鑰和私密金鑰,來更新描述檔。

列出描述檔

您可以使用以下命令檢查目前的名稱清單。在此範例中,名為 Shirley 的使用者可以存取三個描述檔,這些描述檔都儲存在共用憑證檔案 (~/.aws/credentials) 中。

PS > Get-AWSCredential -ListProfileDetail ProfileName StoreTypeName ProfileLocation ----------- ------------- --------------- default SharedCredentialsFile /Users/shirley/.aws/credentials production SharedCredentialsFile /Users/shirley/.aws/credentials test SharedCredentialsFile /Users/shirley/.aws/credentials

移除描述檔

若要移除您不再需要的描述檔,請使用以下命令。

PS > Remove-AWSCredentialProfile -ProfileName an-old-profile-I-do-not-need

-ProfileName 參數會指定您要刪除的描述檔。

已移除的命令 Clear-AWSCredential 仍適用於回溯相容性,但最好使用 Remove-AWSCredentialProfile

指定憑證

有幾種方式可以指定憑證。最好是識別描述檔,而不是將文字憑證合併到命令列中。AWS Tools for PowerShell 會使用憑證搜尋順序中描述的搜尋順序尋找描述檔。

在 Windows 上,存放在 AWS 開發套件存放區中的 AWS 憑證會使用登入的 Windows 使用者身分加密。它們無法使用其他帳戶解密,也無法在非最初建立帳戶的裝置上使用。若要使用其他使用者的憑證執行任務 (例如,有排程任務要執行的使用者帳戶),請如上節所述設定憑證描述檔,以便以該使用者身分登入電腦時可以使用其憑證。以任務執行使用者身分登入,完成憑證設定步驟,並建立適用於該使用者的描述檔。登出後,再使用您自己的憑證登入,以設定排程任務。

注意

使用 -ProfileName 通用參數來指定描述檔。此參數等同於較舊 AWS Tools for PowerShell 版本的 -StoredCredentials 參數。如需回溯相容性,-StoredCredentials 仍然受支援。

如果憑證存放在名為 AWS 的描述檔中,則所有 default 開發套件和管理工具皆可自動在本機電腦上找到您的憑證。例如,如果您在本機電腦上有名為 default 的描述檔,就不必執行 Initialize-AWSDefaultConfiguration cmdlet 或 Set-AWSCredential cmdlet。這些工具會自動使用存放在該描述檔中的存取金鑰和秘密金鑰資料。若要使用您預設區域 (Get-DefaultAWSRegion 的結果) 以外的 AWS 區域,您可以執行 Set-DefaultAWSRegion 並指定區域。

如果您的描述檔並未命名為 default,但您想將其做為目前工作階段使用的預設描述檔,則執行 Set-AWSCredential 以將其設定為預設描述檔。

雖然執行 Initialize-AWSDefaultConfiguration 可讓您針對每個 PowerShell 工作階段指定預設描述檔,cmdlet 仍從您的自訂名稱描述檔載入憑證,並以命名描述檔覆寫 default 描述檔。

我們建議您不執行 Initialize-AWSDefaultConfiguration,除非您在未經執行個體描述檔啟動的 Amazon EC2 執行個體上執行 PowerShell 工作階段,且您想要手動設定憑證描述檔。請注意,此藍本中的憑證描述檔不包含憑證。在 EC2 執行個體上執行 Initialize-AWSDefaultConfiguration 所產生的憑證描述檔,不會直接存放憑證,而是指向執行個體中繼資料 (提供自動輪換的暫時憑證)。但是,它卻會存放執行個體的區域。另一個可能需要執行 Initialize-AWSDefaultConfiguration 的情況是,您希望避免執行個體正在運作的區域,對其他區域執行呼叫。執行該命令會永久覆寫存放在執行個體中繼資料的區域。

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2
注意

預設憑證放在 default 描述檔名稱下方的 AWS 開發套件存放區。命令會以該名稱覆寫任何現有的描述檔。

如果您的 EC2 執行個體經執行個體描述檔執行,PowerShell 即會自動從執行個體描述檔取得 AWS 憑證和區域資訊。你不需要執行 Initialize-AWSDefaultConfiguration。不需要從經執行個體描述檔啟動的 EC2 執行個體上執行 Initialize-AWSDefaultConfiguration cmdlet,因為它預設會使用 PowerShell 已經使用的相同執行個體描述檔資料。

工作階段描述檔

使用 Set-AWSCredential 指定特定工作階段的預設描述檔。此描述檔會覆寫工作階段期間內的任何預設描述檔。如果您想要在自己的工作階段中使用自訂名稱的描述檔,而不是目前的 default 描述檔,建議您使用此方法。

PS > Set-AWSCredential -ProfileName MyProfileName
注意

在 1.1 版以前的 Tools for Windows PowerShell 版本中,Set-AWSCredential cmdlet 無法正常運作,而且會覆寫 "MyProfileName" 指定的描述檔。建議使用較新版本 Tools for Windows PowerShell。

命令描述檔

在個別的命令中,您可以新增 -ProfileName 參數以指定僅適用該一個命令的描述檔。此描述檔會覆寫任何預設或工作階段描述檔,如下列範例所示。

PS > Get-EC2Instance -ProfileName MyProfileName
注意

當您指定預設或工作階段描述檔時,您也可以新增 -Region 參數來覆寫預設或工作階段區域。如需更多詳細資訊,請參閱 指定 AWS 區域。以下範例指定預設的描述檔和區域。

PS > Initialize-AWSDefaultConfiguration -ProfileName MyProfileName -Region us-west-2

根據預設,AWS 共用憑證檔案假設位在使用者的主資料夾 (Windows 為 C:\Users\username\.aws,Linux 則為 ~/.aws)。若要指定不同位置的憑證檔案,請加上 -ProfileLocation 參數並指定憑證檔案路徑。以下範例指定特定命令的非預設憑證檔案。

PS > Get-EC2Instance -ProfileName MyProfileName -ProfileLocation C:\aws_service_credentials\credentials
注意

如果您要在通常不會登入 AWS 的時間執行 PowerShell 指令碼,例如,在非正常上班時間以排定的任務來執行 PowerShell 指令碼,當您指定要使用的描述檔時請新增 -ProfileLocation 參數,並將值設定為存放您憑證之檔案的路徑。為了確定您的 AWS Tools for PowerShell 指令碼以正確的帳戶憑證執行,當您的指令碼在不使用 -ProfileLocation 帳戶的內容或程序中執行時,您應該新增 AWS 參數。您也可以將您的憑證檔案複製到本機系統或指令碼用於執行任務的其他帳戶可存取的位置。

憑證搜尋順序

當您執行命令時,AWS Tools for PowerShell 會依下列順序搜尋憑證。當它找到可用的憑證時就會停止。

  1. 在命令列中內嵌為參數的文字憑證。

    強烈建議您使用描述檔,不要在命令列中放置文字憑證。

  2. 指定的描述檔名稱或描述檔位置。

    • 如果您僅指定描述檔名稱,則命令會在 AWS 開發套件存放區中尋找指定的描述檔,如果該檔案不存在,則在預設位置的 AWS 共用憑證檔案中尋找指定的描述檔。

    • 如果您只指定描述檔位置,命令會在該憑證檔案中尋找 default 描述檔。

    • 如果同時指定名稱和位置,命令就會在該憑證檔案中尋找指定的描述檔。

    如果找不到指定的描述檔或位置,命令會擲出例外狀況。只有在您未指定描述檔或位置時,搜尋才會繼續執行下列步驟。

  3. -Credential 參數指定的憑證。

  4. 工作階段描述檔 (如果存在)。

  5. 依以下順序使用預設描述檔:

    1. AWS 開發套件存放區中的 default 描述檔。

    2. default 共用憑證檔案中的 AWS 描述檔。

    3. AWS 開發套件存放區中的 AWS PS Default 描述檔。

  6. 如果命令是在設定使用 IAM 角色的 Amazon EC2 執行個體上執行,就會從執行個體描述檔存取 EC2 執行個體的暫時憑證。

    如需使用適用於 Amazon EC2 執行個體 的 IAM 角色詳細資訊,請參閱 AWS SDK for .NET

如果此搜尋無法找到指定的憑證,命令會擲出例外狀況。

在 AWS Tools for PowerShell Core 中處理憑證

AWS Tools for PowerShell Core 中的 Cmdlet 在執行時會接受 AWS 存取金鑰和秘密金鑰或憑證描述檔的名稱,類似 AWS Tools for Windows PowerShell。在 Windows 上執行時,這兩個模組都能存取 AWS SDK for .NET 憑證存放區檔案 (存放在每個使用者的 AppData\Local\AWSToolkit\RegisteredAccounts.json 檔案)。

此檔案以加密格式存放您的金鑰,而且無法用於不同的電腦。這是 AWS Tools for PowerShell 在憑證描述檔中搜尋的第一個檔案,也是 AWS Tools for PowerShell 存放憑證描述檔的檔案。如需 AWS SDK for .NET 憑證存放檔案的詳細資訊,請參閱設定 AWS 憑證。Tools for Windows PowerShell 模組目前不支援將憑證寫入其他檔案或位置。

兩個模組都能從其他 AWS 開發套件和 AWS 所用的 AWS CLI 共用憑證檔案中讀取描述檔。在 Windows 上,這個檔案的預設位置是 C:\Users\<userid>\.aws\credentials。在非 Windows 平台上,這個檔案存放在 ~/.aws/credentials-ProfileLocation 參數可用於指向非預設檔案名稱或檔案位置。

開發套件憑證存放區使用 Windows 加密 API,以加密形式存放您的憑證。這些 API 不可用於其他平台,因此 AWS Tools for PowerShell Core 模組獨自使用 AWS 共用憑證檔案,並支援將新的憑證描述檔寫入共用憑證檔案。

以下使用 Set-AWSCredential cmdlet 的範例指令碼,示範在 Windows 上使用 AWSPowerShellAWSPowerShell.NetCore 模組來處理憑證描述檔的選項。

# Writes a new (or updates existing) profile with name "myProfileName" # in the encrypted SDK store file Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Checks the encrypted SDK credential store for the profile and then # falls back to the shared credentials file in the default location Set-AWSCredential -ProfileName myProfileName # Bypasses the encrypted SDK credential store and attempts to load the # profile from the ini-format credentials file "mycredentials" in the # folder C:\MyCustomPath Set-AWSCredential -ProfileName myProfileName -ProfileLocation C:\MyCustomPath\mycredentials

以下範例說明 Linux 或 macOS 作業系統上的 AWSPowerShell.NetCore 模組行為。

# Writes a new (or updates existing) profile with name "myProfileName" # in the default shared credentials file ~/.aws/credentials Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName # Writes a new (or updates existing) profile with name "myProfileName" # into an ini-format credentials file "~/mycustompath/mycredentials" Set-AWSCredential -AccessKey akey -SecretKey skey -StoreAs myProfileName -ProfileLocation ~/mycustompath/mycredentials # Reads the default shared credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName # Reads the specified credential file looking for the profile "myProfileName" Set-AWSCredential -ProfileName myProfileName -ProfileLocation ~/mycustompath/mycredentials