Tagbangers Blog

awsp を使って awscli で使用する profile を手軽に切り替える

今日はコマンドラインでの作業効率をあげるための便利ツール、awsp の紹介です。

タグバンではこの頃、AWSのログイン方法を、AWS Single Sign-On に統一しました。

ログイン先としては、AWS Organizations で管理しているお客さんのアカウントや各社員に配布している検証用(sandbox)アカウントです。

管理者目線では、認証の有効期限の設定や、ユーザーの権限の制御を一元管理できて便利です。

一方で利用者目線としては SSO で認証後に、以下のような方法で複数のアカウントを切り替えて作業する際には手間に感じることもありました。

  • 作業シェルごとに使用するアカウントの環境変数を設定して作業する
    • direnv を使用するとディレクトリと環境変数を紐付けられるので少しは楽になるが...
  • もしくは profile を指定してコマンドを実行

awsp をつかってみる

aws cli 実行に使用する profile を簡単に切り替えられるツールです。選択した profile の情報で awscli が実行できるようになります。

README の通りにさくっとインストールします。

npm install -g awsp
alias awsp="source _awsp"

profile を切り替えるツールなので、当然 profile は登録しておく必要があります。

$ aws configure sso --profile [profile_name]
 
SSO start URL [None]: https://test.sso.com/start
SSO Region [None]: your_sso_region
There are 21 AWS accounts available to you.
Using the account ID account_id
The only role available to you is: account_role
Using the role name "account_role"
CLI default client Region [None]: ap-northeast-1
CLI default output format [None]: json
CLI profile name [dev-012345678901]: profile_name

awscli を使用して SSO のログインを済ませておきます。(ブラウザが立ち上がり認証を求められます)

$ aws sso login --profile sandbox

Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.us-east-1.amazonaws.com/

Then enter the code:

で awsp を使用してみると 対話シェルで profile の切り替えができます。

$ awsp
? Choose a profile (Use arrow keys)
❯ sandbox
  account-a
  account-b
  default
? Choose a profile sandbox

※この時に参照している profile の情報は、ホームディレクトリにあります

$ cat .aws/config

[profile sandbox]
sso_start_url = https://test.sso.com/start
sso_region = us-east-1
sso_account_id = 123456789012
sso_role_name = admin
region = ap-northeast-1
output = json

[profile account-a]
sso_start_url = https://test.sso.com/start
sso_region = us-east-1
sso_account_id = 23456789013
sso_role_name = dev
region = ap-northeast-1
output = json

[profile account-b]
sso_start_url = https://test.sso.com/start
sso_region = us-east-1
sso_account_id = 3456789014
sso_role_name = ops
region = ap-northeast-1
output = json

選択した profile が環境変数に設定されているため profile の指定無しにコマンド実行が可能になります。

$ echo $AWS_PROFILE
sandbox

$ aws s3 ls --profile sandbox | grep sandbox
2020-06-08 11:27:29 sandbox


$ aws s3 ls | grep sandbox
2020-06-08 11:27:29 sandbox


まとめ

  • awsp は対話シェルで profile を切り替えて awscli を実行できるためとても便利
  • 作業ミスに注意して、aws s3 ls してからオペレーションしよう!