aws login で CDK をデプロイしたら「no credentials have been configured」になったので回避策をまとめてみた
はじめに
こんにちは、クラスメソッドオペレーションズの watabo です。
久しぶりに小規模なツールの開発をやることになりましたが、慣れてないと変なところでハマります。
今回は GitHub Actions の自動デプロイ用に CDK スタックを手元から初回デプロイしようとしたところ、aws sts get-caller-identity は通るのに cdk deploy だけが認証エラーで落ちる、という現象にハマりました。
原因は比較的新しい認証の仕組み aws login と CDK の相性でした。
同じくハマる人がいそうなので、原因と回避策をまとめてみます。
最初に結論
CDK CLI 2.1125.0 以降にアップデートすれば解消します。
npm install -g aws-cdk@latest
古いバージョンの CDK CLI を使い続ける必要がある場合は、後述の export-credentials を使った回避策が有効です。
環境
- AWS CLI v2.32.1
- AWS CDK CLI 2.1032.0 / Node.js v24(問題が発生したバージョン)
- Python 3.x (venv)
- 認証方式:
aws login
aws login とは
2025年11月に登場した、ローカルでの新しいAWS認証の仕組みです。ブラウザベースでログインするため、アクセスキーをローカルに平文保管せずに済みます。
認証すると ~/.aws/config に login_session(IAMユーザーのARN)が追記され、一時トークンは ~/.aws/login/cache にキャッシュされます。
なぜ CDK だけ落ちるのか
ポイントは「CLI と SDK で認証情報の解決経路が違う」ことです。
aws sts get-caller-identity は問題なく通ります。
$ aws sts get-caller-identity
{
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/watabo"
}
一方、CDK CLI の中身は AWS SDK for JavaScript v3(aws-sdk-js-v3)で、古いバージョンは ~/.aws/login/cache 形式を読めないため「認証情報なし」と判断します。同様の問題は Terraform でも報告されており、新しい認証サービスに各 SDK の対応が追いついていない過渡期ならではの現象です。
aws-sdk-js-v3 は v3.936.0(2025年11月19日)で aws login 向けの credential provider が追加され、CDK CLI 2.1125.0 でこの修正が取り込まれています。
回避策: CDK CLI をアップデートする
まず CDK CLI を最新バージョンに更新してみてください。
npm install -g aws-cdk@latest
cdk --version # 2.1125.0 以降であることを確認
これで aws login の認証情報をそのまま使ってデプロイできるようになります。
古いバージョン向け回避策: export-credentials で環境変数に橋渡し
CDK CLI のバージョンを上げられない場合は、aws configure export-credentials --format env を使います。CLI が解決済みの認証情報を export 文として出力してくれます。
$ aws configure export-credentials --format env
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
export AWS_CREDENTIAL_EXPIRATION=2026-06-19T11:39:26+00:00
これを eval で評価すれば、JS SDK が環境変数から認証情報を読めるようになります。Python の CDK プロジェクトの場合は、venv の有効化とあわせて以下の1行でデプロイが通ります。
source .venv/bin/activate && \
eval "$(aws configure export-credentials --format env)" && \
cdk deploy --require-approval never
毎回打ちたくない場合は、~/.aws/config のプロファイルに credential_process を設定して export-credentials を呼ばせる方法もあります。
[profile myprofile]
credential_process = aws configure export-credentials --format process
SDK が起動時に credential_process を実行して認証情報を受け取ります。詳細は AWS CLI ドキュメント - credential_process を参照してください。
ハマったついでの罠: アカウント・リージョン未解決
認証情報とは別に、CDK_DEFAULT_ACCOUNT / CDK_DEFAULT_REGION が空でスタックが「環境非依存」になり、Unable to resolve AWS account to use も出ました。これはデプロイ時に明示すれば回避できます。
export CDK_DEFAULT_ACCOUNT=123456789012
export CDK_DEFAULT_REGION=ap-northeast-1
おわりに
aws login はアクセスキーを手元に置かずに済む便利な仕組みです。CDK CLI を最新に保っていれば問題なく使えますが、バージョンを固定している環境では aws configure export-credentials での橋渡しを思い出してください。(私はあまり使いませんが・・・)




