FOR PROFESSIONALSプロフェッショナル向け

Fアイデンティティと権限段4設計層設計

マルチアカウントの権限設計|SCP・許可セット・権限境界・ABAC を「どこで絞るか」で組む

マルチアカウントの権限設計|SCP・許可セット・権限境界・ABAC を「どこで絞るか」で組む

アカウントが20を超え、権限の申請が毎日来る。事業部ごとに IAM ユーザーが作られ、「とりあえず管理者権限で」と渡したロールが残っている。監査からは「組織の外にデータが出ない保証は」と聞かれ、開発チームからは「ロールくらい自分で作らせてほしい」と言われる。どれも権限の話ですが、1つのポリシーで全部を解こうとすると、誰も読めないポリシーが残ります。

AWS の権限は、組織・アカウント・人・セッションという層ごとに別の仕組みで絞れます。この記事は、ポリシーの評価の順番を土台に、どの要件をどの層で絞るかを判断の順番として整理します。

この記事の結論

  • マルチアカウントの権限は、組織の上限(SCP・RCP)、人に配る権限(許可セット)、委任の上限(権限境界)、セッションの絞り込みの層に分け、1か所に全部を載せないように設計します。
  • SCP と RCP は権限を与えず上限だけを決め、管理アカウントには効かないので、管理アカウントでワークロードを動かさないことが前提になります。
  • 人の権限は IAM Identity Center の許可セットで職務ごとに配り、アカウントごとの IAM ユーザーと長期のアクセスキーを作らない形にします。
  • チームや案件が増え続ける組織では、ABAC(人の属性とリソースのタグの一致)で許可セットの数を増やさずに範囲を分けられます。
  • 作った権限は IAM Access Analyzer で外部への公開と使われていない権限を洗い出し、継続して減らします。

権限の設計で先に決める要件とは

仕組みを選ぶ前に、次の要件を書き出します。同じ「権限を絞りたい」でも、要件によって効く層が違います。

軸 何を確かめるか 答えが変えるもの
規模 アカウントの数、人の数、チームと案件の増え方 職務ごとの許可セットで足りるか、ABAC が要るか
規制 使ってよいリージョン、組織の外への共有の禁止、ログの保全 SCP・RCP に何を書くか、データの境界をどこに引くか
委任 各チームにどこまで任せたいか(ロールの作成、ポリシーの編集) 権限境界を使うか、中央のチームが代行するか
外部との関係 ベンダーや SaaS にアカウントを見せるか ロールの信頼ポリシーと外部 ID、RCP の例外
運用体制 ポリシーを書いて見直す人がいるか、変更を CI で検査できるか 中央で持つポリシーの量、Access Analyzer の使い方

AWS Well-Architected フレームワークのセキュリティの柱は、権限の管理について「最小権限を与える」「権限のガードレールを組織で定める」「継続的に権限を減らす」「第三者とは安全に共有する」をベストプラクティスとして挙げています。この記事の章立ても、この順に沿っています。

DESIGN INPUTS先に書き出す要件

同じ「絞りたい」でも効く層は要件で変わる

  1. 1.規模と増え方 — アカウント・人・案件の数

    職務ごとの許可セットで足りるか、ABAC が要るか

  2. 2.規制 — リージョン、組織の外への共有、ログの保全

    SCP と RCP に何を書くか。データの境界をどこに引くか

  3. 3.委任 — 各チームにどこまで任せるか

    ロールの作成を任せるなら権限境界を必須にする

  4. 4.外部と体制 — ベンダーに見せるか、誰が見直すか

    外部 ID 付きのロール、Access Analyzer と CI の検査

出典: AWS Well-Architected セキュリティの柱 SEC03(権限の管理)

ポリシーはどの順で評価され、どこで絞るのか?

AWS はリクエストごとに、関係するすべてのポリシーを合わせて評価します。既定は拒否(暗黙の拒否)で、どこかに当てはまる明示的な拒否が1つでもあれば、ほかにどんな許可があっても拒否になります。

同じアカウントの中では、アイデンティティベースのポリシーとリソースベースのポリシーの許可は「足し算」で、どちらかが許せば許可の候補になります。一方、SCP・RCP・権限境界・セッションポリシーは「上限」で、上限の外にある操作は許可が書いてあっても通りません。組織のメンバーアカウントでは、プリンシパルのポリシー・SCP・RCP のすべてが許した操作だけが実行できます。

層 何に効くか 権限を与えるか 誰が持つか 絞りたいもの
SCP メンバーアカウントのユーザーとロール 与えない(上限) 組織の管理者 使ってよいリージョン、止めてはいけないログ、組織からの離脱
RCP メンバーアカウントのリソース 与えない(上限) 組織の管理者 組織の外のプリンシパルからのアクセス
許可セット 人が各アカウントで引き受けるロール 与える 中央の ID 管理者 職務ごとに要る操作
権限境界 特定のユーザーとロール 与えない(上限) 委任する側 委任先が作るロールの最大の権限
セッションポリシー そのセッションだけ 与えない(重なりに絞る) ロールを引き受ける側 テナントや処理ごとの範囲
リソースベースのポリシー そのリソース 与える リソースの所有者 他アカウントからの到達

WHERE TO LIMITどこで絞るか

広い層では止めることだけを、狭い層で与えることを書く

  1. 組織

    SCP と RCP — メンバーアカウントの上限

    リージョン・ログの保全・組織の外からのアクセス。権限は与えない

  2. 人

    許可セット — 職務ごとに与える

    Identity Center が各アカウントにロールを作る。ABAC で数を抑える

  3. 委任

    権限境界 — 任せた先の上限

    ロールの作成を境界の付与つきでだけ許す

  4. 1回

    セッションポリシー — その回だけ絞る

    テナントや処理ごとに、ロールとの重なりに絞る

出典: IAM ユーザーガイド「Policy evaluation logic」。明示的な拒否はどの層でも優先

設計の原則は、広く効く層ほど「止めること」だけを書き、狭い層で「与えること」を書くです。組織のガードレールに業務の細かい許可を書き込むと、例外のたびに組織全体のポリシーを変えることになります。逆に、リージョンの制限のような組織の約束事を各許可セットに書くと、1つ書き漏らしただけで穴になります。

クロスアカウントのアクセスは足し算になりません。アカウント A のロールがアカウント B のバケットを読むには、A 側のアイデンティティベースのポリシーと、B 側のリソースベースのポリシー(または B 側のロールの信頼ポリシー)の両方が許す必要があります。「片方だけ直して拒否が消えない」ときは、まずこの両側を確かめます。

組織のガードレール ─ SCP と RCP で何を止めるか

SCP はルート・OU・アカウントに付けられ、配下に継承されます。よく使うのは次のような「組織としての約束」です。

  • 承認したリージョン以外の操作を拒否する(グローバルサービスは除外する。条件キーは aws:RequestedRegion)
  • CloudTrail の証跡の停止と削除を拒否する
  • 組織からの離脱を拒否する
  • 作成時にコスト配分のタグが無いリクエストを拒否する(aws:RequestTag と Null 条件)

RCP は、メンバーアカウントのリソースに許される操作の上限を組織で一元的に決めます。代表的な使い方は、aws:PrincipalOrgID が自組織でないリクエストを拒否して、バケットポリシーを誤って書き換えても組織の外から読めないようにすることです。SCP が「中の人が外で何をするか」を止めるのに対し、RCP は「外の人が中のリソースに何をするか」を止めます。両方を組み合わせると、データの境界(どこからどこへデータが出入りできるか)を組織の層で引けます。

SCP と RCP は管理アカウントには効きません。ルートに SCP を付けても、管理アカウントの中では制限がかかりません。管理アカウントは組織の管理と請求に限り、ワークロードはメンバーアカウントに置く、が前提になります。セキュリティサービスの管理も、委任管理者として専用のアカウントに移すと管理アカウントに入る人を減らせます。

AWS Control Tower を使う場合は、リージョン拒否のコントロールが SCP として OU に適用されます。データの置き場所に規制がある組織では、ここで使ってよいリージョンを最初に決めておくと、後から「別のリージョンに作られていた」という事故を防げます。

運用の注意として、新しい SCP はまず検証用の OU で試してから本番の OU に付けます。拒否の範囲を広げすぎると、障害対応に必要な操作まで止まるからです。セキュリティの柱も、緊急時にだけ使うアクセスの手順を平時に決めておくことを求めています。

CHECK 1ここまでの確認

SCP の許可リストに入っていないサービスを、そのアカウントで AdministratorAccess を持つロールが呼び出すとどうなる?

答えと解説

答え: 2. SCP の上限の外なので拒否される

SCP は権限を与えず、使える操作の上限を決めます。有効な権限は SCP とアイデンティティベースのポリシーの両方が許したものだけです(「ポリシーはどの順で評価され、どこで絞るのか」と「組織のガードレール」の章)。

人の権限 ─ 許可セットと ABAC で規模に耐える

人の権限は IAM Identity Center に集めます。社内の IdP を ID ソースにして SCIM でユーザーとグループを同期し、グループにアカウントと許可セットを割り当てます。許可セットはアカウントに配る権限のひな形で、割り当てると各アカウントに Identity Center が管理する IAM ロールが作られます。アカウントごとに IAM ユーザーを作る形と違い、退職や異動は IdP 側で止めれば全アカウントに反映されます。

許可セットは人ごとではなく職務ごとに作ります。読み取り専用・開発者・運用・セキュリティ監査のように役割で分け、本番と開発の違いはどのアカウントに割り当てるかで表します。1人に複数の許可セットを割り当てることもできます。

増え続けるなら ABAC

案件ごと・チームごとに許可セットを作ると、案件が増えるたびに許可セットと割り当てが増えます。ここで効くのが ABAC(属性ベースのアクセス制御)です。Identity Center の「アクセスコントロールの属性」で IdP のユーザー属性(部署・案件など)を選ぶと、サインインのときにセッションタグとして渡されます。許可セットのポリシーで aws:PrincipalTag と aws:ResourceTag の一致を条件にすれば、1つの許可セットで「自分の案件のタグが付いたリソースだけ」を扱えます。

観点 職務ごとの許可セット(RBAC) ABAC(タグの一致)
許可セットの数 職務×範囲の数だけ増える 職務の数で止まる
新しいリソース ポリシーの更新が要る 正しいタグを付ければ対象になる
前提 特に無い タグの付け方の統制(必須化・変更の禁止)
向く組織 チームや案件が少なく、増え方がゆっくり チームや案件が増え続ける

ABAC は「タグが正しいこと」に権限を預ける設計です。利用者が自分でリソースのタグを書き換えられると、他の案件のリソースに届いてしまいます。タグポリシーで表記を揃え、SCP でタグの付与を必須にし、許可を決めるタグの変更は限られた役割にしか許さない、という統制と組にして使います。

SCALE AND DELEGATION人の権限の配り方

増え方と任せ方の2軸で配り方が決まる

チームに任せたい範囲 →

権限境界で委任

チームは少ないが、ロールの作成は任せたい

権限境界+ABAC

増え続け、任せたい。タグの統制が前提

職務ごとの許可セット

少なく、中央で配る。まずはここから

ABAC の許可セット

増え続けるが、ロールは中央で持つ

チームと案件の増え方 →

READ ALSO — 学習中向け・段2 構成 IAM Identity Center とは何か|複数アカウントへのサインインを1か所にまとめ、許可セットで権限を配る

CHECK 2ここまでの確認

案件ごとに許可セットを作る運用が限界になった。許可セットを増やさずに案件ごとの範囲を分ける方法は?

答えと解説

答え: 2. ユーザーの属性をセッションタグとして渡し、リソースのタグと一致したときだけ許す

ABAC は、人の属性(aws:PrincipalTag)とリソースのタグ(aws:ResourceTag)の一致で許可を決めます。案件が増えてもタグを付けるだけで済みます(「人の権限」の章)。

委任とクロスアカウント ─ 権限境界とロールの信頼関係

権限境界で「任せても昇格させない」

開発チームにロールの作成を任せたいが、自分より強いロールを作られては困る。この要件には権限境界を使います。権限境界は、アイデンティティベースのポリシーがそのユーザーやロールに与えられる最大の権限を決める管理ポリシーで、それ自体は権限を与えません。

委任の形は次のとおりです。開発チームの iam:CreateRole を、決めた権限境界を付ける場合だけ許します(条件キーは iam:PermissionsBoundary)。あわせて、境界の付け外しと、境界に使うポリシー自体の編集を拒否します。こうすると、開発チームが作るロールは境界の内側にしか権限を持てません。なお、権限境界はリソースベースのポリシーが与える権限の上限にはならない点に注意します。

ロールの信頼関係と外部 ID

ロールの信頼ポリシーは「誰がこのロールを引き受けられるか」を決めます。組織内のクロスアカウントでは、引き受ける側のアカウントで sts:AssumeRole を許し、ロールの信頼ポリシーで相手を指定します。

第三者(監視やコスト分析の SaaS など)にロールを引き受けさせるときは、混乱した代理(confused deputy)の問題に備えます。事業者が多くの顧客のロールを引き受ける場合、別の顧客が自社のロールの ARN を事業者に渡すと、事業者経由で自社のアカウントに届いてしまうおそれがあるためです。信頼ポリシーで顧客ごとに一意の外部 ID(sts:ExternalId)を条件にすると、この経路を塞げます。AWS のサービスにロールを渡す場合は、aws:SourceArn と aws:SourceAccount で要求元を絞ります。

マルチテナントのアプリケーションが共通のロールを使うときは、ロールを引き受けるときにテナントの範囲だけを許すセッションポリシーを渡すと、そのセッションの権限をロールとの重なりに絞れます。

CHECK 3ここまでの確認

開発チームに Lambda 用のロールを自分で作らせつつ、自分より強いロールを作らせないためには?

答えと解説

答え: 1. ロールの作成を、決めた権限境界を付ける場合だけ許し、境界の変更は拒否する

権限境界はアイデンティティベースのポリシーが与えられる上限です。iam:PermissionsBoundary の条件で境界の付与を必須にすると、委任しても昇格を防げます(「委任とクロスアカウント」の章)。

作った権限をどう減らし続けるか?

権限は、作った日から余り始めます。セキュリティの柱も、不要な権限と使われていない ID を継続して見つけて外すことを求めています。そのための道具が IAM Access Analyzer です。

使い方 分かること 設計のどこで使うか
外部アクセスのアナライザー(信頼ゾーン=組織) 組織の外や匿名から届くバケット・キー・ロール RCP の効き目の確認、共有の棚卸し
未使用アクセスのアナライザー 使われていないロール・アクセスキー・パスワード・権限 許可セットとロールの定期的な見直し
ポリシーの生成 CloudTrail の記録から、実際に使った操作だけのたたき台 広すぎるロールを最小権限に寄せる
カスタムポリシーチェック 変更が新たなアクセスを許すか CI でデプロイ前に止める

マルチアカウントの権限でやってはいけないこと

  • 管理アカウントでワークロードを動かす(SCP が効かない場所に本番を置くことになる)
  • アカウントごとに IAM ユーザーと長期のアクセスキーを作って人に配る
  • 権限境界を付けずにロールの作成を委任する
  • 第三者に引き受けさせるロールに外部 ID の条件を付けない

判断の順番

  1. 要件を書く。 規模と増え方・規制・委任・外部との関係・運用体制。
  2. 組織の上限を決める。 SCP で中の人が外でしてはいけないことを、RCP で外の人が中のリソースにしてはいけないことを止める。検証用の OU で試してから広げる。
  3. 人の権限を配る。 Identity Center の許可セットを職務ごとに作り、グループに割り当てる。増え続けるなら ABAC とタグの統制を組にする。
  4. 委任の上限を決める。 ロールの作成を任せるなら権限境界を必須にする。第三者には外部 ID を付けたロールで渡す。
  5. 減らし続ける。 Access Analyzer の検出結果を定期的に見て、未使用の権限を外し、ポリシーの変更を CI で検査する。

どの層で絞るかにも得るものと捨てるものがあります。組織の層で止めるほど漏れは減りますが、例外の申請が中央に集まります。チームに委任するほど速く動けますが、境界と監査の仕組みが要ります。アカウントの分け方そのものは、次に読む記事で扱います。

参照ソース

SCOREこの記事の確認テスト

0/3問 正解

各章の「ここまでの確認」に答えると、ここに集まります。結果はこの端末のブラウザにだけ残り、サーバには送りません。

PRACTICEこの記事の論点を練習問題で確かめる

この記事が扱うサービスの問題だけを続けて解けます。練習問題は Google でログインした人が使えます(練習問題の一覧)。

HAND IT OVER人に渡すなら

一言で説明するなら

ビルの鍵の設計です。建物全体で入れない階を決め、社員には役職ごとの鍵束を配り、部署長には自分の部署の合鍵だけ作れる権限を渡します。

前提を持たない人にそのまま渡せる記事です。「後輩に説明する」「顧客に理由を伝える」の材料として。

FAQよくある質問

SCP と RCP はどう使い分けますか?

SCP は組織のメンバーアカウントのプリンシパル(ユーザーとロール)が使える操作の上限を決めます。RCP はメンバーアカウントのリソースに対して許される操作の上限を決め、組織の外のプリンシパルからのアクセスを止めるような用途に向きます。人と機械の行動を止めたいなら SCP、データの置き場所を外から守りたいなら RCP と考えると整理しやすくなります。どちらも権限を与えず、管理アカウントには効きません。

許可セットと IAM ロールはどちらで権限を配ればよいですか?

人のサインインには IAM Identity Center の許可セットを使います。許可セットを割り当てると、各アカウントに Identity Center が管理する IAM ロールが作られるので、アカウントごとにロールを手で作る必要がありません。アプリケーションや CI のような機械の権限は、そのアカウントの IAM ロールで持たせます。

権限の設計を決めたあと、何から始めればよいですか?

IAM Access Analyzer で組織を信頼ゾーンにした外部アクセスのアナライザーと、未使用アクセスのアナライザーを作り、いまの状態を棚卸しします。その結果から、組織の SCP と RCP を検証用の OU で試してから広げ、許可セットを職務ごとに整理します。ポリシーの変更は CI でカスタムポリシーチェックにかけると、新たなアクセスを許す変更をデプロイ前に止められます。

SAME TRACK同じ領域の記事

IAM ポリシーの評価の仕組み|許可と拒否はどの順で決まるか
IAM ポリシーの評価の仕組み|許可と拒否はどの順で決まるか 段1 入口仕組み
IAM とは何か|ユーザー・ロール・ポリシーを「誰が・何に・何をしてよいか」で読み解く
IAM とは何か|ユーザー・ロール・ポリシーを「誰が・何に・何をしてよいか」で読み解く 段1 入口とは
AccessDenied が出たときの調べ方|エラーメッセージの「because」から止めたポリシーの種類を絞る運用
AccessDenied が出たときの調べ方|エラーメッセージの「because」から止めたポリシーの種類を絞る運用 段2 構成運用