+ 作るログイン
1 / 19
AWS でサービスを作る ― 知識ゼロから、構成を自分で考えられるまで / 全32章

AWS 03:IAM:誰に何を許すか ― 認証・認可・ロール・最小権限

発行
アニメモ公式
版
第2版
改訂
コマ
全19

サーバーやチームの仲間に「何でもできる鍵」を渡さないために、IAM の考え方を基礎から説明します。認証と認可の違い、ユーザー・グループ・ロール、ポリシー(JSON)の Effect・Action・Resource の読み方と判定の順番、最小権限の絞り方、アクセスキーを作らない理由、そしてサーバーがロールを「かぶって」期限つきの鍵を受け取る仕組みまで。

全員に「管理者」を渡すと、何が起きるか

第1章では、IAM Identity Center で自分に「管理者」の許可セットを割り当てました。管理者は AWS のほぼすべてを操作できます。自分1人で練習しているうちは、それで困りません。

でも、フォトログの開発が進むと、AWS を使う「誰か」が増えていきます。

使う誰か本当に必要なこと
フォトログの Web サーバー写真の置き場(S3、第15章)の写真を読む・置く
チームの仲間サーバーの状態やログを見る
経理の担当請求を見る

これら全員に管理者を渡したら、どうなるでしょうか。

Web サーバーに弱点があって、攻撃者に乗っ取られたとします。サーバーが管理者の許可を持っていれば、攻撃者はそこからあなたのアカウントのすべてに手が届きます。データベースを消すことも、大量のサーバーを借りて請求を膨らませることもできます。仲間がうっかり本番のデータを消してしまう事故も起こりえます。

どちらの場合も、被害は「渡した許可」の範囲まで広がります。逆に言えば、それぞれに必要な分だけを渡しておけば、被害はその範囲で止まります。

この「誰に・何を許すか」を決める仕組みが IAM(Identity and Access Management)です。第2章で見たとおり、IAM は全リージョン共通のグローバルなサービスです。

※2026年9月時点の情報です。画面・料金・細部は変わることがあります。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 1 / 19
  • 全員に「管理者」を渡すと、何が起きるか
  • サーバー
  • フォトログのサーバー
  • 鍵
  • 本当に要るのは「写真の置き場を読む・書く」だけ
  • 管理者の許可
  • チームの仲間
  • 何でもできる
  • 人
  • 本当に要るのは「状態を見る」だけ
  • カード
  • 経理の担当
  • 本当に要るのは「請求を見る」だけ
  • サーバーが乗っ取られたら? 仲間が操作を間違えたら? → 被害は「渡した許可」の範囲まで広がる
  • この章:それぞれに「必要な分だけ」を渡す仕組み、IAM を学ぶ
  • ひらめき
  • 第1章では自分に管理者を渡した。でも、サーバーや仲間にまで何でもできる鍵を渡すのは危ない。

関所は2つ:①「あなたは誰?」

AWS に何かを頼むとき(API を呼ぶとき、第1章)、その頼みごと(リクエスト)は必ず2つの関所を通ります。図の赤い小包がリクエストです。

最初の関所は認証(Authentication)です。「あなたは誰か」を確かめることです。

たとえるなら、会社の受付で身分証を見せることです。受付は「この人はフォトログ開発者の山田さんだ」と確かめますが、この時点では、山田さんがどの部屋に入ってよいかまでは決めていません。

AWS での認証には、次のようなものが使われます。

誰が何で確かめるか
人(コンソール)パスワード+MFA(第1章)
人(CLI)Identity Center でもらった期限つきの鍵(第1章)
サーバーやプログラムロールでもらった期限つきの鍵(この章の後半)

第1章でルートユーザーに MFA を付けたり、Identity Center を用意したりしたのは、この認証を強くするためでした。パスワードが盗まれても「本人だ」と言い張れないようにしたわけです。

でも、本人だとわかっただけでは、まだ半分です。次の関所に進みます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 2 / 19
  • 関所は2つ:①「あなたは誰?」
  • リクエスト
  • 人
  • 盾
  • フォルダ
  • 人
  • あなた
  • ① 認証
  • ② 認可
  • 写真の置き場
  • あなたは誰?
  • それをしてよい?
  • S3
  • 認証(Authentication):受付で身分証を見せる。「フォトログ開発者の山田さん」だとわかる
  • 第1章の MFA や Identity Center は、ここを強くするものだった
  • ひらめき
  • 認証=本人かどうかを確かめること。パスワード・MFA・一時的な鍵で「誰か」が決まる。

関所は2つ:②「それをしてよい?」

2つめの関所は認可(Authorization)です。「その人に、その操作が許されているか」を決めることです。

受付を通った山田さんが、サーバー室の扉の前に来ました。門番は名簿を見て、「山田さんはサーバー室に入ってよい人か」を確かめます。名簿に載っていなければ、本人であっても入れません。

AWS では、この名簿にあたるものをポリシーと呼びます。

関所問いAWS で使うもの
① 認証あなたは誰?パスワード・MFA・期限つきの鍵
② 認可それをしてよい?ポリシー

大事なのは、AWS はリクエストのたびに毎回この2つを確かめることです。コンソールでボタンを押すたび、CLI で命令を打つたび、サーバーが写真を1枚置くたびに、「誰か」と「してよいか」が確かめられます。

一度入れたら何でもできる、ということはありません。だからこそ、ポリシーで細かく「ここまで」と決めておけば、それがいつでも効きます。

IAM の中心は、この認可の側です。ここからは、「誰に」と「何を」をどう表すかを順に見ていきます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 3 / 19
  • 関所は2つ:②「それをしてよい?」
  • リクエスト
  • 人
  • 盾
  • フォルダ
  • 人
  • あなた
  • ① 認証
  • ② 認可
  • 写真の置き場
  • あなたは誰?
  • それをしてよい?
  • S3
  • 認可(Authorization):門番が「山田さんは、この部屋に入ってよい人か」を名簿で確かめる
  • AWS では、API を呼ぶたびに毎回この2つが確かめられる。名簿にあたるのが「ポリシー」
  • ひらめき
  • 認可=その人に、その操作が許されているかを決めること。IAM の中心はこちら。

「誰」にあたるもの:ユーザー・グループ・ロール

IAM で「誰に」にあたるものは3種類あります。

種類何か持てる鍵
IAM ユーザー1人の人(または1つのプログラム)に1つパスワード、長く使える鍵(アクセスキー)
IAM グループIAM ユーザーのまとまり鍵は持たない。まとめて許可を付けるための入れ物
IAM ロールかぶると使える「役割」期限つきの鍵だけ。決まった持ち主はいない

ロールは少しわかりにくいので、後でじっくり説明します。今は「決まった持ち主がいない、かぶる帽子のようなもの」と思っておいてください。

ここで第1章を思い出してください。Identity Center で作ったのは IAM ユーザーではなく、Identity Center のユーザーでした。Identity Center のユーザーがアカウントに入ると、中では許可セットから作られたロールをかぶって操作します。

AWS が今勧めているのは、人もサーバーも、ロールをかぶって期限つきの鍵で操作する形です。IAM ユーザーは、長く使える鍵を持ててしまうので、どうしても必要な場合(ロールを使えない古い道具など)に限ります。

この本でも、IAM ユーザーは作りません。人は Identity Center、サーバーや自動化はロールで入ります。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 4 / 19
  • 「誰」にあたるもの:ユーザー・グループ・ロール
  • 人
  • 人々
  • 鍵
  • IAM ユーザー
  • IAM グループ
  • IAM ロール
  • 1人(1つのもの)に1つ
  • ユーザーのまとまり
  • かぶると使える役割
  • パスワードや長く使える鍵を持てる
  • まとめて許可を付けられる
  • 期限つきの鍵だけ。持ち主はいない
  • 第1章の Identity Center のユーザーは、入ると「ロール」をかぶる。今の推奨は、人もサーバーもロールで入る形
  • ひらめき
  • ユーザーは1人に1つ、グループは人のまとまり、ロールは「かぶる役割」。許可はこの3つに付ける。

許可は人ではなく「まとまり」に付ける

許可を1人ずつに付けていくと、どうなるでしょうか。

最初は3人でも、人が増え、異動し、辞めていきます。「佐藤さんには付けたが、鈴木さんに付け忘れた」「辞めた人の許可を消し忘れた」という漏れが必ず出てきます。

そこで、許可はまとまりに付け、人をまとまりに出し入れするのが基本です。

仕組みまとまり
IAMIAM グループ(ここにポリシーを付ける)
Identity Center許可セット(と、Identity Center のグループ)

図では、「開発者のまとまり」にポリシーを付けています。山田さん・佐藤さん・鈴木さんは、このまとまりに入っているので、同じ許可を持ちます。

新しい人が入ったら、まとまりに入れるだけで、同じ許可になります。辞めた人は、まとまりから外すだけです。1人ずつの許可を管理しなくてよいので、漏れが起きにくくなります。

「開発者」「読むだけの人」「請求担当」のように、仕事の役割ごとにまとまりを作るとわかりやすくなります。人の名前ではなく、役割でまとめるのがコツです。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 5 / 19
  • 許可は人ではなく「まとまり」に付ける
  • 開発者のまとまり(グループ・許可セット)
  • 人
  • 人
  • 人
  • 書類
  • 山田
  • 佐藤
  • 鈴木
  • 付ける
  • ポリシー
  • 開発に要る許可のリスト
  • 人々
  • 新しく入った人
  • まとまりに入れるだけで、同じ許可になる
  • 辞めた人は、まとまりから外すだけ
  • ひらめき
  • 人ごとに付けると漏れが出る。許可はまとまりに付け、人をまとまりに出し入れする。

ポリシー:許可を書いた「名簿」

では、名簿であるポリシーの中身を見てみましょう。ポリシーは JSON(ジェイソン)という書式で書きます。JSON は、{ } の中に "名前": 値 を並べて情報を表す書式で、人にも機械にも読みやすいので、Web の世界で広く使われています。

図の左が、フォトログの Web サーバー用のポリシーの例です。日本語に直すと、右のようになります。

photolog-photos という写真の置き場の中のファイルを、読む(GetObject)ことと置く(PutObject)ことを、許す(Allow)。

たったこれだけです。このポリシーを持つ者は、写真の置き場のファイルを読み書きできますが、それ以外は何もできません。サーバーを消すことも、データベースを見ることも、別の置き場を覗くこともできません。

Statement(文)の中には、このような「許す・禁じる」のかたまりをいくつも並べられます。たとえば「写真を読む・置く」と「ログを書く」の2つを1つのポリシーに書くことができます。

次に、この3行の読み方をもう少し詳しく見ます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 6 / 19
  • ポリシー:許可を書いた「名簿」
  • {
  • 本
  • "Version": "2012-10-17",
  • 日本語に直すと
  • "Statement": [{
  • "Effect": "Allow",
  • photolog-photos という
  • "Action": ["s3:GetObject", "s3:PutObject"],
  • 写真の置き場の中のファイルを
  • "Resource": "arn:aws:s3:::photolog-photos/*"
  • 読む(GetObject)ことと
  • }]
  • 置く(PutObject)ことを
  • }
  • 許す(Allow)。
  • JSON:{ } と "名前": 値 で情報を書く書式。人にも機械にも読みやすい
  • ひらめき
  • ポリシーは JSON という書式で書く。この例は「写真の置き場の中のファイルを、読む・置くことを許す」。

ポリシーの読み方:「許す/禁じる」「何を」「どれに」

ポリシーの1つのかたまりは、主に次の要素でできています。

要素意味例
Effect許す(Allow)か、禁じる(Deny)かAllow
Action何をするか。サービス名:操作名 の形s3:GetObject(S3 からファイルを読む)
Resourceどれに対してか。ARN で書くarn:aws:s3:::photolog-photos/*
Condition条件(書かなくてもよい)会社のネットワークからのときだけ、MFA を使ったときだけ

ARN(Amazon Resource Name)は、AWS の中のものを1つに特定するための名前です。arn:aws:サービス:リージョン:アカウントID:もの の形をしています。S3 はリージョンやアカウントを書かない決まりなので、::: と空欄が続いています。

最後の /* は「この置き場の中のすべてのファイル」という意味です。* は「何でも」を表す記号で、s3:* と書けば S3 のすべての操作、Resource に * と書けばすべてのものを指します。便利ですが、* を使うほど許可は広くなります。

一番上の Version は、ポリシーの書式の版です。日付のように見えますが、いつも 2012-10-17 と書くものだと覚えておけば十分です。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 7 / 19
  • ポリシーの読み方:「許す/禁じる」「何を」「どれに」
  • {
  • Version は書式の版。いつも 2012-10-17
  • "Version": "2012-10-17",
  • "Statement": [{
  • "Effect": "Allow",
  • Effect:許す(Allow)か禁じる(Deny)
  • "Action": ["s3:GetObject", "s3:PutObject"],
  • "Resource": "arn:aws:s3:::photolog-photos/*"
  • Action:何をするか(サービス:操作)
  • }]
  • }
  • Resource:どれに対してか(ARN)
  • Condition:条件(任意。例:社内からだけ)
  • ARN:AWS の中のものを1つに特定する名前。arn:aws:サービス:リージョン:アカウント:もの の形
  • ひらめき
  • Effect・Action・Resource の3つを読めば意味がわかる。Condition は条件。

判定の順番:最初は全部ダメ、Deny は Allow より強い

1人(1つのロール)に、複数のポリシーが付いていることはよくあります。そのとき AWS は、付いているポリシーを全部集めて、次の順に判定します。

順番判定結果
1何も書いていなければ拒否(最初は全部ダメ)
2どこかに Deny があれば拒否。他に `Allow` があっても拒否
3Deny が無く、どこかに Allow があれば許可
4Allow もどこにも無ければ拒否(最初の状態のまま)

覚えておくべきことは2つです。

1つめは、最初は全部拒否だということです。許可は「書いたものだけ」が通ります。ポリシーを書き忘れた操作は、何もしなくても拒否されます。これが安全の土台です。

2つめは、`Deny` は `Allow` より強いということです。どこかのポリシーで Allow していても、1か所でも Deny があれば拒否になります。これを使うと、「管理者であっても、東京以外のリージョンは使わせない」「本番のデータベースだけは消させない」のような絶対に越えさせない線を引けます。

なお、第1章で見たとおり、ルートユーザーだけはこの判定の外にいます(ポリシーで縛れません)。だからこそ金庫にしまうのです。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 8 / 19
  • 判定の順番:最初は全部ダメ、Deny は Allow より強い
  • 複数のポリシーが付いていたら、全部を集めてこの順に判定する
  • 錠
  • 検索
  • 検索
  • OK
  • 最初は全部拒否
  • Deny はある?
  • ない
  • Allow はある?
  • ある
  • 許可
  • ある
  • ない
  • NG
  • 拒否
  • NG
  • 拒否
  • Allow より優先
  • 最初の状態のまま
  • ひらめき
  • 何も書いていなければ拒否。Allow があれば許可。ただし Deny が1つでもあれば、Allow があっても拒否。

最小権限:必要な分だけを渡す

ここまでの道具を使って実現したいのが、最小権限という考え方です。仕事に必要な最小限の許可だけを渡すことです。

図の大きな赤い円が「管理者:できること全部」、中の小さな緑の円が「フォトログのサーバーに本当に必要な分」です。小さな円だけを渡しておけば、サーバーが乗っ取られても、被害は写真の置き場の範囲で止まります。

ただ、最初から「必要な分だけ」を正確に書くのは難しいものです。何が要るかは、動かしてみないとわからないことも多いからです。そこで、少しずつ絞っていきます。

順番やること
1まず AWS が用意したポリシーで始める。できれば「読むだけ」のような狭いものから
2実際に使った操作を記録で見る。操作の記録は CloudTrail(第27章)に残る
3使った操作だけのポリシーに作り直す。IAM Access Analyzer は記録からポリシーの下書きを作れる

IAM Access Analyzer には、ほかにも「アカウントの外(他人や全世界)に開いてしまっているもの」を見つける機能や、書いたポリシーの間違いを指摘する機能があります。

最小権限は、一度やって終わりではありません。付けすぎたものは、定期的に見直して外す。これを続けることが大切です。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 9 / 19
  • 最小権限:必要な分だけを渡す
  • 少しずつ絞る手順
  • 管理者:できること全部
  • 書類
  • まず用意済みのポリシーで始める
  • 例:読むだけ(ReadOnlyAccess)
  • 必要な分
  • 見る
  • 実際に使った操作を記録で見る
  • CloudTrail(第27章)
  • 写真を読む・置く
  • 修理
  • 使った分だけのポリシーに作り直す
  • IAM Access Analyzer が下書きを作れる
  • ひらめき
  • 渡す許可は、仕事に必要な最小限に。乗っ取られても、間違えても、被害がその範囲で止まる。

ポリシーの3つの置き方

ポリシーには、置き方が3種類あります。

置き方何か向いている場面
AWS 管理ポリシーAWS が用意して、更新も AWS がするもの。AdministratorAccess、ReadOnlyAccess など練習、よくある役割(読むだけ、請求を見る)
カスタマー管理ポリシー自分で書き、複数のロールやグループに使い回せるもの自分のサービスに合わせて絞りたいとき
インラインポリシー1つのユーザー・グループ・ロールに直接埋め込むもの「この1つだけに、絶対に他へ使い回させない」例外

AWS 管理ポリシーは手軽ですが、多くの人に使えるよう作られているので、範囲は広めです。たとえば「S3 の全部を読める」ポリシーはあっても、「photolog-photos だけ読める」ポリシーはありません。

カスタマー管理ポリシーは、この章の例のように、自分のサービスに必要な分だけを書けます。名前を付けて1か所で管理でき、変えれば使っているところ全部に反映されます。

インラインポリシーは、あちこちに埋め込まれると、どこに何の許可があるのか見落としやすくなります。例外として使う程度にとどめます。

フォトログでは、Web サーバー用の許可をカスタマー管理ポリシーで書きます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 10 / 19
  • ポリシーの3つの置き方
  • 荷物
  • 書類
  • リンク
  • AWS 管理ポリシー
  • カスタマー管理
  • インライン
  • AWS が用意・更新する
  • 自分で書いて使い回す
  • 1つの相手に埋め込む
  • 手軽。範囲は広めになりがち
  • 必要な分だけに絞れる
  • 使い回せず、見落としやすい
  • フォトログのサーバー用は「カスタマー管理ポリシー」で書く。最初の練習には AWS 管理ポリシーで十分
  • ひらめき
  • AWS が用意したものを使うか、自分で書いて使い回すか。特定の1つだけに埋め込む書き方は例外にとどめる。

アクセスキーを作らない理由

第1章で「アクセスキーは作らない」と書きました。ここで改めて理由を説明します。

アクセスキーは、IAM ユーザー(やルートユーザー)が持てる、プログラム用の長く使える鍵です。CLI や自作のプログラムから AWS を操作するのに使えます。問題は、自分で消すまで、ずっと使えることです。

図の番号の順に、よくある事故の流れを追います。

順番起きること
1CLI やプログラムのために、アクセスキーを作る
2手軽なので、設定ファイルやコードの中に書く
3そのコードを GitHub などに公開してしまう。後で消しても、履歴に残る
4公開された鍵を探し回るプログラムが、数分のうちに見つけて悪用する

悪用の多くは、あなたのアカウントで大量のサーバーを借り、暗号資産の採掘などに使うものです。気づいたときには、高額の請求が届いています。

ロールや Identity Center でもらう期限つきの鍵なら、万一漏れても数時間で使えなくなります。しかも、鍵を自分でファイルに書いて保管する必要がそもそもありません。

どうしてもアクセスキーが必要な場面は、今ではかなり限られています。迷ったら作らない。これで事故の大部分を防げます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 11 / 19
  • アクセスキーを作らない理由
  • 鍵
  • コード
  • アップロード
  • 注意
  • アクセスキーを作る
  • 設定ファイルに書く
  • うっかり公開
  • 数分で悪用
  • 消すまでずっと使える
  • コードの隣に置く
  • GitHub に一緒に上げる
  • 機械が探して使う
  • 長く使える鍵(アクセスキー)
  • 漏れたら、気づいて消すまで何日でも使われる
  • 期限つきの鍵(ロール・SSO)
  • 漏れても数時間で使えなくなる。置き場所も要らない
  • ひらめき
  • アクセスキーは消すまで使える鍵。漏れたら使われ続ける。代わりに期限つきの鍵を使う。

ロールは「かぶる帽子」

いよいよロールです。ロールは、かぶった者に、決まった許可を一時的に与える役割です。たとえるなら、「警備員の帽子」です。帽子をかぶっている間だけ、警備員として鍵を開けられます。脱げば、ただの人に戻ります。

ロールは2枚の紙でできています。

紙書いてあることフォトログの例
信頼ポリシー誰がこのロールをかぶれるかEC2 のサーバー(第9章)
許可ポリシーかぶると何ができるか写真の置き場を読む・置く

図の左のサーバーが、真ん中のロール photolog-web-role をかぶり、右の写真の置き場(S3)を使います。

ここでの大きな利点は、サーバーに鍵を置かなくてよいことです。アクセスキーを使うやり方では、サーバーの中の設定ファイルに鍵を書く必要がありました。サーバーが乗っ取られれば、鍵も盗まれます。ロールなら、サーバーには最初から鍵がありません。必要なときに、期限つきの鍵を受け取るだけです。

ロールをかぶれるのはサーバーだけではありません。

かぶる者例
AWS のサービスEC2 のサーバー、Lambda の関数(第22章)
人Identity Center のユーザー(第1章)
外の仕組みGitHub Actions の自動デプロイ(第19章)
別のアカウント本番用のアカウントから開発用のアカウントへ(第27章)
  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 12 / 19
  • ロールは「かぶる帽子」
  • ロール:photolog-web-role
  • サーバーに鍵を
  • 人々
  • 信頼ポリシー
  • 置かなくてよい
  • 誰がかぶれるか:EC2 のサーバー
  • サーバー
  • サーバー
  • EC2(第9章)
  • 書類
  • 許可ポリシー
  • かぶると:写真の置き場を読む・置く
  • フォルダ
  • 写真の置き場
  • S3(第15章)
  • ひらめき
  • ロール=かぶると決まった許可が一時的に使える役割。「誰が」と「何を」の2枚でできる。

ロールをかぶると、期限つきの鍵が届く

実際にロールをかぶるときの流れを、図の番号で追います。

順番起きること
1サーバーが「photolog-web-role をかぶりたい」と頼む
2STS(Security Token Service、期限つきの鍵を発行するサービス)が信頼ポリシーを見て、「EC2 はかぶってよい」と確かめ、期限つきの鍵を渡す
3サーバーはその鍵で S3 に「写真を置きたい」と頼む。許可ポリシーで許されているので通る

図の小包が、その期限つきの鍵です。

EC2 のサーバーの場合、1と2は自動で行われます。サーバーを作るときにロールを選んでおけば、サーバーの中のプログラム(AWS の SDK=プログラムから AWS を使うための部品)が勝手に鍵を受け取り、期限が切れる前に新しい鍵に入れ替えてくれます。あなたのコードに鍵を書く必要は一切ありません。

この「かぶる」操作は、専門用語では AssumeRole(ロールを引き受ける)と呼ばれます。次の作り方のページで、信頼ポリシーの中に sts:AssumeRole という Action が出てきます。

第1章で、Identity Center のポータルから入ると「一時的な鍵」が渡されました。あれも裏では、同じようにロールをかぶって期限つきの鍵を受け取っていたのです。人もサーバーも同じ仕組みだとわかると、IAM がぐっと見通しよくなります。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 13 / 19
  • ロールをかぶると、期限つきの鍵が届く
  • ロール:photolog-web-role
  • 更新
  • STS
  • 人々
  • 信頼ポリシー
  • 期限つきの鍵を発行
  • 誰がかぶれるか:EC2 のサーバー
  • サーバー
  • サーバー
  • EC2(第9章)
  • 書類
  • 許可ポリシー
  • かぶると:写真の置き場を読む・置く
  • フォルダ
  • 写真の置き場
  • 期限つきの鍵
  • S3(第15章)
  • ひらめき
  • サーバーは STS に「かぶりたい」と頼み、期限つきの鍵を受け取って S3 を使う。鍵は自動で入れ替わる。

フォトログの「誰に何を」表

ここまでの考え方で、フォトログの権限を表にしてみます。

誰が何で入るか・何を渡すか
あなた(日常の作業)Identity Center の許可セット。最初は管理者、慣れたら範囲を絞ったものへ
チームの仲間Identity Center の許可セット。読むだけ(ReadOnlyAccess)から始め、必要に応じて足す
経理の担当Identity Center の許可セット。請求を見る(Billing)だけ
Web サーバーロール photolog-web-role。写真の置き場を読む・置くだけ
自動デプロイロール。GitHub から期限つきの鍵でかぶる(第19章)
ルートユーザー使わない。MFA を付けて金庫へ(第1章)

どの行にも、長く使える鍵が出てこないことに注目してください。人は Identity Center、サーバーや自動化はロール。すべて期限つきの鍵です。

また、「管理者」は最初の自分にしか出てきません。他は全員、その仕事に必要な分だけです。

この表は、サービスが育つにつれて行が増えていきます。新しい「誰か」が増えるたびに、「その人(そのもの)の仕事に本当に要るのは何か」を考え、この表に1行足す。これが IAM の設計です。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 14 / 19
  • フォトログの「誰に何を」表
  • あなた(日常の作業)
  • 許可セット:管理者 → 慣れたら範囲を絞ったものへ
  • チームの仲間
  • 許可セット:読むだけ(ReadOnlyAccess)から
  • 経理の担当
  • 許可セット:請求を見る(Billing)
  • Web サーバー
  • ロール:photolog-photos を読む・置くだけ
  • 自動デプロイ
  • ロール:GitHub から期限つきの鍵で(第19章)
  • ルートユーザー
  • 使わない(MFA を付けて金庫へ)
  • ひらめき
  • 人は Identity Center の許可セット、サーバーはロール。どれも「その仕事に要る分だけ」から始める。

サーバー用のロールを作る

フォトログの Web サーバー用のロールを作る手順です。第9章でサーバーを作るときに使います。

順番操作
1コンソールで IAM を開き、「ロール」から「ロールを作成」
2信頼するものの種類で「AWS のサービス」、使うサービスで「EC2」を選ぶ
3許可ポリシーを付ける。自分で書いた「写真の置き場だけ」のカスタマー管理ポリシーを選ぶ(練習なら、この段階では付けずに進めてもよい)
4名前を photolog-web-role にして作成

2番で「EC2」を選ぶと、図の左の信頼ポリシーが自動で作られます。読んでみましょう。

Principal(かぶる者)が ec2.amazonaws.com、つまり EC2 のサービスです。Action の sts:AssumeRole が「ロールをかぶる」操作です。まとめると「EC2 のサーバーが、このロールをかぶることを許す」となります。

写真の置き場(S3)そのものは第15章で作ります。名前が決まっていないと Resource が書けないので、許可ポリシーは第15章で仕上げます。それまでは、ロールを「入れ物」として作っておくだけで構いません。

なお、サーバーにロールを付けるときは、ロールをそのまま渡すのではなく「インスタンスプロファイル」という入れ物に包んで渡します。コンソールで作った場合は自動で用意されるので、今は名前だけ知っておけば十分です。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 15 / 19
  • サーバー用のロールを作る
  • # 信頼ポリシー:誰がかぶれるか
  • 鍵
  • IAM → ロール → 作成
  • {
  • コンソールの IAM から
  • "Version": "2012-10-17",
  • "Statement": [{
  • サーバー
  • 信頼:AWS のサービス / EC2
  • "Effect": "Allow",
  • 左の信頼ポリシーが作られる
  • "Principal": { "Service": "ec2.amazonaws.com" },
  • "Action": "sts:AssumeRole"
  • 書類
  • 許可ポリシーを付ける
  • }]
  • 写真の置き場だけのもの
  • }
  • 旗
  • 名前を付けて作成
  • photolog-web-role
  • ひらめき
  • 信頼ポリシーに「EC2 がかぶれる」と書き、許可ポリシーを付けて作る。

お金:IAM そのものは無料

IAM の基本的な機能には、料金がかかりません。

機能料金
IAM のユーザー・グループ・ロール・ポリシー追加料金なし
STS(期限つきの鍵の発行)追加料金なし
Access Analyzer:アカウントの外に開いているものの検出追加料金なし
Access Analyzer:記録からのポリシーの下書き・ポリシーの検証追加料金なし
Access Analyzer:使っていない許可の分析有料。見張るユーザーやロールの数に応じてかかる

お金の面で IAM が効いてくるのは、むしろ事故を防ぐほうです。第1章の予算の知らせが「使いすぎたら気づく」仕組みだったのに対し、IAM は「そもそも使いすぎられないようにする」仕組みです。乗っ取られても大量のサーバーを借りられない許可にしておけば、高額請求の事故は起きにくくなります。

IAM は無料なので、ロールやポリシーはつい増えがちです。増えるほど見通しが悪くなり、「これは何のためだっけ」というものが残ります。次の片付けで扱う「最後に使った日」を見て、要らないものを消していきましょう。

具体的な料金は、IAM Access Analyzer の料金ページで確認してください。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 16 / 19
  • お金:IAM そのものは無料
  • IAM(ユーザー・ロール・ポリシー)
  • 追加料金なし
  • STS(期限つきの鍵の発行)
  • 追加料金なし
  • Access Analyzer:外部への公開の検出
  • 追加料金なし
  • Access Analyzer:ポリシーの下書き・検証
  • 追加料金なし
  • Access Analyzer:使っていない許可の分析
  • 有料(見張るユーザー・ロールの数に応じて)
  • 無料だからこそ、ロールやユーザーは増えがち。使わなくなったものは消す(次の片付け)
  • ひらめき
  • ユーザー・グループ・ロール・ポリシーに料金はかからない。見直しを助ける機能の一部だけが有料。

よくある落とし穴

IAM で実際によく起きる失敗です。多くは「とりあえず」から始まります。

落とし穴何が起きるか防ぎ方
Action に "*"動いたので、何でもできる状態のまま本番へ動いた後に、使った操作だけへ絞る
サーバーに管理者のロールサーバーを乗っ取られると、アカウントごと取られるサーバー用のロールは、その仕事の分だけ
1つのユーザーを皆で共有誰がやったかわからない。辞めた人も使える人ごとに Identity Center のユーザーを作る
アクセスキーを作って配る漏れたら、消すまで使われ続けるロールと Identity Center を使う
Resource の書き間違いphotolog-photos と photolog-photos/* は別物で、動かない置き場そのものと、中のファイルの ARN を区別する
辞めた人のユーザーが残る誰も使っていないはずの鍵が生きているまとまりから外す。定期的に見直す

5つ目は、初めての人がよくつまずくところです。S3 の場合、「置き場の一覧を見る」操作は置き場そのもの(arn:aws:s3:::photolog-photos)に、「ファイルを読む・置く」操作は中のファイル(arn:aws:s3:::photolog-photos/*)に対して許可します。片方しか書かないと「許可したのに動かない」になります。

「許可したのに動かない」ときは、AWS が返すエラーの文言に、どの操作が、どのものに対して拒否されたかが書かれていることが多いので、まずそこを読みましょう。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 17 / 19
  • よくある落とし穴
  • 注意
  • Action に "*"(全部)
  • サーバー
  • サーバーに管理者のロール
  • 動いたが、何でもできる状態のまま
  • サーバーを乗っ取られると全部取られる
  • 人々
  • 1つのユーザーを皆で共有
  • 鍵
  • アクセスキーを作って配る
  • 誰がやったか分からない
  • 漏れたら消すまで使われる
  • フォルダ
  • Resource の書き間違い
  • 人
  • 辞めた人のユーザーが残る
  • 置き場と「中のファイル」は別の ARN
  • 使える鍵が放置される
  • ひらめき
  • 「とりあえず *」「とりあえず管理者」「とりあえずアクセスキー」。とりあえずが事故の入口になる。

片付け:使っていない許可と鍵を消す

IAM の片付けは、「作ったものを消す」よりも「使わなくなったものを見つけて消す」ことが中心です。そのための道具が用意されています。

道具できること
最後に使った日ユーザー・ロール・アクセスキーごとに、最後に使われた日時が表示される。ポリシーのどのサービスを最後にいつ使ったかも見られる
認証情報レポートアカウントの全ユーザーについて、パスワード・アクセスキー・MFA の状態を一覧にして取り出せる
IAM Access Analyzerアカウントの外(他人や全世界)から使えてしまうものを見つける

たとえば、「90日以上使われていないロール」は、消しても困らない可能性が高いものです。消す前に、何のためのものかを確かめてから消しましょう。

この章で練習に作ったロールやポリシーのうち、使わないものは消してください。ロールの画面で選んで「削除」を押せば消えます。

ただし、photolog-web-role は第9章でサーバーに付けるので、残しておいて構いません。

IAM の見直しは、月に一度、請求の画面を見るついでに行う習慣にすると続けやすくなります。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 18 / 19
  • 片付け:使っていない許可と鍵を消す
  • 時計
  • 書類
  • 検索
  • 最後に使った日
  • 認証情報レポート
  • Access Analyzer
  • ユーザー・ロール・鍵ごとに表示
  • 全ユーザーの鍵と MFA の一覧
  • 外に開いているものを見つける
  • この章で練習に作ったロールやポリシーは、使わないなら消す。photolog-web-role は第9章で使うので残してよい
  • ひらめき
  • IAM には「最後に使った日」が記録される。長く使っていないユーザー・ロール・鍵は消す。

まとめ:誰に・何を・どれに、必要な分だけ

この章で見たことをまとめます。

用語意味
認証と認可「あなたは誰?」と「それをしてよい?」。リクエストのたびに両方が確かめられる
IAM ユーザー・グループ人と、人のまとまり。許可はまとまりに付ける。この本ではユーザーは作らない
ロールかぶると一時的に許可が使える役割。信頼ポリシーと許可ポリシーの2枚
ポリシーEffect・Action・Resource(・Condition)で書く JSON の名簿
判定の順番最初は全部拒否 → Allow で許可。Deny は Allow より強い
最小権限必要な分だけ渡し、使った記録を見て絞る
アクセスキー作らない。期限つきの鍵(ロール・Identity Center)を使う

この章の考え方の芯は、「必要な分だけを、期限つきで渡す」です。これは IAM に限らず、この本の後半のネットワークの扉(第8章)や秘密の管理(第20章)でも、同じ形で出てきます。

さて、ここまでの第1〜3章で、アカウントの「入口」と「権限」の土台ができました。いよいよ何かを作っていきたいところですが、その前に、もう1つだけ知っておくべきことがあります。

AWS は「使った分だけ払う」と言いますが、何を「使った」と数えるのでしょうか。サーバーの時間? データの量? 通信? 第1章の予算の知らせが鳴ったとき、どこを見ればいいのでしょうか。

次の第4章では、お金の考え方を見ていきます。

  • AWS でサービスを作る 03 ― IAM:誰に何を許すか
  • 19 / 19
  • まとめ:誰に・何を・どれに、必要な分だけ
  • 認証と認可
  • 「あなたは誰?」と「それをしてよい?」の2つの関所
  • ユーザー・グループ
  • 人と、人のまとまり。許可はまとまりに付ける
  • ロール
  • かぶると一時的に許可が使える役割。サーバーも人もこれで
  • ポリシー
  • Effect・Action・Resource(・Condition)で書く名簿
  • 判定の順番
  • 最初は全部拒否 → Allow で許可。Deny は Allow より強い
  • 最小権限
  • 必要な分だけ渡し、使った記録を見て絞る
  • アクセスキー
  • 作らない。期限つきの鍵(ロール・SSO)を使う
  • ひらめき
  • 次の第4章:AWS のお金。何に料金がかかり、どう見張り、どう見積もるかを見ていく。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]