本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定身分驗證
AWS SDK for Go 提供設定身分驗證行為服務的功能。在大多數情況下,預設組態就已足夠,但設定自訂身分驗證允許使用發行前服務功能等其他行為。
定義
本節提供 中身分驗證元件的高階描述 AWS SDK for Go。
AuthScheme
AuthScheme
驗證方案使用下列元件,以下進一步詳細說明:
-
識別方案的唯一 ID
-
身分解析程式,會傳回用於簽署程序的發起人身分 (例如您的 AWS 登入資料)
-
簽署者,執行將發起人身分實際注入操作的傳輸請求 (例如
AuthorizationHTTP 標頭)
每個服務用戶端選項都包含 AuthSchemes 欄位,預設會填入該服務支援的身分驗證方案清單。
AuthSchemeResolver
每個服務用戶端選項都包含 AuthSchemeResolver 欄位。此界面是 SDK 呼叫的 API,用於判斷每個操作的可能身分驗證選項。
重要
驗證方案解析程式不會指定使用哪個驗證方案。它會傳回可使用的方案清單 (「選項」),最終方案是透過此處所述的固定演算法選取。
選項
選項ResolverAuthSchemes,從對 的呼叫傳回。
選項包含三組資訊:
-
代表可能方案的 ID
-
要提供給方案身分解析程式的不透明屬性集
-
要提供給方案簽署者的不透明屬性集
屬性的備註
對於 99% 的使用案例,發起人不需要擔心身分解析和簽署的不透明屬性。開發套件會提取每個方案的必要屬性,並將其傳遞至開發套件中公開的強類型界面。例如,服務的預設身分驗證解析程式會編碼 SigV4 選項,讓簽署名稱和區域的簽署者屬性具有,當選取 SigV4 時,其值會傳遞給用戶端設定的 v4.HTTPSigner
Identity
Identity
開發套件中使用的最常見身分類型是一組 aws.Credentials。對於大多數使用案例,發起人不需要將自己與 Identity視為抽象,並且可以直接使用具體類型。
注意
為了保持回溯相容性並防止 API 混淆, AWS 開發套件特定的身分類型aws.Credentials不會直接滿足Identity界面。此映射會在內部處理。
IdentityResolver
IdentityResolverIdentity。
軟體開發套件中IdentityResolver存在以強類型形式存在的具體版本 (例如 aws.CredentialsProvider
發起人在定義外部身分驗證機制時,只需要直接實作IdentityResolver界面。
Signer
SignerIdentity。
軟體開發套件會以強類型形式 (例如 v4.HTTPSignerSigner 存在於軟體開發套件中的具體版本,軟體開發套件會在內部處理此映射。
發起人只需要在定義外部身分驗證機制時直接實作Signer界面。
AuthResolverParameters
每個服務都會接受一組特定的輸入,這些輸入會傳遞至其解析度函數,在每個服務套件中定義為 AuthResolverParameters。
基本解析程式參數如下:
| name | type | description |
|---|---|---|
Operation
|
string
|
要叫用的 操作名稱。 |
Region
|
string
|
用戶端 AWS 的區域。僅適用於使用 SigV4【A】 的服務。 |
如果您要實作自己的解析程式,則永遠不需要建構自己的參數執行個體。開發套件會依請求取得這些值,並將其傳遞給您的實作。
驗證方案解析工作流程
當您透過 SDK 呼叫 AWS 服務操作時,請求序列化後會發生下列動作序列:
-
軟體開發套件會呼叫用戶端的
AuthSchemeResolver.ResolveAuthSchemes()API,視需要取得輸入參數,以取得操作的可能選項清單。 -
SDK 會逐一查看該清單,然後選取第一個符合下列條件的方案。
-
具有相符 ID 的方案存在於用戶端自己的
AuthSchemes清單中 -
方案的身分解析程式存在於 (非
nil) 用戶端的選項上 (透過方案的GetIdentityResolver方法檢查,對上述具體身分解析程式類型的映射會在內部處理) (1)
-
-
假設已選取可行的方案,開發套件會叫用其
GetIdentityResolver()API 來擷取發起人的身分。例如,內建的 SigV4 驗證機制會在內部映射到用戶端的Credentials提供者。 -
SDK 會呼叫身分解析程式的
GetIdentity()(例如aws.CredentialProvider.Retrieve(),適用於 SigV4)。 -
SDK 會呼叫端點解析程式的
ResolveEndpoint(),以尋找請求的端點。端點可能包含會影響簽署程序的其他中繼資料 (例如 S3 Object Lambda 的唯一簽署名稱)。 -
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 用量目前受到限制,簽署者實作為內部。請參閱此公告 |
| 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。軟體開發套件會自動為呼叫 操作時所選取的配置,挑選並使用這些元件的值。不需要額外的組態。
自訂身分驗證方案
為了定義自訂身分驗證方案並將其設定為使用,發起人必須執行下列動作:
-
定義 AuthScheme
實作 -
在 SDK 用戶端的
AuthSchemes清單上註冊方案 -
檢測 SDK 用戶端的
AuthSchemeResolver,在適用的情況下Option使用結構描述的 ID 傳回身分驗證
警告
下列服務具有唯一或自訂的身分驗證行為。如果您需要自訂身分驗證行為,建議您委派 給預設實作,並據此進行包裝:
| 服務 | 備註 |
|---|---|
| S3 | 根據操作輸入,有條件使用 SigV4A 和 SigV4Express。 |
| EventBridge | 根據操作輸入,有條件使用 SigV4A。 |
| Cognito | 某些操作僅限匿名。 |
| SSO | 某些操作僅限匿名。 |
| STS | 某些操作僅限匿名。 |