View a markdown version of this page

예제 3: OPA 및 Rego를 사용한 RBAC 및 ABAC에 대한 다중 테넌트 액세스 제어 - AWS 권장 가이드

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

예제 3: OPA 및 Rego를 사용한 RBAC 및 ABAC에 대한 다중 테넌트 액세스 제어

이전 섹션의 RBAC 예제를 개선하기 위해 사용자에게 속성을 추가할 수 있습니다. 

OPA 및 Rego를 사용하는 RBAC 및 ABAC

이 예제는 이전 예제와 동일한 역할을 포함하지만 사용자 속성를 추가합니다account_lockout_flag. 이는 특정 역할과 연결되지 않은 사용자별 속성입니다. 이 예제에서 이전에 사용한 것과 동일한 RBAC 외부 데이터를 사용할 수 있습니다. 

{ "roles": { "tenant_a": { "all_access_role": ["viewData", "updateData"] }, "tenant_b": { "update_data_role": ["updateData"], "view_data_role": ["viewData"] } } }

account_lockout_flag 사용자 Bob에 /viewData/tenant_a 대한 용 OPA 쿼리에 대한 입력의 일부로 사용자 속성을 데이터 서비스에 전달할 수 있습니다.

{ "tenant_id": "tenant_a", "role": "all_access_role", "path": ["viewData", "tenant_a"], "method": "GET", "account_lockout_flag": "true" }

액세스 결정에 대해 쿼리되는 규칙은 이전 예제와 유사하지만 account_lockout_flag 속성을 확인하기 위한 추가 줄이 포함되어 있습니다.

default allowViewData = false allowViewData = true { input.method == "GET" input.path = ["viewData", tenant_id] input.tenant_id == tenant_id role_permissions := data.roles[input.tenant_id][input.role][_] contains(role_permissions, "viewData") input.account_lockout_flag == "false" }

이 쿼리는의 권한 부여 결정을 반환합니다false. 이는 account_lockout_flag attribute가 Bob을 true 위한 것이고, Bob이 올바른 역할과 테넌트를 가지고 있지만 Rego 규칙이 액세스를 allowViewData 거부하기 때문입니다.