vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS CDK を AWS SSO で利用

cdk deploy, cdk diff 実行時に以下のエラーに遭遇しました。 実行対象のAWSアカウントへは AWS SSO を利用してアクセスしている環境でした。

Unable to resolve AWS account to use. It must be either configured when you define your CDK or through the environment

debug log 出力(--verbose) してみると下記エラー。

Unable to determine the default AWS account: ProcessCredentialsProviderFailure: Profile xxxxx did not include credential process

誤設定を疑って調べていたのですが、aws cli 実行は問題なく行え、cdk doctor でも正しい値を返していました。

原因

現時点で cdk では Named Profile をサポートしていないようです。

~/.aws/credentials への設定がある形式でないと認識できないようです。

対処

上記Issueの中でいくつか回避策が提示されています。

aws-export-credentialsaws-sso-credential-process を利用する方式を使わせてもらおうと思ったのですが、 aws-sso-util に組み込まれているとのことなので、こちらを利用します。

インストール

記載の手順通りにインストールします。

brew install pipx
pipx ensurepath
pipx install aws-sso-util
  • 確認
~ % pipx list
venvs are in /Users/xxxxx/.local/pipx/venvs
apps are exposed on your $PATH at /Users/xxxxx/.local/bin
   package aws-sso-util 4.25.0, Python 3.9.5
    - aws-sso-util
~ % aws-sso-util --version
4.25.0

関数設定

~/.zshrc などで読み込ませます。 AWS_CONFIGURE_SSO_DEFAULT_* の値は適宜変更します。

export AWS_CONFIGURE_SSO_DEFAULT_SSO_START_URL=https://xxxxx.awsapps.com/start
export AWS_CONFIGURE_SSO_DEFAULT_SSO_REGION=us-east-1

実行

  • ~/.aws/config
    • AWS SSO 向け設定がしてある状態
    • credential_process を追加
[profile xxxxx]
sso_start_url= https://xxxxx.awsapps.com/start
sso_region=ap-northeast-1
sso_account_id=123456789012
sso_role_name=XXXXX
credential_process = aws-sso-util credential-process --profile xxxxx
  • sso login
aws-sso-util login

# もしくは
#aws sso login --profile XXXXX

以上で正常に cdk コマンド正常が行えました。

いずれ cdk 側で正式にサポートされると思いますが、当面はこちらの方法を利用したいと思います。

aws-export-credentials

If you try this and your tools still don't work with the credentials, you can get the credentials themselves using aws-export-credentials, which can also inject them as environment variables for your program.

今回は aws-sso-util のみで必要十分だったのですが、せっかくなので載せておきます。

# インストール
pipx install aws-export-credentials
aws-export-credentials --version

# 環境変数設定
eval $(aws-export-credentials --env-export)
#eval $(aws-export-credentials --profile XXXXX --env-export) 

# 確認
env | grep AWS