設定身分驗證 - AWS SDK for Go v2

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

設定身分驗證

AWS SDK for Go 提供設定身分驗證行為服務的功能。在大多數情況下,預設組態就已足夠,但設定自訂身分驗證允許使用發行前服務功能等其他行為。

定義

本節提供 中身分驗證元件的高階描述 AWS SDK for Go。

AuthScheme

AuthScheme 是定義工作流程的界面,開發套件會透過此工作流程擷取發起人身分並將其連接至操作請求。

驗證方案使用下列元件,以下進一步詳細說明:

  • 識別方案的唯一 ID

  • 身分解析程式,會傳回用於簽署程序的發起人身分 (例如您的 AWS 登入資料)

  • 簽署者,執行將發起人身分實際注入操作的傳輸請求 (例如 Authorization HTTP 標頭)

每個服務用戶端選項都包含 AuthSchemes 欄位,預設會填入該服務支援的身分驗證方案清單。

AuthSchemeResolver

每個服務用戶端選項都包含 AuthSchemeResolver 欄位。此界面是 SDK 呼叫的 API,用於判斷每個操作的可能身分驗證選項。

重要

驗證方案解析程式不會指定使用哪個驗證方案。它會傳回可使用的方案清單 (「選項」),最終方案是透過此處所述的固定演算法選取。

選項

選項代表可能的身分驗證選項ResolverAuthSchemes,從對 的呼叫傳回。

選項包含三組資訊:

  • 代表可能方案的 ID

  • 要提供給方案身分解析程式的不透明屬性集

  • 要提供給方案簽署者的不透明屬性集

屬性的備註

對於 99% 的使用案例,發起人不需要擔心身分解析和簽署的不透明屬性。開發套件會提取每個方案的必要屬性,並將其傳遞至開發套件中公開的強類型界面。例如,服務的預設身分驗證解析程式會編碼 SigV4 選項,讓簽署名稱和區域的簽署者屬性具有,當選取 SigV4 時,其值會傳遞給用戶端設定的 v4.HTTPSigner 實作。

Identity

Identity 是 SDK 發起人身分的抽象表示。

開發套件中使用的最常見身分類型是一組 aws.Credentials。對於大多數使用案例,發起人不需要將自己與 Identity視為抽象,並且可以直接使用具體類型。

注意

為了保持回溯相容性並防止 API 混淆, AWS 開發套件特定的身分類型aws.Credentials不會直接滿足Identity界面。此映射會在內部處理。

IdentityResolver

IdentityResolver 是擷取 的界面Identity

軟體開發套件中IdentityResolver存在以強類型形式存在的具體版本 (例如 aws.CredentialsProvider),軟體開發套件會在內部處理此映射。

發起人在定義外部身分驗證機制時,只需要直接實作IdentityResolver界面。

Signer

Signer 是請求以擷取呼叫者 補充的界面Identity

軟體開發套件會以強類型形式 (例如 v4.HTTPSigner) Signer 存在於軟體開發套件中的具體版本,軟體開發套件會在內部處理此映射。

發起人只需要在定義外部身分驗證機制時直接實作Signer界面。

AuthResolverParameters

每個服務都會接受一組特定的輸入,這些輸入會傳遞至其解析度函數,在每個服務套件中定義為 AuthResolverParameters

基本解析程式參數如下:

name type description
Operation string 要叫用的 操作名稱。
Region string 用戶端 AWS 的區域。僅適用於使用 SigV4【A】 的服務。

如果您要實作自己的解析程式,則永遠不需要建構自己的參數執行個體。開發套件會依請求取得這些值,並將其傳遞給您的實作。

驗證方案解析工作流程

當您透過 SDK 呼叫 AWS 服務操作時,請求序列化後會發生下列動作序列:

  1. 軟體開發套件會呼叫用戶端的 AuthSchemeResolver.ResolveAuthSchemes() API,視需要取得輸入參數,以取得操作的可能選項清單。

  2. SDK 會逐一查看該清單,然後選取第一個符合下列條件的方案。

    • 具有相符 ID 的方案存在於用戶端自己的AuthSchemes清單中

    • 方案的身分解析程式存在於 (非nil) 用戶端的選項上 (透過方案的 GetIdentityResolver方法檢查,對上述具體身分解析程式類型的映射會在內部處理) (1)

  3. 假設已選取可行的方案,開發套件會叫用其 GetIdentityResolver() API 來擷取發起人的身分。例如,內建的 SigV4 驗證機制會在內部映射到用戶端的Credentials提供者。

  4. SDK 會呼叫身分解析程式的 GetIdentity()(例如aws.CredentialProvider.Retrieve(),適用於 SigV4)。

  5. SDK 會呼叫端點解析程式的 ResolveEndpoint(),以尋找請求的端點。端點可能包含會影響簽署程序的其他中繼資料 (例如 S3 Object Lambda 的唯一簽署名稱)。

  6. SDK 會呼叫身分驗證機制的 Signer() API 來擷取其簽署者,並使用其 SignRequest() API 來簽署具有先前擷取的呼叫者身分的請求。

(1) 如果 SDK 在清單中遇到匿名選項 (IDsmithy.api#noAuth),則會自動選取,因為沒有對應的身分解析程式。

原生支援的 AuthScheme

原生支援下列身分驗證方案 AWS SDK for Go。

名稱 結構描述 ID 身分解析程式 Signer 備註
SigV4 aws.auth#sigv4 aws.CredentialsProvider v4.HTTPSigner 大多數 AWS 服務操作的目前預設值。
SigV4A aws.auth#sigv4a aws.CredentialsProvider N/A SigV4A 用量目前受到限制,簽署者實作為內部。請參閱此公告,了解新的選擇加入模組 aws-http-auth,該模組公開用於簽署 HTTP 請求的一般用途 APIs。
SigV4Express com.amazonaws.s3#sigv4express s3.ExpressCredentialsProvider v4.HTTPSigner 用於 Express One Zone
HTTP 承載器 smithy.api#httpBearerAuth smithybearer.TokenProvider smithybearer.Signer codecatalyst 使用。
匿名 smithy.api#noAuth N/A 無身分驗證 - 不需要身分,且請求未簽署或驗證。

身分組態

在 中 AWS SDK for Go,身分驗證方案的身分元件是在 SDK 用戶端 中設定Options。軟體開發套件會自動為呼叫 操作時所選取的配置,挑選並使用這些元件的值。

注意

基於回溯相容性的原因,如果未設定身分解析程式,開發套件會隱含允許使用匿名身分驗證機制。這可以透過將用戶端 上的所有身分解析程式設定為 Optionsnil(sigv4 身分解析程式也可以設定為 aws.AnonymousCredentials{}) 來手動實現。

簽署者組態

在 中 AWS SDK for Go,身分驗證方案的簽署者元件是在 SDK 用戶端 中設定Options。軟體開發套件會自動為呼叫 操作時所選取的配置,挑選並使用這些元件的值。不需要額外的組態。

自訂身分驗證方案

為了定義自訂身分驗證方案並將其設定為使用,發起人必須執行下列動作:

  1. 定義 AuthScheme 實作

  2. 在 SDK 用戶端的AuthSchemes清單上註冊方案

  3. 檢測 SDK 用戶端的 AuthSchemeResolver,在適用的情況下Option使用結構描述的 ID 傳回身分驗證

警告

下列服務具有唯一或自訂的身分驗證行為。如果您需要自訂身分驗證行為,建議您委派 給預設實作,並據此進行包裝:

服務 備註
S3 根據操作輸入,有條件使用 SigV4A 和 SigV4Express。
EventBridge 根據操作輸入,有條件使用 SigV4A。
Cognito 某些操作僅限匿名。
SSO 某些操作僅限匿名。
STS 某些操作僅限匿名。