SDK を設定 - AWS SDK for Go v2

SDK を設定

AWS SDK for Go V2 では、ロガー、ログレベル、再試行設定など、サービスクライアント共通の設定を行うことができます。ほとんどの設定はオプションです。ただし、サービスクライアントごとに AWS リージョンと認証情報の指定は必須です。SDK はこれらの値を使用して、正しいリージョンにリクエストを送信し、正しい認証情報でリクエストに署名します。これらの値は、コード内でプログラムで指定することも、実行環境から取得することもできます。

AWS 共有設定ファイルのロード

サービス API クライアントを初期化する方法はいくつかありますが、次に示すのはユーザーに推奨される最も一般的なパターンです。

AWS 共有設定ファイルを使用するように SDK を設定するには、次のコードを使用します。

import ( "context" "log" "github.com/aws/aws-sdk-go-v2/config" ) // ... cfg, err := config.LoadDefaultConfig(context.TODO()) if err != nil { log.Fatalf("failed to load configuration, %v", err) }

config.LoadDefaultConfig(context.TODO()) は AWS 共有設定ソースから aws.Config を作成します。これには、認証情報プロバイダーの設定、AWS リージョンの設定、サービス固有の設定のロードが含まれます。ロードされた aws.Config を使用してサービスクライアントを作成することで、クライアントの作成方法に一貫性を持たせることができます。

AWS 共有設定ファイルの詳細については、「AWS SDK とツールのリファレンスガイド」の「設定」を参照してください。

AWS リージョンの指定

リージョンを指定するときは、us-west-2us-east-2 など、リクエストの送信先を指定します。各サービスのリージョンのリストについては、「Amazon Web Services 全般のリファレンス」の「サービスエンドポイントとクォータ」を参照してください。

SDK にはデフォルトのリージョンはありません。リージョンを指定するには:

  • AWS_REGION 環境変数を設定して、デフォルトのリージョンを指定します。

  • 設定のロード時に config.LoadDefaultConfigconfig.WithRegion を引数として渡して、明示的にリージョンを設定します。

注: これらすべての方法でリージョンを設定した場合、SDK は明示的に指定したリージョンを使用します。

環境変数を使用してリージョンを設定する

Linux、macOS、または Unix

export AWS_REGION=us-west-2

Windows

set AWS_REGION=us-west-2

リージョンをプログラムで指定する

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithRegion("us-west-2"))

認証情報の指定

AWS SDK for Go には、AWS へのリクエストに署名するための認証情報 (アクセスキーとシークレットアクセスキー) が必要です。特定のユースケースに応じて、認証情報をいくつかの場所で指定できます。認証情報の取得については、「AWS SDK for Go の開始方法」を参照してください。

config.LoadDefaultConfig を使用して aws.Config インスタンスを初期化すると、SDK はデフォルトの認証情報チェーンを使用して AWS の認証情報を見つけます。このデフォルトの認証情報チェーンは、次の順序で認証情報を検索します。

  1. 環境変数。

    1. 静的な認証情報 (AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN)

    2. ウェブ ID トークン (AWS_WEB_IDENTITY_TOKEN_FILE)

  2. 共有設定ファイル。

    1. SDK は、ユーザーのコンピュータのホームフォルダ内にある .aws フォルダ下の credentials ファイルを共有設定ファイルのデフォルトとして使用します。

    2. SDK は、ユーザーのコンピュータのホームフォルダ内にある .aws フォルダ下の config ファイルを共有設定ファイルのデフォルトとして使用します。

  3. アプリケーションが Amazon ECS タスク定義または RunTask API オペレーションを使用している場合は、タスクの IAM ロール。

  4. アプリケーションが Amazon EC2 インスタンスで動作している場合は、Amazon EC2 の IAM ロール。

SDK は、これらの組み込みプロバイダーを自動的に検出して使用するため、手動での設定は不要です。例えば、Amazon EC2 インスタンスの IAM ロールを使用している場合、アプリケーションは自動的にそのインスタンスの認証情報を使用します。アプリケーション側で認証情報を手動で設定する必要はありません。

ベストプラクティスとして、AWSでは、次の順序で認証情報を指定することをお勧めします。

  1. アプリケーションが Amazon ECS のタスク定義または RunTask API オペレーションを使用している場合は、タスクの IAM ロールを使用します。

  2. アプリケーションが Amazon EC2 インスタンスで動作している場合は、Amazon EC2 の IAM ロールを使用します。

    IAM ロールは、インスタンス上のアプリケーションに、AWS 呼び出しを行うための一時的なセキュリティ認証情報を提供します。また IAM ロールは、複数の Amazon EC2 インスタンスに認証情報を分散して管理するための簡単な方法を提供します。

  3. 共有認証情報または設定ファイルを使用します。

    これらの認証情報と設定ファイルは、他の AWS SDK や AWS CLI と共有されます。セキュリティのベストプラクティスとして、アクセスキー ID やシークレットキーなどの機密情報は認証情報ファイルで設定することをお勧めします。これらの各ファイルのフォーマット要件は次のとおりです。

  4. 環境変数を使用します。

    Amazon EC2 インスタンス以外のマシンで開発作業を行う場合は、環境変数を設定すると便利です。

タスク用の IAM ロール

アプリケーションが Amazon ECS タスク定義または RunTask オペレーションを使用している場合は、タスクの IAM ロールを使用して、タスクのコンテナで使用できる IAM ロールを指定します。

Amazon EC2 インスタンスの IAM ロール

Amazon EC2 インスタンスでアプリケーションを実行している場合は、そのインスタンスの IAM ロールを利用して、AWS への呼び出しに使用する一時的なセキュリティ認証情報を取得します。

IAM ロールを使用するようにインスタンスを設定している場合、SDK はその認証情報を自動的に使用してアプリケーションを認証します。これらの認証情報を手動で指定する必要はありません。

共有認証情報と設定

共有認証情報ファイルと設定ファイルは、AWS SDK やその他のツール間で共通設定を共有するために使用できます。ツールやアプリケーションごとに異なる認証情報を使用している場合は、プロファイルを使用して複数のアクセスキーを同じ設定ファイル内に設定できます。

config.LoadOptions を使用して複数の認証情報ファイルや設定ファイルの場所を指定できますが、SDK はデフォルトで、「認証情報の指定」に記載されている既定の場所に保存されたファイルをロードします。

import ( "context" "github.com/aws/aws-sdk-go-v2/config" ) // ... cfg , err := config.LoadDefaultConfig(context.TODO(), config.WithSharedCredentialsFiles( []string{"test/credentials", "data/credentials"}, ), config.WithSharedConfigFiles( []string{"test/config", "data/config"}, ) )

共有認証情報ファイルと設定ファイルを使用する場合、同じプロファイルが複数定義されていると、それらはマージされてプロファイルが解決されます。マージの競合が発生した場合:

  1. 同じ認証情報/設定ファイル内でプロファイルが重複している場合は、後に記述されたプロファイルのプロパティが優先されます。

  2. 複数の認証情報ファイルまたは複数の設定ファイル間でプロファイルが重複している場合は、config.LoadOptions に渡されたファイルの順序に基づいて、後のファイルのプロパティが優先されます。後のファイルのプロパティが優先されます。

  3. 認証情報ファイルと設定ファイルの両方に同じプロファイルが存在する場合は、認証情報ファイルのプロパティが優先されます。

必要に応じて、config.LoadOptionsLogConfigurationWarnings を有効にして、プロファイル解決の手順をログに記録することもできます。

認証情報ファイルの作成

共有認証情報ファイル (.aws/credentials) がない場合は、任意のテキストエディタを使用してホームディレクトリ内に作成できます。認証情報ファイルに次の内容を追加し、<YOUR_ACCESS_KEY_ID><YOUR_SECRET_ACCESS_KEY> を実際の認証情報に置き換えます。

[default] aws_access_key_id = <YOUR_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_SECRET_ACCESS_KEY>

[default] 見出しは、デフォルトプロファイルの認証情報を定義します。別のプロファイルを使用するように設定していない限り、SDK はこのデフォルトプロファイルを使用します。

次の例のように、セッショントークンをプロファイルに追加することで、一時的なセキュリティ認証情報を使用することもできます。

[temp] aws_access_key_id = <YOUR_TEMP_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_TEMP_SECRET_ACCESS_KEY> aws_session_token = <YOUR_SESSION_TOKEN>

認証情報ファイル内のデフォルト以外のプロファイルのセクション名は、profile という単語で始めることはできません。詳細については、「AWS SDK とツールのリファレンスガイド」を参照してください。

設定ファイルの作成

共有認証情報ファイル (.aws/config) がない場合は、任意のテキストエディタを使用してホームディレクトリ内に作成できます。次の内容を設定ファイルに追加し、<REGION> を必要なリージョンに置き換えます。

[default] region = <REGION>

[default] 見出しは、デフォルトプロファイルの設定を定義します。別のプロファイルを使用するように設定していない限り、SDK はこのデフォルトプロファイルを使用します。

次の例のように、名前付きプロファイルを使用することもできます。

[profile named-profile] region = <REGION>

設定ファイル内のデフォルト以外のプロファイルのセクション名は、必ず profile という単語で始まり、その後に目的のプロファイル名が続く必要があります。詳細については、「AWS SDK とツールのリファレンスガイド」を参照してください。

プロファイルの指定

アクセスキーの各セットをプロファイルに関連付けることで、同じ設定ファイルに複数のアクセスキーを含めることができます。例えば、認証情報ファイルでは、次のように複数のプロファイルを宣言できます。

[default] aws_access_key_id = <YOUR_DEFAULT_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_DEFAULT_SECRET_ACCESS_KEY> [test-account] aws_access_key_id = <YOUR_TEST_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_TEST_SECRET_ACCESS_KEY> [prod-account] ; work profile aws_access_key_id = <YOUR_PROD_ACCESS_KEY_ID> aws_secret_access_key = <YOUR_PROD_SECRET_ACCESS_KEY>

デフォルトでは、SDK は AWS_PROFILE 環境変数を確認して、使用するプロファイルを決定します。AWS_PROFILE 変数が設定されていない場合、SDK は defaultプロファイルを使用します。

アプリケーションで別のプロファイルを使用する場合もあります。例えば、test-account アプリケーションで myapp 認証情報を使用する場合です。このようなプロファイルを使用するには、次のコマンドを実行します。

$ AWS_PROFILE=test-account myapp

また、SDK がプロファイルを選択するようにするには、config.LoadDefaultConfig を呼び出す前に os.Setenv("AWS_PROFILE", "test-account") を呼び出すか、次の例のように明示的にプロファイルを引数として渡します。

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithSharedConfigProfile("test-account"))
注記

環境変数で認証情報を指定している場合は、どのプロファイルを指定していても、SDK は常にその環境変数の認証情報を使用します。

環境可変

SDK はデフォルトで、環境に設定された AWS 認証情報を検出し、それを使用して AWS へのリクエストに署名します。この方法では、アプリケーションで認証情報を管理する必要はありません。

SDK は次の環境変数から認証情報を検索します。

  • AWS_ACCESS_KEY_ID

  • AWS_SECRET_ACCESS_KEY

  • AWS_SESSION_TOKEN (オプション)

次の例では、環境変数の設定方法を示しています。

Linux、OS X、Unix

$ export AWS_ACCESS_KEY_ID=YOUR_AKID $ export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY $ export AWS_SESSION_TOKEN=TOKEN

Windows

> set AWS_ACCESS_KEY_ID=YOUR_AKID > set AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY > set AWS_SESSION_TOKEN=TOKEN

認証情報をプログラムで指定する

config.LoadDefaultConfig では、共有設定ソースをロードするときに、明示的な aws.CredentialProvider を指定できます。共有設定をロードするときに明示的な認証情報プロバイダーを渡すには、config.WithCredentialsProvider を使用します。例えば、customProvideraws.CredentialProvider 実装のインスタンスを参照している場合、次のように設定のロード時に渡すことができます。

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithCredentialsProvider(customProvider))

この例のように、明示的に認証情報を指定した場合、SDK はその認証情報のみを使用します。

注記

LoadDefaultConfig との間で受け渡しされるすべての認証情報プロバイダーは CredentialsCache に自動的にラップされます。これにより、スレッドセーフなキャッシュと認証情報のローテーションが可能になります。aws.Config でプロバイダーを直接明示的に設定する場合は、NewCredentialsCache を使用してそのプロバイダーをこの型で明示的にラップする必要があります。

静的な認証情報

credentials.NewStaticCredentialsProvider 認証プロバイダーを利用して、使用するアクセスキーを明示的に設定することで、アプリケーションに認証情報をハードコードすることもできます。例:

cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("AKID", "SECRET_KEY", "TOKEN")), )
警告

ただし、アプリケーション内に認証情報を埋め込まないでください。この方法はテスト目的にのみ使用してください。

シングルサインオン認証情報

SDK では、AWS IAM Identity Center を使用して一時的な AWS 認証情報を取得するための認証情報プロバイダーが提供されています。AWS CLI を使用して、AWS アクセスポータルで認証を行い、一時的な AWS 認証情報へのアクセスを認可します。次に、シングルサインオン (SSO) プロファイルをロードするようにアプリケーションを設定します。SDK は SSO 認証情報を使用して一時的なAWS 認証情報を取得します。この一時的な認証情報は、有効期限が切れた場合、自動的に更新されます。ただし、SSO 認証情報自体の有効期限が切れた場合は、AWS CLI を使用して IAM Identity Center に再度ログインし、明示的に認証情報を更新する必要があります。

例えば、dev-profile というプロファイルを作成し、AWS CLI を使用してそのプロファイルを認証して認可し、次のようにアプリケーションを設定できます。

  1. まず、profilesso-session を作成します。

[profile dev-profile] sso_session = dev-session sso_account_id = 012345678901 sso_role_name = Developer region = us-east-1 [sso-session dev-session] sso_region = us-west-2 sso_start_url = https://company-sso-portal.awsapps.com/start sso_registration_scopes = sso:account:access
  1. 次に、AWS CLI を使用してログインし、SSO プロファイルを認証して認可します。

$ aws --profile dev-profile sso login Attempting to automatically open the SSO authorization page in your default browser. If the browser does not open or you wish to use a different device to authorize this request, open the following URL: https://device.sso.us-west-2.amazonaws.com/ Then enter the code: ABCD-EFGH Successully logged into Start URL: https://company-sso-portal.awsapps.com/start
  1. その後、SSO プロファイルを使用するようにアプリケーションを設定します。

import "github.com/aws/aws-sdk-go-v2/config" // ... cfg, err := config.LoadDefaultConfig( context.Background(), config.WithSharedConfigProfile("dev-profile"), ) if err != nil { return err }

SSO プロファイルの設定と AWS CLI を使用した認証の詳細については、AWS CLI ユーザーガイドの「AWS IAM Identity Center を使用するように AWS CLI を設定する」を参照してください。SSO 認証情報プロバイダーをプログラムで作成する方法の詳細については、「ssocreds API リファレンスドキュメント」を参照してください。

その他の認証情報プロバイダー

SDK には、credentials モジュール内で他にもさまざまな認証情報取得方法が提供されています。例えば、AWS Security Token Service から一時的なセキュリティ認証情報を取得したり、暗号化ストレージから認証情報を取得したりできます。

使用可能な認証情報プロバイダー:

  • ec2rolecreds – Amazon EC2 IMDS 経由で、Amazon EC2 インスタンスロールから認証情報を取得します。

  • endpointcreds – 任意の HTTP エンドポイントから認証情報を取得します。

  • processcreds – ホスト環境のシェルで実行される外部プロセスから認証情報を取得します。

  • stscreds – AWS STS から認証情報を取得します。