IAMユーザーとIAM Identity Centerユーザーとでは、Terraformの設定が異なる。
IAM Identity CenterユーザーでTerraformが使えるところまでの設定を行う。
0. 現状
terraform plan
コマンド実行時に、ExpiredToken
エラーが出る
% t plan
Planning failed. Terraform encountered an error while generating this plan.
╷
│ Error: Retrieving AWS account details: validating provider credentials: retrieving caller identity from STS: operation error STS: GetCallerIdentity, https response error StatusCode: 403, RequestID: 4ef0e1b2-c5f4-4e6d-902e-ac9493df32f1, api error ExpiredToken: The security token included in the request is expired
│
│ with provider["registry.terraform.io/hashicorp/aws"],
│ on main.tf line 1, in provider "aws":
│ 1: provider "aws" {
│
╵
%
1. 修正
1-1. AWS CLI 設定ファイルの編集
~/.aws/config
ファイルを開き、以下の設定を追記
[sso-session tf-sso]
sso_region = us-east-1
sso_start_url = https://************.awsapps.com/start/#
[profile tf-sso_profile]
sso_session = tf-sso
sso_account_id = *************
sso_role_name = AdministratorAccess
Code language: JavaScript (javascript)
1-2. SSO ログイン
AWS CLIで、設定済みのプロファイル(例:tf-sso)でSSOログインを行う。
% aws sso login --sso-session tf-sso
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-east-1.amazonaws.com/
Then enter the code:
QJZV-ZFTT
コマンドを実行するとブラウザが自動的に開くのでログインを完了させる。

ログインが成功すると、CLIに認証情報がキャッシュされる
1-3. プロファイルの環境変数設定
環境変数を設定して、Terraformで指定したプロファイルの認証情報を使用する(ユーザーtf-test-user
のプロファイルを使用)
% export AWS_PROFILE="tf-sso_profile"
1-4. Terraform 実行
terraform planコマンドを実行して、AWSプロバイダーへの認証が通ることを確認する。
% terraform init
% terraform plan
参考サイト

Tips
~/.aws/config と ~/.aws/credentials ファイルの違いまとめ
ファイル名 | 主な用途 | 主な内容 |
~/.aws/config | 設定ファイル | リージョン、出力形式、プロファイル設定 |
~/.aws/credentials | 認証情報 | アクセスキー ID とシークレットキー |
Terraform の provider "aws"
ブロック内で指定する profile の値でプロファイルを設定する。
SSOを使う場合は、 ~/.aws/credentials の設定は不要。
背景: ~/.aws/credentials の役割
通常、AWS CLIは以下の認証情報を利用してAWSにアクセスする:
aws_access_key_id
: アクセスキーIDaws_secret_access_key
: シークレットアクセスキー- (オプション)
aws_session_token
: 一時的なセッショントークン
これらの認証情報を ~/.aws/credentials
に保存することで、CLIツールがそれを参照して認証する。
SSOの場合の違い
SSOを利用する場合は、アクセスキーやシークレットキーを使用しません。代わりに、AWS IAM Identity Centerで設定されたSSO認証情報を使ってセッションを確立します。この仕組みには以下の特徴があります:
SSOログインで取得される一時認証情報は、自動的にAWS CLIのキャッシュフォルダに保存されます。
アクセスキー不要
AWS CLIは、ブラウザを通じてAWS IAM Identity Centerで認証します。認証後、AWS CLIはローカルに一時的な認証情報(キャッシュ)を保存します。
認証情報の管理が簡単
アクセスキーやシークレットキーをローカルに保存しないため、セキュリティリスクが低減します。IAM Identity Centerでユーザー管理やロール付与を行うため、個別のアクセスキー発行が不要です。
~/.aws/config に設定がまとめられる
SSOを利用する場合、必要な情報は ~/.aws/config
に記述します。
参考:

~/.aws/config ファイルの記述形式(SSOの場合)
[sso-session tf-sso]
sso_region = us-east-1
sso_start_url = https://************.awsapps.com/start/#
[profile tf-sso_profile]
sso_session = tf-sso
sso_account_id = *************
sso_role_name = AdministratorAccess
Code language: JavaScript (javascript)
1. [sso-session tf-sso]
このセクションはSSO(シングルサインオン)セッションの情報を定義します。
設定項目 | 説明 |
---|---|
sso-session | セッションの名前。プロファイルでこの名前を参照します。 |
sso_region | AWS Identity Center(SSO)が設定されているリージョン。 |
sso_start_url | AWS Identity Center(SSO)のスタートURL(組織固有)。ブラウザログインの入口となります。 |
2. [profile tf-sso_profile]
このセクションはAWS CLIで使用するプロファイルを定義します。
設定項目 | 説明 |
---|---|
profile | プロファイル名。この名前でAWS CLIからプロファイルを指定します。 |
sso_session | 使用するSSOセッションの名前([sso-session tf-sso] の名前を指定)。 |
sso_account_id | アクセスするAWSアカウントのID。 |
sso_role_name | AWS Identity Centerで割り当てられたロール名(例: AdministratorAccess )。 |