AWS SSOとAWS CLI V2
AWS CLI V2ではプロファイルにAWS SSOフォーマットを選択することができます。
[profile abc]
sso_start_url = https://your-company.awsapps.com/start
sso_region = us-west-2
sso_account_id = 1234567890
sso_role_name = AdministratorAccess
region = ap-northeast-1
これにより秘匿情報(secret key)を ~/.aws/credentials
へ書く必要がなくなりました。
それだけではなく複数のAWSアカウントをAWS SSOで集中管理している場合は個別のAWSアカウントでIAMユーザーを作る必要もありません。
AWS SSOでAWSマネージメントコンソールとaws cliの実行権限を一貫した方法で一挙に管理することができます。バンザイ!
AWS SSOの問題
ところが、この新しいプロファイルの方式はaws cli v2以外のツールではほとんどサポートされていません。
ツール | issue |
---|---|
terraform |
Support AWS CLI v2 AWS Single Sign-On · Issue #10851 · terraform-providers/terraform-provider-aws (2021/01/29)サポートされました! > Support for AWS Single-Sign On (SSO) cached credentials has been merged and will release with version 3.26.0 of the Terraform AWS Provider later today. |
sam cli |
Should sam local support named profiles created by aws cli v2 sso commands? · Issue #1843 · awslabs/aws-sam-cli (2020/09/30) サポートされました! > sriram-mv commented 5 hours ago > Resolving this issue as latest release has the supported boto3 versions. |
mssh (EC2 Instance Connect) |
AWS SSO Support does not work · Issue #17 · aws/aws-ec2-instance-connect-cli (2021/11/10)サポートされたようです。 https://github.com/aws/aws-ec2-instance-connect-cli/issues/17#issuecomment-964560769 |
serverless framework |
Add support for AWS CLI v2 SSO profiles · Issue #7567 · serverless/serverless (2023/09/04)次の回避策がありました: thomasmichaelwallace/serverless-better-credentials: Better AWS credentials resolution plugin for serverless |
各Issueを見てもらえばわかりますがなかなか難航しているようです。単純にAWS SSOをフル活用しているところが少なく需要が少ないということもありますが、aws-sdkのメジャーバージョンが変わったり認証周りのコードに変更が加わったりで対応に大きなコストがかかることが背景にあるようです。2,3ヶ月以上経ってもことが前に進んでいる気配がないことからすぐの対応は期待できそうにないことが伺えます。
解決策: aws2-wrapツールを使う
linaro-its/aws2-wrap: Simple script to export current AWS SSO credentials or run a sub-process with them
このツールを使ってterraformやsamの実行をラップしてやると、それらコマンドの実行直前にaws ssoプロファイルから一時的な認証トークンを生成してくれます。いわば新しい認証方式から古い認証方式への翻訳機の役割を果たしてくれるわけですね。