

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 認証を設定する
<a name="configure-auth"></a>

 AWS SDK for Go には、認証動作サービスを設定する機能が用意されています。ほとんどの場合、デフォルト設定で十分ですが、カスタム認証を設定すると、プレリリースサービス機能の使用など追加の動作が可能になります。

## 定義
<a name="definitions"></a>

 このセクションでは、AWS SDK for Go での認証ロジックの構成要素の概要を示します。

### AuthScheme
<a name="authscheme"></a>

 [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) は、オペレーションリクエストに呼び出し元の ID をアタッチするワークフローを、SDK 内で定義するインターフェイスです。

 認証スキームでは、次の構成要素を使用します (詳細は後述)。
+  スキームを識別する一意の ID 
+  署名プロセスで使用される呼び出し元 ID (AWS 認証情報など) を返す ID リゾルバー 
+  署名ロジック。呼び出し元の ID をオペレーションのトランスポートリクエストに実際に挿入します (例: `Authorization` HTTP ヘッダー) 

 各サービスクライアントのオプションには `AuthSchemes` フィールドが含まれており、デフォルトではそのサービスでサポートされている認証スキームのリストが入力されています。

### AuthSchemeResolver
<a name="authschemeresolver"></a>

 各サービスクライアントのオプションには `AuthSchemeResolver` フィールドが含まれています。このインターフェイスはサービスごとに定義され、各オペレーションで使用可能な認証オプションを決定するために SDK によって呼び出される API です。

**重要**  
 認証スキームリゾルバーは、使用する認証スキームを決定するものではありません。代わりに、*使用可能な*スキームのリスト (「Options」) を返し、最終的なスキームは[こちら](#auth-scheme-resolution-workflow)で説明している固定アルゴリズムによって選択されます。

### オプション
<a name="option"></a>

 `ResolverAuthSchemes` を呼び出した結果として返される [Option](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) は、認証の候補オプションを表します。

 Option は 3 つの情報セットで構成されます。
+  使用可能なスキームを表す ID 
+  スキームの ID リゾルバーに渡される不透明なプロパティの集合 
+  スキームの署名ロジックに渡される不透明なプロパティの集合 

#### プロパティに関する注意事項
<a name="a-note-on-properties"></a>

 ほとんど (99%) のユースケースでは、呼び出し元は ID 解決および署名のための不透明なプロパティを意識する必要はありません。SDK は各スキームに必要なプロパティを自動的に抽出し、SDK で公開している厳密に型付けされたインターフェイスに渡します。例えば、サービスごとのデフォルトの認証リゾルバーは、SigV4 オプションに「署名名」と「リージョン」の情報を含む署名ロジックプロパティをエンコードします。これらの値は、SigV4 が選択されたときに、クライアントに設定された [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) 実装に渡されます。

### ID
<a name="identity"></a>

 [Identity](https://pkg.go.dev/github.com/aws/smithy-go/auth#Identity) は、SDK の呼び出し元を抽象的に表すものです。

 SDK で最も一般的に使用される Identity の型は `aws.Credentials` です。ほとんどのユースケースでは、呼び出し元は `Identity` という抽象型を意識せず、具体的な型をそのまま扱うことができます。

**注記**  
 下位互換性の維持と API の混乱防止のため、AWS SDK 固有の Identity の型 `aws.Credentials` は、`Identity` インターフェイスを直接実装していません。このマッピングは内部で処理されます。

### IdentityResolver
<a name="identityresolver"></a>

 [IdentityResolver](https://pkg.go.dev/github.com/aws/smithy-go/auth#IdentityResolver) は、`Identity` を取得するためのインターフェイスです。

 `IdentityResolver` の具体的な実装は、SDK に厳密な型付き形式で含まれており ([aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#CredentialsProvider) など)、これらのマッピングは SDK が内部で処理します。

 呼び出し元は、外部の認証スキームを定義する場合にのみ、`IdentityResolver` インターフェイスを直接実装する必要があります。

### Signer
<a name="signer"></a>

 [Signer](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#Signer) は、取得された呼び出し元の `Identity` をリクエストに追加するためのインターフェイスです。

 `Signer` の具体的な実装は、SDK に厳密な型付き形式で含まれており ([v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#HTTPSigner) など)、これらのマッピングは SDK が内部で処理します。

 呼び出し元は、外部の認証スキームを定義する場合にのみ、`Signer` インターフェイスを直接実装する必要があります。

### AuthResolverParameters
<a name="authresolverparameters"></a>

 各サービスは、それぞれ専用の入力値セットを受け取り、それを `AuthResolverParameters` としてサービスパッケージ内で定義された解決関数に渡します。

 基本的なリゾルバーパラメータは次のとおりです。


|  名前  |  type  |  description  | 
| --- | --- | --- | 
|  Operation  |  string  |  呼び出されるオペレーションの名前。 | 
|  Region  |  string  |  クライアントの AWS リージョン。SigV4[A] を使用するサービスでのみ存在します。 | 

 独自のリゾルバーを実装する場合でも、これらのパラメータのインスタンスを自分で作成する必要はありません。SDK がリクエストごとにこれらの値を取得し、カスタム実装に渡します。

## 認証スキームの解決ワークフロー
<a name="auth-scheme-resolution-workflow"></a>

 SDK 経由で AWS サービスのオペレーションを呼び出すと、リクエストのシリアル化後に次の一連のアクションが実行されます。

1.  SDK はクライアントの `AuthSchemeResolver.ResolveAuthSchemes()` API を呼び出して必要な入力パラメータを取得して、そのオペレーションで使用可能な [Options](https://pkg.go.dev/github.com/aws/smithy-go/auth#Option) のリストを取得します。

1.  SDK はそのリストを反復処理し、次の条件を満たす最初のスキームを選択します。
   +  ID が一致するスキームがクライアント自身の `AuthSchemes` リストに存在する 
   +  スキームの ID リゾルバーがクライアントのオプション内に存在する (`nil` でない) (このチェックはスキームの `GetIdentityResolver` メソッドを通じて行われ、前述の具体的な ID リゾルバー型へのマッピングは内部で処理されます) (1) 

1.  有効なスキームが選択されると、SDK はその `GetIdentityResolver()` API を呼び出して呼び出し元の ID を取得します。例えば、組み込みの SigV4 認証スキームは、クライアントの `Credentials` プロバイダーに内部でマッピングされます。

1.  SDK は ID リゾルバーの `GetIdentity()` (例: SigV4 の場合は `aws.CredentialProvider.Retrieve()`) を呼び出します。

1.  SDK はエンドポイントリゾルバーの `ResolveEndpoint()` を呼び出して、リクエストのエンドポイントを見つけます。このエンドポイントには、署名プロセスに影響する追加のメタデータ (S3 Object Lambda 用の一意の署名名など) が含まれている場合があります。

1.  SDK は認証スキームの `Signer()` API を呼び出して署名ロジックを取得し、その `SignRequest()` API を使用して、取得済みの呼び出し元の ID でリクエストに署名します。

 (1) SDK がリスト内で匿名オプション (ID `smithy.api#noAuth`) を検出した場合、対応する ID リゾルバーがないため、自動的にそのオプションが選択されます。

## ネイティブでサポートされている `AuthScheme`
<a name="natively-supported-authschemes"></a>

 次の認証スキームは AWS SDK for Go でネイティブにサポートされています。


|  名前  |  スキーム ID  |  ID リゾルバー  |  Signer  |  メモ  | 
| --- | --- | --- | --- | --- | 
|  [SigV4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-signing.html)  |  aws.auth\$1sigv4  |  [aws.CredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws#Credentials)  |  [v4.HTTPSigner](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/aws/signer/v4#Signer)  |  現時点でほとんどの AWS サービスオペレーションで使用されるデフォルトです。 | 
|  SigV4A  |  aws.auth\$1sigv4a  |  aws.CredentialsProvider  |  該当なし  |  SigV4A の使用は現時点では限定的であり、署名ロジックの実装は内部的なものです。HTTP リクエストに署名するための汎用 API を公開する新しいオプトインモジュール aws-http-auth については、こちらの[お知らせ](https://github.com/aws/aws-sdk-go-v2/discussions/2812)を参照してください。 | 
|  SigV4Express  |  com.amazonaws.s3\$1sigv4express  |  [s3.ExpressCredentialsProvider](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/s3#ExpressCredentialsProvider)  |  v4.HTTPSigner  |  [Express One Zone](https://aws.amazon.com/s3/storage-classes/express-one-zone/) に使用されます。 | 
|  HTTP Bearer  |  smithy.api\$1httpBearerAuth  |  [smithybearer.TokenProvider](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#TokenProvider)  |  [smithybearer.Signer](https://pkg.go.dev/github.com/aws/smithy-go/auth/bearer#Signer)  |  [codecatalyst](https://pkg.go.dev/github.com/aws/aws-sdk-go-v2/service/codecatalyst) によって使用されます。 | 
|  Anonymous  |  smithy.api\$1noAuth  |  該当なし  |  該当なし  |  認証なし - ID は不要で、リクエストは署名も認証もされません。 | 

### ID の設定
<a name="identity-configuration"></a>

 AWS SDK for Go では、認証スキームの ID 構成要素は SDK クライアントの `Options` で設定されます。SDK は、オペレーションが呼び出されたときに選択したスキームに対して、これらの構成要素の値を自動的に取得して使用します。

**注記**  
 下位互換性の理由から、ID リゾルバーが設定されていない場合、SDK は匿名認証スキームの使用を暗黙的に許可します。これは、クライアントの `Options` にあるすべての ID リゾルバーを `nil` に設定することで手動でも可能です (sigv4 の ID リゾルバーを `aws.AnonymousCredentials{}` に設定することもできます)。

### Signer の設定
<a name="signer-configuration"></a>

 AWS SDK for Go では、認証スキームの署名ロジック構成要素は SDK クライアントの `Options` で設定されます。SDK は、オペレーションが呼び出されたときに選択したスキームに対して、これらの構成要素の値を自動的に取得して使用します。追加の設定は不要です。

#### カスタム認証スキーム
<a name="custom-auth-scheme"></a>

 カスタム認証スキームを定義して使用するには、呼び出し元で以下を行う必要があります。

1.  [AuthScheme](https://pkg.go.dev/github.com/aws/smithy-go/transport/http#AuthScheme) 実装を定義する 

1.  そのスキームを SDK クライアントの `AuthSchemes` リストに登録する 

1.  SDK クライアントの `AuthSchemeResolver` を調整して、必要に応じてスキーム ID を含む auth `Option` を返すようにします。

**警告**  
 次のサービスでは、独自またはカスタムの認証動作が実装されています。カスタム認証動作が必要な場合は、まずはデフォルト実装に処理を委譲し、その上で適切にラップしてカスタマイズすることをお勧めします。  


|  サービス  |  メモ  | 
| --- | --- | 
|  S3  |  オペレーションの入力に応じて SigV4A および SigV4Express を条件付きで使用。 | 
|  EventBridge  |  オペレーションの入力に応じて SigV4A を条件付きで使用。 | 
|  Cognito  |  一部のオペレーションは匿名専用。 | 
|  SSO  |  一部のオペレーションは匿名専用。 | 
|  STS  |  一部のオペレーションは匿名専用。 | 