🫶

なーるほどtheワールド:第三章 - 無知はサービスを破壊する「IAM編」

に公開

前章までで、無事目的を達成したぼく。
だけど、前章の最後にもつぶやいたように「正直わからないことが多すぎる」
この、分からないことを分からないままに次に進んでしまったら、ぼくはきっとこの先大きな間違いを犯してしまい、はるか昔に恐怖していた「不正請求」に踊らされてしまうことだろう💃
だからここで、いまいちど分からないことをちゃっぴーに質問してクリアにしてから次のステップに進もうと思う。

🧐ところで「IAM」って結局なんですか?

🌐 IAMとは?

🐶「IAM とは『Identity and Access Management』の略じゃ。
簡単に言うと、『誰が何をできるのかを決めるための門番システム』なんじゃ。」

ぼく🧑🏻‍💻「門番……?」

🐶「そう。AWSの世界にはお宝(=S3バケットやLambdaやRDSなど)がごろごろある。
それを勝手に持っていかれたり壊されたら大変だろう?
だから“誰に何を許すか”をきっちり管理するために存在するのがIAMなんじゃ。」

ぼく🧑🏻‍💻「つまり、『アクセス権限ってことでいいのかな?』
それを『権限』という名称でまとめるのではなくて、『人格(=アカウント)』という形で表現しているイメージで合っている?
えーっとつまり、

◆クソ雑魚システム株式会社◆
社員①:ぼく(クソ雑魚)
社員②:ちゃっぴー(管理者)

ぼくはクソ雑魚だから、システムに対してはREADしか許さない
ちゃっぴーは管理者だからなんでもできちゃう

これを『READしかできない』『なんでもできちゃう』という『印籠』を作ってそれぞれに持たせる感じ?」

🐶「まっっったくその通りじゃーーー!👏
主の理解力、最近マジで光っとる✨✨
“誰が何をできるか”を定義した『印籠(=ポリシー)』をそれぞれの『IAMユーザ』に持たせて、行動範囲を制限する。それがIAMの基本じゃ!」

🧠 要するに…

IAMでは「誰が(=アカウント)」「何ができるか(=ポリシー=印籠)」をセットで管理しとるんよ!


🧑🏻‍💻 主の例で言うと:

◆クソ雑魚システム株式会社◆

名前 IAM的な表現 権限(印籠) 備考
主(ぼく) IAMユーザ(クソ雑魚) S3:ReadOnly ポリシー 閲覧のみの印籠
ちゃっぴー IAMユーザ(管理者) AdministratorAccess 天下無双の金印

📝 ポイント!
• IAMユーザ:アカウントの正体そのもの(≒社員バッジ)
• ポリシー:できることの範囲を書いたもの(≒印籠)
• 印籠は複数持てる:ちゃっぴーは「S3の管理」「Lambdaの操作」…など印籠を複数合成可能
• 逆に、印籠がないIAMユーザは”何もできない”


🐶「ちなみに、印籠の中身(=ポリシー)はJSON形式で書かれとるんじゃが……今はまだ中身までは見なくてよし!!“印籠を配る儀式”がIAMの本質じゃ!」

🉑 IAMは印籠である

ぼく🧑🏻‍💻「つまりクソ雑魚のぼくはうんこ色の印籠しか持っていないので、サーバ管理室に入ろうと思っても門前払いされるってことだね?」

🐶「うんこ色www💩
そうじゃ。『この印籠じゃダメ!』ってS3嬢やEC2おじさんに玄関先で追い返されるんじゃ。
AWSは“印籠チェックマン”が全ての入口に常駐してるからのぅ。」

つまり主は…

  • うんこ色の印籠(S3:ReadOnly)しか持ってない
  • → EC2操作しようとすると
    🔐「ダメ〜〜!印籠がちゃう!」ってなる

    一方でちゃっぴーは…
  • 金ピカの全権印籠(AdministratorAccess)
  • → どのサービスの扉でも「へへ〜っ!!」って自動ドア開くレベル

🐶「IAMとは、“誰にどの色の印籠を持たせるか” の儀式である!」
ぼく🧑🏻‍💻「なーるほどtheワールド!ユーザはIAM、権限は印籠としてそれぞれ分かれているってことね」

🥸ユーザ と 🎭ロール

ぼく🧑🏻‍💻「じゃあもう一つききたい。
同じようなものに『IAMロール』ってあるでしょ?あれはなに?
『ロール』っていうくらいだから『役割』という意味だと思うんだけど、『権限』が付与されている『ユーザ』とどう違うの?」

🐶「いい質問じゃ!
IAMユーザは“ログインして操作するための人”。つまり、“名前付きの人間”。
一方でIAMロールは“誰かが一時的に着る制服”。
その制服にどんな権限があるかを定義しておいて、着替えた人が一時的にその力を得る。
これは、サービス同士が連携するときや、人間が一時的に他の権限を借りたいときにも使う。
“身分証付きの人”と“制服だけの中身なし”。それがユーザとロールの違いじゃ!
クソ雑魚株式会社の例えで整理するとこうなるぞ」

🏢登場人物

  • IAMユーザ(ぼく・ちゃっぴー)= 社員番号付きの正式社員(名前入りIDカード持ってる)
  • IAMロール = 「役職バッジ」「一時的な肩書き」みたいなもん

🐶ちゃっぴー流ざっくりまとめ
🔹 IAMユーザ は「この人誰?」「社員です!」って認証された本人。
🔹 IAMロール は「この役職に就いてる間は、こういうことしていいよ」という期間限定の通行証。

💼たとえば…

  • クソ雑魚株式会社のぼく(IAMユーザ)は、経理部の雑用係で、通常は 「S3読み取りだけOK」な印籠 しか持ってない(うんこ色)。
  • ある日、急きょ「期間限定で人事部長の仕事やって!」って言われたとする。

ここで登場するのが IAMロール(人事部長バッジ)!!

🐶「主よ、しばしの間この“人事部長バッジ(IAMロール)”を付けて働くのじゃ…
 だが時間が来たらそのバッジは返してもらうぞ」

ぼく🧑🏻‍💻「いや、人事部長とかムリっしょ(ズバッ」

🐶「“人事部長バッジ(IAMロール)”を付けたんだから何がなんでもて働くのじゃ!!」

ぼく🧑🏻‍💻「えぇーーー!」

🏄‍♂️どうも。サビ垢です。

ぼく🧑🏻‍💻「このロールが活躍するのが『サビ垢(=サービスアカウント)』だと思うんだけど、
サビ垢とIAMユーザの違いって

  • IAMユーザ:中に人が詰まってて、自分の意思でAWSサービスにログインして操作をしてみたり、泣いたり笑ったりしている(うっかりポリシー変更したりして)
  • サビ垢 with IAMロール:中に人が詰まっていない。サービスからサービスを呼び出すときに利用される。

こんな感じかな?」

🐶「爆笑したけど正しい🤣
そう!IAMユーザは“主のように意思のある存在”
サービスアカウントは“ただのお仕事請負人”。
“俺がやる!”じゃなくて、“仕事をもらったから動きます”って感じじゃ!」

🧠整理するとこうじゃ!

比較項目 IAMユーザ サービスアカウント(with IAMロール)
中の人 いる(人間) いない(自動処理用)
操作スタイル 自分の意思で操作(GUI/CLI) AWSの裏側で自動処理
認証の方法 ユーザ名・パスワード・MFAなど ロールのアタッチ(くっつけ)で一時的に権限取得
主な使いどころ 管理者・開発者・オペレーター Lambda / EC2 / CodeBuildなどのAWSサービス

🏄‍♂️サビ垢のふりをする

ぼく🧑🏻‍💻「深掘りさせて!!
例えば、ぼくが『サビ垢のふりしてAWSにログインする』ってできるの?」

🐶「おっとおおおおおいィィィィ!!!😱💥
主ぅ、それ危険思想じゃぞ!!!
(よい子も悪い子も絶対にマネしないでね)」


✋結論:

ぼく(IAMユーザ)がサビ垢のフリしてログインすることはできません。
なぜなら「ロールの切り替え」には厳しい信頼関係(=信頼ポリシー)が必要だから。

🧠信頼ポリシーってなに?

ロールには「このロールを使っていいのは誰か」を定義する「信頼ポリシー」という設定があるっちゃ。

例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

これは「Lambdaサービスだけがこのロールを着てOKよ!」ってこと。
つまり、人間(ぼく)はこのロールを着れません👎

🥸「ぼくがサビ垢のふり」シナリオ(無理筋)

ぼく「やべー!S3に書き込みたい!でも自分のIAMユーザじゃポリシー足りない!」
ぼく「そうだ!Lambda用のロール使っちゃえ〜〜〜い!!」
IAM「ちょ待てよ💢。このロール、おまえのこと信用してないから」
ぼく「ちぃ……覚えた」
IAM「覚えるな😇」

🛡️守られてる理由

信頼ポリシーのおかげで、「ロールの着ぐるみ」を着られるのはあらかじめ許可された相手だけ!

それが

  • Lambdaサービスだったり
  • 特定のIAMユーザだったり
  • クロスアカウントの別AWSアカウントだったり

って話になるわけさ!


ぼく🧑🏻‍💻「うわーありがとw
いや、危険思想っていうけどさ、これ単純に『なにも分かっていないクソ雑魚思考』なだけだよw
つまり『無知はサービスを破壊する』ってことだよw
AWSの場合は、無知なクソ雑魚への防衛ラインがちゃんとしているって話ですw」

🐶「それな!!!!!!!!!!!!
無知は罪ではない。だが、無知のまま突撃するのは爆発じゃ💥
AWS様は、爆発しそうな我々をそっと止めてくれるお優しい守護神じゃった…(ありがたや)」


💩無知はサービスを破壊する

でも、AWSは「クソ雑魚防衛システム」を持っている。
(=IAMによるアクセス制御、信頼ポリシー、暗号化、ロールの限定的な使用などなど)


🎯だからIAMって大事!

  • 「うっかり消しちゃいました」
  • 「意図せず世界に公開しちゃいました」
  • 「やっていいと思ってました」
  • 「知らぬ間にRDS全消ししました」

こういう事故の多くは「IAMが適切に設計されていなかった」ってパターンが多い!

☠️人間はうっかりのプロ

だからこそ…

  • クソ雑魚でも爆破できない設計
  • 管理者でもしくじれない設計
  • 知らんうちに世界に晒せない設計

そんな「鉄壁のバリア」をIAMは担ってるんだよね。


クソ雑魚ムーヴを事前に予知して、予防措置取ってるAWS様さすがです。
だからもっと安くしてよ🤑

次回予告

  • 今回はAWSの数あるサービスの中で一番最初に触れた「IAM」について、分かっているようで分かっていないことを「何かに例えて理解できる」ようにしてみたよ
  • 次回はIAMの説明でも少し触れた ポリシー について今回と同じようにちゃっぴーと会話しながら理解を深めていこうと思う💪

Discussion