1年以上前からの久しぶりのアップデートです。
--role-arn
--source-profile
複数のAWSアカウントを横断して作業することがあり、AssumeRoleのための設定を~/.aws/(config|credentials)に書くのすら面倒になってきたので、設定なしでAssumeRoleができるようにするためのオプション --role-arn
と --source-profile
を追加しました。
委任元のアカウントAのロール arn:aws:iam::AAAAAAAAAAAAAA:role/example-role
を委任先のアカウントBに委任できるようにしている場合、
委任先のアカウントBの設定が ~/.aws/(config|credentials) にある場合は( profile-b
)、
$ awsdo --role-arn=arn:aws:iam::AAAAAAAAAAAAAA:role/example-role --source-profile=profile-b -- aws ec2 describe-instance-status
と書けばいいし、アカウントBの設定がなくてもクレデンシャルがあれば
$ env AWS_ACCESS_KEY_ID=BBBBBbbbBBbBb AWS_SECRET_ACCESS_KEY=bbbbBBBbBBBBBBBB awsdo --role-arn=arn:aws:iam::AAAAAAAAAAAAAA:role/example-role -- aws ec2 describe-instance-status
と書けばAssumeRoleをした上でコマンドを実行できます。
設定を書かなくてもAssumeRoleできるということは、シェルスクリプトの一部だったりとかCIで実行したりなどがやりやすくなります。
例えばGitHub Actionsだと以下のようなワークフローでOIDC Connectして認証しながらさらにAssumeRoleしてコマンド実行ができたりします(未検証)。
name: AWS example workflow on: push permissions: id-token: write contents: read jobs: assumeRole: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: aws-actions/configure-aws-credentials@v1 with: role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT }}:role/example-role aws-region: ${{ secrets.AWS_REGION }} - name: Run as ${{ secrets.AWS_ACCOUNT }} run: | aws sts get-caller-identity - name: Setup awsdo run: | export AWSDO_VERSION=X.X.X curl -L https://git.io/dpkg-i-from-url | bash -s -- https://github.com/k1LoW/awsdo/releases/download/v$AWSDO_VERSION/awsdo_$AWSDO_VERSION-1_amd64.deb - name: Run as ${{ secrets.AWS_ANOTHER_ACCOUNT }} using awsdo run: | awsdo --role-arn=arn:aws:iam::${{ secrets.AWS_ANOTHER_ACCOUNT }}:role/another-example-role -- aws sts get-caller-identity
--login
AssumeRoleしたロールでAWSマネジメントコンソール(Web)にログインできるオプションです。
$ AWS_PROFILE=myaws awsdo --login
もともと aws-vault にある機能で、便利だったので実装を参考にして awsdo にも追加しました。
というわけで
どんどんAssumeRoleしていきます。