Terraform S3 Backend で aws login 認証が使えるか検証してみた
はじめに
どうも、わんこ大好きあきやまです。
2025年11月にAWSから発表された aws login コマンドは、AWSマネジメントコンソールの認証情報をそのままCLI/SDKで使えるようにする仕組みです。長期アクセスキーが不要になり、セキュリティ的にも安心して利用することができます。
ただし、Terraform の S3 Backend では長らくこの認証方式がサポートされていませんでした。ただ、直近アップデートがあったようなので実際利用できるか確認していきたいと思います。
環境
| 項目 | 値 |
|---|---|
| OS | macOS Sequoia 26.3 |
| Terraform | v1.15.4 |
| AWS CLI | v2.32.32 |
| AWS Provider | v6.23.0 以上 |
| リージョン | ap-northeast-1 |
※ aws login には AWS CLI v2.32.0 以上が必要です。
※ S3 Backend での aws login 認証には Terraform v1.15.0 以上が必要です。
結論
| 項目 | 結果 |
|---|---|
aws login で認証 |
✅ 成功 |
S3 Backend terraform init |
✅ 成功 |
terraform plan |
✅ 成功 |
terraform apply |
✅ 成功 |
Terraform v1.15.0 以上であれば、aws login で取得した認証情報のみで S3 Backend が問題なく動作することを確認しました。v1.14 系では No valid credential sources found エラーとなり、S3 Backend では利用できませんでした。
背景: aws login とは
aws login は AWS CLI v2.32.0 で導入された認証コマンドです。従来の認証方式との違いを整理します。
- 従来: IAMアクセスキー(長期)or SSO(
aws sso login) - aws login: マネジメントコンソールのユーザー名/パスワードで認証 → 一時クレデンシャルを自動取得
認証情報は ~/.aws/login/cache/ に保存され、AWS SDK が自動で読み取ります。
Terraform での対応状況
| コンポーネント | 対応バージョン | 対応内容 |
|---|---|---|
| AWS CLI | v2.32.0+ | aws login コマンド追加 |
| AWS Provider | v6.23.0+ | Provider認証(plan/apply)で aws login 認識 |
| Terraform CLI | v1.15.0+ | S3 Backend 認証で aws login 認識 |
v1.15.0 未満の Terraform では、S3 Backend の terraform init 時に No valid credential sources found エラーが発生します。
認証フロー
aws login を使った Terraform S3 Backend の認証は、以下の流れで処理されます。
ポイントは、aws login で取得したクレデンシャルが ~/.aws/login/cache/ に保存され、Terraform が S3 Backend 接続時と Provider の API コール時の両方で同じキャッシュから自動的に読み取る点です。環境変数やプロファイル指定は不要です。
事前準備
Terraform のアップグレード
v1.15.0 以上が必須です。
# tenv を使っている場合
tenv tf install 1.15.4
tenv tf use 1.15.4
# バージョン確認
terraform version
Terraform v1.15.4
on darwin_arm64
aws login の実行
aws login
実行するとデフォルトブラウザが開き、AWSマネジメントコンソールのサインインページが表示されます。

サインイン完了後、ターミナルに以下のようなメッセージが表示されます。
Updated profile default to use arn:aws:sts::XXXXXXXXXXXX:assumed-role/your-role/verification credentials.
※ IAM ユーザーのユーザー名とパスワードが必要です。MFA が有効な場合は MFA コードも求められます。
認証後、クレデンシャルが正しく取得できているか確認します。
aws sts get-caller-identity
{
"UserId": "AROAXXXXXXXXXXXXXXXXX:verification",
"Account": "XXXXXXXXXXXX",
"Arn": "arn:aws:sts::XXXXXXXXXXXX:assumed-role/your-role/verification"
}
やってみた
Step 1: S3 バケットの準備
State ファイル保存用の S3 バケットを用意します。既存のバケットがあればそれを使って構いません。
aws s3 mb s3://my-terraform-state-bucket-XXXX --region ap-northeast-1
make_bucket: my-terraform-state-bucket-XXXX
Step 2: Terraform 設定ファイルの作成
S3 Backend を使う最小構成を用意します。
terraform {
required_version = ">= 1.15.0"
backend "s3" {
bucket = "my-terraform-state-bucket-XXXX"
key = "aws-login-test/terraform.tfstate"
region = "ap-northeast-1"
}
required_providers {
aws = {
source = "hashicorp/aws"
version = ">= 6.23.0"
}
}
}
provider "aws" {
region = "ap-northeast-1"
}
# 検証用の簡単なリソース
data "aws_caller_identity" "current" {}
output "account_id" {
value = data.aws_caller_identity.current.account_id
}
ポイントは、provider ブロックに access_key や profile を一切指定しないことです。aws login のクレデンシャルが自動的に使われることを確認します。
Step 3: terraform init
# AWS_PROFILE や AWS_ACCESS_KEY_ID 等の環境変数がセットされていないことを確認
unset AWS_PROFILE AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_SESSION_TOKEN
terraform init
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Initializing provider plugins...
- Finding hashicorp/aws versions matching ">= 6.23.0"...
- Installing hashicorp/aws v6.46.0...
- Installed hashicorp/aws v6.46.0 (signed by HashiCorp)
Terraform has been successfully initialized!
環境変数やプロファイル指定なしで、aws login のクレデンシャルのみで S3 Backend の初期化に成功しました。
Step 4: terraform plan
terraform plan
data.aws_caller_identity.current: Reading...
data.aws_caller_identity.current: Read complete after 0s [id=XXXXXXXXXXXX]
Changes to Outputs:
+ account_id = "XXXXXXXXXXXX"
You can apply this plan to save these new output values to the Terraform
state, without changing any real infrastructure.
Step 5: terraform apply
terraform apply
data.aws_caller_identity.current: Reading...
data.aws_caller_identity.current: Read complete after 0s [id=XXXXXXXXXXXX]
Changes to Outputs:
+ account_id = "XXXXXXXXXXXX"
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
account_id = "XXXXXXXXXXXX"
account_id が正しく出力されました。aws login の認証情報のみで plan / apply ともに問題なく動作しています。
Step 6: S3 上の state ファイル確認
aws s3 ls s3://my-terraform-state-bucket-XXXX/aws-login-test/
2026-05-22 15:39:55 859 terraform.tfstate
S3 上に state ファイルが保存されていることを確認できました。
v1.14 との比較検証
aws login で認証した状態で、v1.14 系と v1.15 系の挙動を比較します。
# v1.14 で init(失敗するはず)
tenv tf use 1.14.3
terraform init
Error: No valid credential sources found
Please see https://developer.hashicorp.com/terraform/language/backend/s3
for more information about providing credentials.
Error: failed to refresh cached credentials, no EC2 IMDS role found,
operation error ec2imds: GetMetadata, request canceled, context deadline
exceeded
予想通り、v1.14.3 では aws login のクレデンシャルを認識できず、No valid credential sources found エラーとなりました。
# v1.15 で init(成功するはず)
tenv tf use 1.15.4
terraform init
Initializing the backend...
Successfully configured the backend "s3"! Terraform will automatically
use this backend unless the backend configuration changes.
Terraform has been successfully initialized!
v1.15.4 では問題なく初期化に成功します。この差が Terraform v1.15.0 で追加された aws login サポートの効果です。
注意点・制約
aws loginのセッションには有効期限があります。期限切れ後は再度aws loginが必要です- CI/CD 環境ではインタラクティブなログインが必要なため、
aws loginは使えません。ローカル開発向けの機能です - DynamoDB によるステートロックとの組み合わせは今回未検証です。別途検証予定です
- v1.14 系では
required_version制約がなくてもNo valid credential sources foundエラーとなるため、バージョンアップが必須です
まとめ
- Terraform v1.15.0 以上 + AWS CLI v2.32.0 以上で、
aws loginによる S3 Backend 認証が可能 - 長期アクセスキーの管理から解放され、ローカル開発の認証がシンプルになった
- Provider ブロックに
access_keyやprofileの指定は不要。aws loginで認証するだけで S3 Backend も Provider も自動的にクレデンシャルを取得する - v1.14 系からのアップグレードは必須。S3 Backend の認証部分が
aws loginのキャッシュを読めるようになったのは v1.15.0 から
aws login によるローカル開発体験の改善は、セキュリティと利便性の両立という観点で嬉しいアップデートですね。参考になれば幸いです。






