Precena Tech Book
コーポレートサイト採用サイト
  • はじめに
  • ソフトウェア開発
    • 開発環境構築
      • Homebrew
        • Homebrew用語の意味
      • ngrok
        • ngrokの導入
        • ngrokのアップグレード(v2 to v3)
      • Slack
        • Slackの/remind コマンドの形式
        • 対面での相談を気軽にするためのSlack設定
      • AWS CLI
      • Ruby
      • Scala
      • Prettier
      • zsh
        • zsh-completion
      • Mac
        • M1 Macでの開発環境構築(rosetta 無し)
    • バックエンド
      • OpenAPI
        • OpenAPI 定義ファイル分割のすゝめ
      • Ruby on Rails
        • ActiveRecordのfind_or_initialize_byメソッドにブロックを渡したときの挙動
        • Railsのアプリケーションサーバーのプロセス数とスレッド数の設定方法
        • Railsを6.1系から7.0系へアップグレードした時に調査したこと
        • schema.rbで差分が発生する事例とその復旧について
        • tmux + overmind を利用して、複数システムを1コマンドで起動できるよう設定する
        • Rails Migrationチートシート
        • GithubのプライベートリポジトリをGemfileで参照する方法
        • ActiveSupportのto_jsonメソッドの注意点
        • 危険なJSON出力を禁止するRuboCopカスタムルールの作成方法
      • Scala
        • Validated を直列に処理したい
      • DB
        • PostgreSQLにおける、削除行に対するロック獲得時の挙動
    • フロントエンド
      • React
        • Storybookを利用したビジュアルリグレッションテスト
  • インフラ開発
    • AWS
      • IAM
        • スイッチロールの設定手順
        • AWS CLIでのスイッチロールの設定手順
        • AWS Vaultを使ったスイッチロール設定手順
        • Github ActionsでIAMロールを利用してAWSリソースを操作する
      • ECS
      • SES
        • AWS SESメールボックスシミュレーターにて、カスタムヘッダや添付ファイル付きのテストEメールを送信する
      • CloudWatch
        • Amazon SNS + Slack Workflowを使って、CloudWatch Alarmの通知をSlackチャンネルへ投稿する
      • Lambda
        • lambrollでAWS Lambda関数をデプロイしたときのTips
    • Heroku
      • HerokuのStackの設定
      • Heroku Postgresの運用でよく使うコマンド集
  • セキュリティ
    • Web
      • Same Origin PolicyとCORS
      • 脆弱性診断 2社同時依頼実施記録
  • Mail
    • SPF、DKIM、DMARCを使用した迷惑メール対策
  • データ分析
    • データ分析プロセス
  • SaaS
    • Zendesk
      • 問い合わせフォームの項目をサービスごとに出し分け、各サービス担当者に自動で振り分けてメールで通知する
  • イベント
    • RubyKaigi
      • RubyKaigi 2023 に現地参加しました
    • EMConf
      • EMConfJP2025_参加レポート
  • やってみた
    • IoT
      • Raspberry Pi + PaSoRi + Python で、勤怠打刻マシンを作ってみた
  • Precena Tech Book 管理
    • コンテンツ執筆時のルール
  • 関連リンク
    • プレセナエンジニア公式Twitter
GitBook提供
このページ内
  • 概要
  • 状況定義
  • 準備: configファイルでの設定
  • 実行方法
  • CLIをインタラクティブに実行するとき
  • CLIをバッチ実行する必要があるとき

役に立ちましたか?

PDFとしてエクスポート
  1. インフラ開発
  2. AWS
  3. IAM

AWS CLIでのスイッチロールの設定手順

前へスイッチロールの設定手順次へAWS Vaultを使ったスイッチロール設定手順

最終更新 1 年前

役に立ちましたか?

概要

にて、AWSコンソールでのスイッチロールの方法について記載しました。

開発中にスイッチロール先でAWS CLIを利用したい場面もあるかと思います。 その場合の設定内容について記載します。

状況定義

以下のようにアカウント設定されているとします。

  • スイッチ元アカウント

    • ID: 123456789012

    • aws configure でデフォルトのプロファイルに設定済

  • スイッチ先アカウント1

    • ID: 210987654321

    • スイッチで引き受けるロール: arn:aws:iam::210987654321:role/delegate_root_organization

    • スイッチするときに使うプロファイル名: sw-staging

  • スイッチ先アカウント2

    • ID: 111111111111

    • スイッチで引き受けるロール: arn:aws:iam::111111111111:role/delegate_root_organization

    • スイッチするときに使うプロファイル名: sw-production

準備: configファイルでの設定

スイッチ元のアカウントを aws configure で設定済みであれば、およそ以下のような設定になっているはずです。

~/.aws/confg
[default]
region = ap-northeast-1
output = json
~/.aws/credentials
[default]
aws_access_key_id = ***
aws_secret_access_key = ***

~/.aws/config に設定を追記し、以下のようにします。

~/.aws/config
[default]
region = ap-northeast-1
output = json

[profile sw-staging]
source_profile = default
role_arn = arn:aws:iam::210987654321:role/delegate_root_organization
mfa_serial = arn:aws:iam::123456789012:mfa/your.mail@example.com

[profile sw-production]
source_profile = default
role_arn = arn:aws:iam::111111111111:role/delegate_root_organization
mfa_serial = arn:aws:iam::123456789012:mfa/your.mail@example.com

このとき、設定内容は以下のようにします。

  • プロファイル名(sw-staging, sw-production): 任意の名前で大丈夫です。CLIで利用するときにこの名前を指定します

  • source_profile: スイッチ元のプロファイルを指定します

  • role_arn: スイッチロールで引き受けるロールのARNを指定します

  • mfa_serial: スイッチ元でMFAを設定している場合、MFAデバイスのARNを設定します

実行方法

インタラクティブに実行できるかどうかで方法が変わってきます。

CLIをインタラクティブに実行するとき

ユーザー自身が aws s3 ls を実行する場合など、インタラクティブに実行できる場合は、以下の2通りの方法が利用できます。

  • --profile 引数にプロファイル名を指定

  • AWS_PROFILE 環境変数にプロファイル名を指定

例としては以下のとおりです。

% aws --profile sw-staging s3 ls
Enter MFA code for arn:aws:iam::123456789012:mfa/your.mail@example.com: # MFAコード利用の場合、認証コードの入力を求められます
# ...スイッチ先アカウント1のS3バケットが表示されます

% AWS_PROFILE=sw-production aws s3 ls
Enter MFA code for arn:aws:iam::123456789012:mfa/your.mail@example.com:
# ...スイッチ先アカウント2のS3バケットが表示されます

個人的には、以下のように使い分けると便利かと思います。

  • 引数: チーム内で同じアカウントは同じ名前に統一しておけば、コマンドを共有するだけでスイッチロールして実行させることができます

  • 環境変数: シェルスクリプトにまとまっているときなど、コマンドを書き換えたくないときに便利です

CLIをバッチ実行する必要があるとき

role_wrapper.sh という名前で以下スクリプトを作成します(jq コマンドが必要です)。

role_wrapper.sh
#!/bin/bash

set -euo pipefail

code=$1
shift

# assume-role
aws_credentials=$(
  aws sts assume-role \
    --role-arn arn:aws:iam::210987654321:role/delegate_root_organization \
    --role-session-name session-staging \
    --serial-number arn:aws:iam::123456789012:mfa/your.mail@example.com \
    --token-code ${code}
)

# assume-roleの結果をAWS環境変数に展開
export AWS_ACCESS_KEY_ID=$(echo $aws_credentials | jq -r '.Credentials.AccessKeyId')
export AWS_SECRET_ACCESS_KEY=$(echo $aws_credentials | jq -r '.Credentials.SecretAccessKey')
export AWS_SESSION_TOKEN=$(echo $aws_credentials | jq -r '.Credentials.SessionToken')

# 処理を実行
$@

これを使って、以下のように実行します。

% ./role_wrapper.sh <MFAコード> aws s3 ls

また、を利用すると aws-vault exec を使って同様のことが実現できます。をご参照ください。

本サイトの更新情報は、Twitterので発信しています。ご確認ください。

スイッチロールの設定手順
aws-vault
別記事
株式会社プレセナ・ストラテジック・パートナーズエンジニア公式アカウント