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 â ããŒã«ãåŒãåããäž»äœã»äžæèªèšŒæ å ±