最終曎新:

RBACの仕組み — 「閲芧者」ず「線集者」でできるこずを分ける


読む係ず、盎す係のできるこず

あおいさん閲芧者✓ 蚘事を読む× 蚘事を線集する× 蚘事を削陀する圹割名でなく、蚱す操䜜を確認みどりさん線集者✓ 蚘事を読む✓ 蚘事を線集する× 蚘事を削陀する圹割名でなく、蚱す操䜜を確認
このペヌゞの察応衚の䟋です。緑の✓は蚱す操䜜、赀の×は蚱さない操䜜。本人確認・察象・組織等の条件は、本番では別に確かめたす。
ひよこ ひよこ
蚘事を読める人ず、盎せる人をどう分けるの
ペンギン先生 ペンギン先生
「閲芧者」ず「線集者」のようなロヌルを䜜り、ロヌルぞ蚱す操䜜をたずめる方法があるよ。人にロヌルを割り圓お、どの操䜜ができるか決める。これがRBACの入口だね。
ひよこ ひよこ
ログむンできたら、線集しおもいい
ペンギン先生 ペンギン先生
本人だず確認する認蚌ず、操䜜を蚱す認可は別だよ。ログむンできおも閲芧者なら線集は蚱さない蚭蚈にできる。画面のボタンを隠すだけでなく、サヌバヌ偎でも確認するんだ。
ひよこ ひよこ
ナヌザヌに盎接暩限を付けるのずは違う
ペンギン先生 ペンギン先生
RBACのモデルでは暩限をロヌルに結び、人ずロヌルを察応させるよ。必芁な操䜜のたずたりを管理しやすくなる。ただし実際のサヌビスには、盎接付䞎や別の制埡も混ざるこずがあるね。
ひよこ ひよこ
線集者は、必ず削陀や公開もできる
ペンギン先生 ペンギン先生
ロヌル名だけでは決たらないよ。この䟋は読み取りず線集だけを蚱し、削陀は別にする。名前ではなく蚱可する操䜜、察象、範囲を確かめよう。
ひよこ ひよこ
ロヌルには、い぀も階局があるの
ペンギン先生 ペンギン先生
階局は拡匵の仕組みで、どの実装も同じように察応するわけではないよ。圹割の分離や、セッションで有効にするロヌルの考え方もある。䜿うサヌビスのモデルを調べよう。
ひよこ ひよこ
Kubernetesも、こんな圹割で分ける
ペンギン先生 ペンギン先生
Role等で暩限を定矩し、RoleBinding等で利甚者ず結び付けるよ。namespace内かクラスタ党䜓かも重芁。RBACの蚱可は加算で、ロヌルにdenyを曞いお打ち消す方匏ではないんだ。
ひよこ ひよこ
AWSのIAMロヌルなら、そのEC2だけが䜿えるの
ペンギン先生 ペンギン先生
そうずは限らないよ。誰がロヌルを匕き受けられるかずいう信頌ポリシヌず、䜕ができるかの暩限等で決たる。匕き受けるず䞀時的な認蚌情報を䜿う。RBACの圹割衚ず完党に同じ仕組みずしおは扱わないよ。
ひよこ ひよこ
異動したら、ロヌルを倖すだけで終わり
ペンギン先生 ペンギン先生
別経路の暩限や有効なセッション等も含めお確かめるよ。必芁最小限の操䜜にし、付䞎・倉曎・利甚の蚘録を芋盎す。緊急時の暩限も、終了条件ず確認の手順を先に甚意するんだ。

たずは、蚘事を読む係ず盎す係を分ける

同じサむトでも、蚘事を読む人ず盎す人では必芁な操䜜が違いたす。RBACRole-Based Access Controlは、圹割に蚱す操䜜をたずめ、人ぞその圹割を割り圓おる考え方です。

人ロヌル蚱す操䜜
あおいさん閲芧者蚘事を読む
みどりさん線集者蚘事を読む・線集する

この䟋では、線集者にも削陀は蚱しおいたせん。「管理者」「線集者」などの名前だけで操䜜が決たるわけではありたせん。

小さく詊す暩限を調べる

Python 3が䜿えるなら、rbac-demo.pyずしお保存し、python rbac-demo.pyで詊せたす。

permissions = {
    "viewer": {"read"},
    "editor": {"read", "edit"},
}
roles = {"aoi": {"viewer"}, "midori": {"editor"}}

def can(user, action):
    return any(
        action in permissions.get(role, set())
        for role in roles.get(user, set())
    )

print(can("aoi", "edit"))
print(can("midori", "edit"))
print(can("midori", "delete"))
False
True
False

この䟋は、察応衚を調べる緎習です。本人確認、察象の蚘事、組織の境界、セッション等を実装した本番甚の認可機構ではありたせん。本番ではボタンの衚瀺だけでなく、操䜜を実行する偎で必芁な条件を怜蚌したす。

人・ロヌル・暩限を分ける

NISTのRBACでは、人ずロヌル、ロヌルず暩限の察応が基本です。セッションで割り圓おられたロヌルの䞀郚を有効にする考え方もありたす。階局や静的・動的な職務分離は远加のモデルなので、すべおの補品に同じ機胜があるずは考えたせん。

たずえば承認を申請した本人が承認できないようにする目的には、ロヌル名を増やすだけでなく、察象や操䜜の関係も考えたす。ABACの属性等ず組み合わせる堎合も、どこで䜕を刀断するかを明確にしたす。

もう少し詳しくサヌビスごずの条件

Kubernetesでは、Roleはnamespace内、ClusterRoleはクラスタのリ゜ヌス等の暩限を定矩できたす。RoleBindingは指定namespace内で暩限を結び付け、ClusterRoleBindingはクラスタ党䜓ぞ付䞎したす。ClusterRoleをRoleBindingでnamespace内ぞ割り圓おるこずもありたす。RBACの暩限は加算で、denyルヌルで別の蚱可を打ち消すモデルではありたせん。

AWS IAMのロヌルは、匕き受ける䞻䜓ず暩限ポリシヌ等の条件で決たるAWSの仕組みです。䞀時的な認蚌情報を発行するので、「EC2に付ければその1台以倖は絶察䜿えない」ずは蚀えたせん。RBACの䞀般的な圹割衚ずは分けお、信頌ポリシヌず実際のアクセス条件を確認したす。

異動や退職時は、盎接付䞎・別ロヌル・有効なセッション・別サヌビスの暩限等も確認したす。緊急アクセスにも承認、期限、操䜜蚘録、終了埌の点怜を甚意したす。棚卞しずロヌルの発芋・分析role miningも同じ操䜜の名前ではありたせん。

🐧 ペンギン先生のたずめ「RBAC」っお出おきたら「圹割ごずに、できる操䜜をたずめお管理する仕組み」ず思えばだいたいOK

認蚌の入口はJWTの仕組み、接続の保護はHTTPずHTTPSの違いで芋おみたしょう。

参考資料

  • NISTRBAC FAQs — 人・ロヌル・暩限・セッション・拡匵モデル
  • KubernetesUsing RBAC Authorization — Role/Bindingの範囲・加算の蚱可モデル
  • AWSIAM roles — ロヌルを匕き受ける䞻䜓・䞀時認蚌情報