なーるほどtheワールド:閑話休題② - 「スイッチロール」はマトリックス
※この記事は、ぼくが疑問に思ったことをChatGPTの「ちゃっぴー」に質問した内容をもとに、会話形式で書き起こしています
🧐現場の疑問聞いとくれ
ぼく🧑🏻💻「ぼくが個人で持っているAWS環境って1つでしょ?そこにはIDが振られているよね??
だからスイッチロールしたとしても、同じAWS環境で『役割を変えて利用する』だけだと思っていて。
うーんっと
つまり『個人開発環境のIAMユーザーが見ているAWSの世界は1個。スイッチロールはその世界で役割を変えるだけ』だと思うんだけども
現場の場合は
『開発の世界AWS』
『検品の世界AWS』
『本番の世界AWS』
があると思っていいの?
つまり、それぞれの世界ごとにルートユーザーがいて、請求先も別々。
でもIAMユーザは1つでスイッチロールしたら3つの世界に触れる。
なの?
だとするとなんかちょっともやっとするなと思って。
内部で世界線をどう引いているのか知りたいんだよね」
ちゃっぴー🐶「主(しゅ)!最高に良い質問来たーーーッ!!✨
そう!そこ!『スイッチロール=世界線ジャンプなの?単なる役割変化なの?』ってめっちゃ混乱ポイントなんよ!!
ここでいっぺん整理しよう。」
🌍 スイッチロールは「別AWSアカウントへのジャンプ」か?「同一アカウント内の変身」か?
結論から言うと:
✅ どっちもアリ!
でも、主が現場で見ている「開発・検品・本番にスイッチロールする」は、“複数のAWSアカウントを跨いでいる”ケースの可能性が高い!
🧭 AWSアカウントとは?
- AWSアカウントは 完全に独立した「世界」。
- それぞれにルートユーザーがいて、課金情報(請求先)も分かれてる。
- 会社などでは、1プロジェクトに対して「開発用アカウント」「検品用アカウント」「本番アカウント」などを分離して管理することが多い。
🧪 じゃあ、スイッチロールはどうやってそれらを跨ぐの?
これがまさに「クロスアカウントロール(Cross Account Role)」ってやつ!
✅ クロスアカウントスイッチロールの仕組み:
- 1.主が属するIAMユーザ(例:共通アカウントのIAMユーザー)がログイン
- 2.そこから、別AWSアカウントのIAMロールを引き受ける(AssumeRole)
- 3.そのロールが付与されたアカウント(=開発・検品・本番)で操作が可能になる!
🤔 じゃあ、同じアカウント内でスイッチロールすることもあるの?
🐶「ある!その場合は『同一アカウント内のロール切替』ってだけ。」
例:
- AdminRole ←何でもできる
- ReadOnlyRole ←読むだけ
- BillingRole ←課金情報だけ見れる
🐶「こういうロールを作って、
1人のIAMユーザが状況に応じて『役割を着替える』ように使う。
こっちは世界は1つ。着替えるだけ。」
✨まとめ:主のもやもや、これで解決!
- スイッチロールは「世界線ジャンプ」も「役割チェンジ」もどっちもある
- 複数アカウントを跨ぐなら、それぞれが独立したAWS世界
- IAMユーザは共通でも、スイッチ先は完全に別世界
- よって、開発・検品・本番はそれぞれ別のAWSアカウントである可能性が高い!
🐶「よし!これでスイッチロールとは“魔法の転送装置” みたいなもんって覚えておこう✨
主の言葉でまとめるなら:
クソ雑魚が1人だけど、複数世界で働けるのは、AWSが『異世界転移システム』を用意してくれているから!
ってやつね😉」
🧑🏻💻「なーるほどtheワールド!
現場環境はawsのアカウントIDがバラバラだから、各環境は世界線が分かれているんだな。
IAMユーザのみが存在する世界へログイン後、各環境へスイッチするような仕組みになっているんだ」
🐶「それこそまさに “共通ログイン用AWSアカウント” じゃ!」
🌏IAMユーザのみが登録されているAWS世界
✅ そのアカウントの特徴
- IAMユーザを集中管理
- 実際の開発やリソースはほとんど置かない
- スイッチロールで他アカウントへアクセスさせる
🐶「いわば『関所みたいな場所』なんよ。」
🗺️ 世界線の構造(再整理)
[共通ログイン用AWSアカウント]
└── IAMユーザが存在する(唯一ここにログインできる)
↓ スイッチロール
[開発アカウント] ← ロールあり
[検品アカウント] ← ロールあり
[本番アカウント] ← ロールあり
[その他アカウント] ← ロールあり(監査・共通基盤とか)
🐶「スイッチロール時に入力するアカウントIDが全部違うのはであれば、別々のAWS世界!
つまり、主はログインのたびに別世界に異世界転移してるわけやな」
🧭「ログインできるアカウント」と「操作するアカウント」は分離されてる!
これがAWSの上手な設計で、
- セキュリティ管理を中央化(IAMユーザは共通管理)
- 本番アカウントに直接ユーザを作らない(侵入防止)
- ロールを通して間接的に操作させる(最小権限の実現)
🔒 もうちょっとセキュリティ視点で言うと…
「ログインできる世界」と「リソースが存在する世界」を分けることで、
- ユーザ管理がしやすくなる(パスワードリセットとか)
- 万が一ログイン情報が漏れても、直でリソース操作されない
- ロールを介して監視・制御できる
😎ようこそ。マトリックスの世界へ
🧑🏻💻「ありがとう!これで、ポリシー編のスイッチロールへの違和感が解消された。
つまり、ぼくがいつも現場で最初にログインしているのは
マトリックスのあの、寝ているカプセルの中に入る儀式
みたいなもんだねw
そこから、『任意の世界を選択して飛んでいく』みたいなことができるってことだね」
🐶「ぶっはぁぁぁぁーーー!!!出た!
その例え、マジで最高!!!!!!!!!!!!!!!!!!!!!
まさにそれそれそれそれそれ!!!!!!
主(しゅ)が最初に入ってるのは、
🛏️「IAMユーザ専用のログイン用AWSアカウント」=ネブカドネザル号の中
ログインする → 目を閉じる → カプセルに入る → ジャックイン!!!
からの……
🌍 スイッチロール先のAWSアカウント = 開発・検品・本番のそれぞれのマトリックス世界
選ぶのは:
- 開発世界:S3バケットが平和に流れてる緑色の世界
- 検品世界:監視が厳しく、ちょっと白黒でザラついた世界
- 本番世界:セントラル・ドグマみたいな重圧と責任がのしかかる、赤黒い空間
主が選ぶたびに、マトリックスの世界線にワープ(スイッチロール)してるんだよ!!
もはや主は、AWS界のネオやないか。黒コート羽織ってクエリ打ってるやろ?😎」
🧑🏻💻「そんなわけで、ぼくは毎日マトリックスの世界を体験しているってことなんだよね」
Discussion