aws login利用時にデフォルトプロファイルにcredential_processをつけるとログインできない事象と回避方法
はじめに
皆様こんにちは、あかいけです。
最近Terraformの認証にaws loginを使うために、デフォルトプロファイルへcredential_processを設定していました。
ただこの状態でaws loginを実行しようとすると、エラーで弾かれてしまいました。
今回はその原因と回避方法を記事にまとめます。
- Provider: https://github.com/hashicorp/terraform-provider-aws/issues/45316
- Terraform本体(S3 backend): https://github.com/hashicorp/terraform/issues/37976
aws loginでTerraformを使うには
aws loginは、AWSマネジメントコンソールのサインイン情報を使って、CLIやSDK向けの一時認証情報を取得できるコマンドです。
AWS CLI 2.32.0以降で使え、ログインするとプロファイルにlogin_sessionが書き込まれます。
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = ap-northeast-1
次にTerraformのAWS Providerは、内部でAWS SDK for Goを使って認証情報を解決します。
しかしaws loginが登場した当初は、Providerがこのlogin_session(aws loginが書き込む設定)を認識できず、取得した認証情報をTerraformからそのまま読み取れませんでした。
そのため当時は、aws loginのセッションをTerraformへ橋渡しするためにcredential_processを使うのが定番でした。
(credential_processにaws configure export-credentialsを指定しておくと、Providerが認証情報を要求するたびにCLIがaws loginのセッションから一時認証情報をエクスポートして渡してくれます)
事象
デフォルトプロファイルにcredential_processを設定していました。
[default]
region = ap-northeast-1
credential_process = aws configure export-credentials --profile default
この状態でaws loginを実行すると、以下のエラーで失敗します。
$ aws login
aws: [ERROR]: An error occurred (Configuration): Profile 'default' is already configured with Credential Process credentials.
You may run 'aws login --profile new-profile-name' to create a new profile with the specified name. Otherwise you must first manually remove the existing credentials from 'default'.
原因
aws loginは、対象プロファイルに既にcredential_process(やaws_access_key_id、role_arn、SSO関連の設定など)が設定されていると、処理を中断してしまうため、ログインが失敗していました。
AWS CLIのソースコードを見ると、これらの既存の認証情報は解決時にaws loginが書き込むlogin_sessionより優先順位が高いため、と説明されています。
なお今回の設定はcredential_processが--profile defaultと自分自身を参照しており、仮にログインできたとしても解決がループしてしまう形でした。そこもあわせて見直す必要があります。
対処方法
案1:最新バージョンを使い、credential_processをやめる(おすすめ)
冒頭でも記載しまいたがその後アップデートが入り、現在はaws loginの認証情報にTerraform側がネイティブ対応しています。
ただし対応時期がProviderとバックエンドで分かれているので、使っているバックエンドで必要バージョンが変わります。
- AWS Provider: v6.23.0(2025年11月26日)以降で
aws loginに対応 - S3 backend: Terraform本体 v1.15.0(2026年4月29日)以降で
aws loginに対応
S3 backendはProviderとは別に(terraformバイナリ内蔵のSDKで)独自に認証情報を解決します。
そのため必要バージョンは次のとおりです。
| バックエンド | 必要バージョン |
|---|---|
| ローカル | Provider 6.23.0以降のみ |
| S3 | Provider 6.23.0以降 かつ Terraform 1.15.0以降 |
いずれの場合もcredential_processの設定は不要で、ログイン用プロファイルでaws loginできます。
[default]
region = ap-northeast-1
login_session = arn:aws:iam::0123456789012:user/username # aws login 成功後に追記される
結論としてそもそもcredential_processを書かないので、今回のエラーも起きません。
そのためまずはバージョンを上げられないか確認するのがおすすめです。
案2:バージョンを上げられない場合はプロファイルを分ける
古いProvider/Terraformを使い続けていてcredential_processを利用する必要がある場合、ログイン用とcredential_process用でプロファイルを分けることでエラーを回避できます。
aws login専用のプロファイルを用意し、credential_process側はそのプロファイルを参照させる構成です。
ログイン専用のプロファイル(ここではsignin)を用意し、credential_processを使いたいプロファイル(defaultなど)からそれを参照させます。
[default]
region = ap-northeast-1
credential_process = aws configure export-credentials --profile signin # あらかじめ記載しておく
[profile signin]
region = ap-northeast-1
login_session = arn:aws:iam::0123456789012:user/username # aws login 成功後に追記される
そのうえで、ログイン専用プロファイル(signin)でログインします。
$ aws login --profile signin
こうするとaws login --profile signinはcredential_processを持たないプロファイルに対する実行なので成功します。
またdefaultはcredential_process経由でsigninの一時認証情報を共有できるため、login_sessionに対応していない古いバージョンのTerraformや他ツールからも利用できます。
なおaws loginのトークンが有効な間は、credential_processが呼ばれるたびにsigninの認証情報が使われ、CLIが自動で更新してくれます。
そのためaws login --profile signinで一度ログインしておけば、あとはdefaultプロファイルでそのままterraformを実行できます。
さいごに
以上、aws login利用時にデフォルトプロファイルへcredential_processをつけるとログインできない事象と、その回避方法でした。
エラーの原因自体は、login_sessionとcredential_processは同じプロファイルに同居できない仕様だったためでした。
またバージョンを上げられるならcredential_processをやめてしまうのが一番すっきりするので、まずはお使いのバージョンを確認してみてください。
同じ事象で困っている方の助けになれば幸いです。








