aws login で CDK をデプロイしたら「no credentials have been configured」になったので回避策をまとめてみた

aws login で CDK をデプロイしたら「no credentials have been configured」になったので回避策をまとめてみた

アップデートしたら一発解決する系のお話です
2026.06.19

はじめに

こんにちは、クラスメソッドオペレーションズの 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/configlogin_session(IAMユーザーのARN)が追記され、一時トークンは ~/.aws/login/cache にキャッシュされます。

https://dev.classmethod.jp/articles/aws-login-switch-role/

なぜ 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 の対応が追いついていない過渡期ならではの現象です。

https://github.com/hashicorp/terraform-provider-aws/issues/45316

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 での橋渡しを思い出してください。(私はあまり使いませんが・・・)

参考リンク

この記事をシェアする

関連記事