aws login利用時にデフォルトプロファイルにcredential_processをつけるとログインできない事象と回避方法

aws login利用時にデフォルトプロファイルにcredential_processをつけるとログインできない事象と回避方法

Terraformでaws loginを使う際、デフォルトプロファイルにcredential_processを設定するとエラーが発生する問題と、その原因・回避方法を紹介します。
2026.08.21

はじめに

皆様こんにちは、あかいけです。

最近Terraformの認証にaws loginを使うために、デフォルトプロファイルへcredential_processを設定していました。
ただこの状態でaws loginを実行しようとすると、エラーで弾かれてしまいました。

今回はその原因と回避方法を記事にまとめます。



aws loginでTerraformを使うには

aws loginは、AWSマネジメントコンソールのサインイン情報を使って、CLIやSDK向けの一時認証情報を取得できるコマンドです。
AWS CLI 2.32.0以降で使え、ログインするとプロファイルにlogin_sessionが書き込まれます。

~/.aws/config
[default]
login_session = arn:aws:iam::0123456789012:user/username
region = ap-northeast-1

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sign-in.html

次にTerraformのAWS Providerは、内部でAWS SDK for Goを使って認証情報を解決します。
しかしaws loginが登場した当初は、Providerがこのlogin_session(aws loginが書き込む設定)を認識できず、取得した認証情報をTerraformからそのまま読み取れませんでした。

そのため当時は、aws loginのセッションをTerraformへ橋渡しするためにcredential_processを使うのが定番でした。
credential_processaws configure export-credentialsを指定しておくと、Providerが認証情報を要求するたびにCLIがaws loginのセッションから一時認証情報をエクスポートして渡してくれます)

事象

デフォルトプロファイルにcredential_processを設定していました。

~/.aws/config
[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_idrole_arn、SSO関連の設定など)が設定されていると、処理を中断してしまうため、ログインが失敗していました。
AWS CLIのソースコードを見ると、これらの既存の認証情報は解決時にaws loginが書き込むlogin_sessionより優先順位が高いため、と説明されています。

https://github.com/aws/aws-cli/blob/9e298abd76670e367c0c26d58d731c80ef559997/awscli/customizations/login/login.py#L98-L100

なお今回の設定はcredential_process--profile defaultと自分自身を参照しており、仮にログインできたとしても解決がループしてしまう形でした。そこもあわせて見直す必要があります。

対処方法

案1:最新バージョンを使い、credential_processをやめる(おすすめ)

冒頭でも記載しまいたがその後アップデートが入り、現在はaws loginの認証情報にTerraform側がネイティブ対応しています。
ただし対応時期がProviderとバックエンドで分かれているので、使っているバックエンドで必要バージョンが変わります。

S3 backendはProviderとは別に(terraformバイナリ内蔵のSDKで)独自に認証情報を解決します。
そのため必要バージョンは次のとおりです。

バックエンド 必要バージョン
ローカル Provider 6.23.0以降のみ
S3 Provider 6.23.0以降 かつ Terraform 1.15.0以降

いずれの場合もcredential_processの設定は不要で、ログイン用プロファイルでaws loginできます。

~/.aws/config
[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など)からそれを参照させます。

~/.aws/config
[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 成功後に追記される

https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html
https://docs.aws.amazon.com/cli/latest/reference/configure/export-credentials.html

そのうえで、ログイン専用プロファイル(signin)でログインします。

$ aws login --profile signin

こうするとaws login --profile signincredential_processを持たないプロファイルに対する実行なので成功します。
またdefaultcredential_process経由でsigninの一時認証情報を共有できるため、login_sessionに対応していない古いバージョンのTerraformや他ツールからも利用できます。

なおaws loginのトークンが有効な間は、credential_processが呼ばれるたびにsigninの認証情報が使われ、CLIが自動で更新してくれます。
そのためaws login --profile signinで一度ログインしておけば、あとはdefaultプロファイルでそのままterraformを実行できます。

さいごに

以上、aws login利用時にデフォルトプロファイルへcredential_processをつけるとログインできない事象と、その回避方法でした。

エラーの原因自体は、login_sessioncredential_processは同じプロファイルに同居できない仕様だったためでした。
またバージョンを上げられるならcredential_processをやめてしまうのが一番すっきりするので、まずはお使いのバージョンを確認してみてください。

同じ事象で困っている方の助けになれば幸いです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事