엔터티의 속성에 따라 액세스 허용하기(ABAC) - Amazon Verified Permissions

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

엔터티의 속성에 따라 액세스 허용하기(ABAC)

ABAC(속성 기반 액세스 제어)는 속성에 근거하여 권한을 정의하는 권한 부여 전략입니다. Verified Permissions를 사용하면 속성을 보안 주체, 작업 및 리소스에 추가할 수 있습니다. 그러면 요청의 컨텍스트를 구성하는 보안 주체, 작업 및 리소스의 속성을 평가하는 정책의 whenunless 조항 내에서 이러한 속성을 참조할 수 있습니다.

다음 예에서는 Cedar 정책 언어 참조 가이드의 예제 스키마 섹션에 PhotoFlash 설명된 가상 애플리케이션에 정의된 속성을 사용합니다.

이 예제는 직무 등급이 5등급 이상인 HardwareEngineering 부서의 모든 보안 주체가 device_prototypes 앨범에 있는 사진을 보고 나열할 수 있도록 하는 정책을 만드는 방법을 보여줍니다.

permit( principal, action in [Action::"listPhotos", Action::"view"], resource in Album::"device_prototypes" ) when { principal.department == "HardwareEngineering" && principal.jobLevel >= 5 };

이 예제에서는 사용자 alice가 파일 유형이 JPEG인 모든 리소스를 볼 수 있도록 허용하는 정책을 생성할 수 있는 방법을 보여 줍니다.

permit( principal == User::"alice", action == Action::"view", resource ) when { resource.fileType == "JPEG" };

작업에는 컨텍스트 속성이 있습니다. 권한 부여 요청 시 이러한 속성을 전달해야 합니다. context 이 예제는 사용자가 alice 모든 readOnly 작업을 수행할 수 있도록 허용하는 정책을 만드는 방법을 보여줍니다. 스키마의 작업 appliesTo 속성을 설정할 수도 있습니다. 이는 예를 들어 사용자가 특정 유형의 PhotoFlash::Photo 리소스에 대해서만 권한 부여를 시도할 수 있도록 하려는 경우 해당 리소스에 ViewPhoto 대한 유효한 작업을 지정합니다.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { context has readOnly && context.readOnly == true };

그러나 스키마에서 작업의 속성을 설정하는 더 좋은 방법은 작업을 기능적 작업 그룹으로 정렬하는 것입니다. 예를 들어 이름이 ReadOnlyPhotoAccess 지정되고 작업 그룹의 ReadOnlyPhotoAccess 구성원이 PhotoFlash::Action::"ViewPhoto" 되도록 설정된 작업을 만들 수 있습니다. 이 예제에서는 Alice에게 해당 그룹의 읽기 전용 작업에 대한 액세스 권한을 부여하는 정책을 만드는 방법을 보여줍니다.

permit( principal == PhotoFlash::User::"alice", action, resource ) when { action in PhotoFlash::Action::"ReadOnlyPhotoAccess" };

이 예제에서는 모든 보안 주체가 owner 속성을 보유한 리소스에 모든 작업을 수행할 수 있도록 허용하는 정책을 생성할 수 있는 방법을 보여 줍니다.

permit( principal, action, resource ) when { principal == resource.owner };

이 예제에서는 보안 주체의 department 속성이 리소스의 department 속성과 일치하는 경우 모든 보안 주체가 모든 리소스를 볼 수 있도록 허용하는 정책을 생성하는 방법을 보여줍니다.

참고

엔터티에 정책 조건에 언급된 속성이 없는 경우 권한 부여 결정을 내릴 때 해당 정책이 무시되고 해당 엔터티에 대한 해당 정책의 평가가 실패합니다. 예를 들어 department 속성이 없는 보안 주체는 이 정책에 따라 리소스에 대한 액세스 권한을 부여받을 수 없습니다.

permit( principal, action == Action::"view", resource ) when { principal.department == resource.owner.department };

이 예제에서는 보안 주체가 리소스의 owner에 해당하거나 보안 주체가 리소스의 admins 그룹에 속해 있는 경우 모든 보안 주체가 리소스에 모든 작업을 수행할 수 있도록 허용하는 정책을 만드는 방법을 보여줍니다.

permit( principal, action, resource, ) when { principal == resource.owner || resource.admins.contains(principal) };