오늘날의 디지털 세계에서 권한 부여는 민감한 데이터를 보호하고 권한이 있는 사용자만 특정 리소스에 액세스할 수 있도록 하는 데 필수적입니다. 기존 권한 부여 시스템은 복잡하고 관리하기 어려울 수 있으며, 특히 대규모 복잡한 애플리케이션의 경우 더욱 그렇습니다. Ory Permissions는 유연하고 확장 가능하며 기술 스택에 독립적인 솔루션을 제공하여 이러한 과제를 해결하는 것을 목표로 하는 현대적인 권한 부여 시스템입니다.
애플리케이션에 권한 검사를 통합하는 방법
이 가이드에서는 프로젝트에서 Ory Permissions를 사용하는 방법을 보여줍니다. 새 프로젝트를 시작하든 기존 프로젝트에 보안 기능을 추가하든 Ory Permissions는 애플리케이션에서 누가 무엇을 할 수 있는지 제어하는 데 도움이 될 수 있습니다.
Ory 권한 이해
Zanzibar 논문의 디자인 아이디어를 따르면 Ory Permissions는 다른 허가 시스템에 비해 다음과 같은 장점을 제공합니다.
Ory Permissions에는 관계와 권한이라는 두 가지 주요 아이디어가 있습니다. 이는 애플리케이션에서 누가 무엇을 할 수 있는지 제어하는 데 도움이 됩니다.
- Ory Permissions에서 관계는 시스템에 저장된 것에 대한 정보 조각입니다. 관계에는 세 가지 부분이 포함됩니다. 무언가(파일과 같은), 그것이 어떻게 관련되어 있는지에 대한 설명(예: “소유”), 그리고 또 다른 것(사용자와 같은). 이러한 관계는 애플리케이션의 다른 부분들이 어떻게 연결되어 있는지 보여줍니다. 예를 들어, 사용자와 파일 사이에 관계를 만들어 사용자가 해당 파일의 소유자임을 나타낼 수 있습니다.
- Ory Permissions에서 권한은 TypeScript와 같은 언어로 작성된 규칙입니다. 이러한 규칙은 Ory Permissions에서 사물 간의 연결을 기반으로 누군가가 무언가를 할 수 있는지 여부를 결정하는 작은 프로그램과 같습니다. 이를 통해 앱에서 누가 무엇을 할 수 있는지 매우 정확하게 설정할 수 있으며, 앱에 필요한 것과 정확히 일치합니다.
- 이러한 규칙을 사물 간의 연결과 혼합하면 앱에서 누가 무엇에 액세스할 수 있는지에 대한 자세한 계획을 세울 수 있습니다. Ory Permissions를 사용하면 이러한 계획을 유연하게 만들어 모든 종류의 앱에 맞출 수 있습니다. 즉, 앱을 안전하게 유지하면서 원하는 만큼 간단하거나 복잡한 규칙을 만들 수 있습니다.
- Ory Permissions는 앱에서 이러한 규칙과 연결을 처리하는 도구도 제공합니다. 예를 들어, “네임스페이스”를 사용하여 물건을 그룹으로 정리할 수 있으며 앱에서 Ory Permissions와 통신하여 이러한 규칙을 자동으로 설정하고 변경할 수 있는 특별한 방법이 있습니다.
Ory Permissions의 이점
Ory Permissions는 유연하고 확장 가능하며 안전한 액세스 제어를 제공하여 모든 기술 스택과 원활하게 통합되고, 관리를 간소화하며 최적의 성능을 보장합니다.
유연성: Ory Permissions는 광범위한 사용 사례에 유연하고 적응할 수 있도록 설계되었습니다. 역할 기반 액세스 제어(RBAC), 속성 기반 액세스 제어(ABAC), 정책 기반 액세스 제어(PBAC)를 포함한 다양한 권한 부여 모델을 지원합니다. 이러한 유연성을 통해 애플리케이션의 특정 요구 사항을 충족하도록 권한 부여 시스템을 조정할 수 있습니다.
확장성: Ory Permissions는 앱과 함께 성장합니다. 속도가 느려지지 않고 많은 사용자, 권한 및 기타 사항을 처리할 수 있습니다. 이는 소규모 및 대규모 회사 모두에게 적합합니다.
기술 스택에 구애받지 않음: Ory Permissions는 모든 기술 설정과 호환됩니다. 사용하는 모든 프로그래밍 언어, 프레임워크 또는 데이터베이스에 적합합니다. 따라서 어떤 기술을 사용하든 시스템에 쉽게 추가할 수 있습니다.
사용의 용이성: Ory Permissions는 사용과 제어가 간편합니다. 누가 무엇을 할 수 있는지 관리하기 위한 간편한 인터페이스가 있습니다. 이를 통해 개발자와 관리자 모두 권한 전문가가 아니더라도 쉽게 사용할 수 있습니다.
보안: Ory Permissions는 매우 안전합니다. 데이터를 안전하게 유지하기 위해 최상의 보안 관행을 따릅니다. 적절한 사람만 중요한 정보에 액세스할 수 있으므로 모든 것이 안전하게 유지됩니다.
Ory Permissions 작동 방식
Ory Permissions는 두 가지 주요 구성 요소로 구성됩니다.
- 오리 케토 허가 서버: Ory Keto Permission Server는 Ory Permissions의 핵심입니다. 권한, 역할 및 정책을 저장하고 관리하는 오픈소스 권한 부여 서버입니다.
- Ory SDK: Ory Permissions는 다양한 프로그래밍 언어와 프레임워크에 대한 SDK를 제공합니다. 이러한 SDK를 사용하면 Ory Permissions를 애플리케이션에 통합하고 Ory Keto Permission Server(프로그래밍 언어인 dotnet, go, java, python, typescript, ruby 및 dart에서 사용 가능)와 상호 작용할 수 있습니다.
사용자가 애플리케이션의 리소스에 액세스하려고 하면 애플리케이션은 먼저 Ory Keto Permission Server에 요청을 보냅니다. 그런 다음 Ory Keto Permission Server는 관련 정책에 대해 사용자의 권한을 평가하고 리소스에 대한 액세스를 허용할지 거부할지 결정합니다.
케토 컨셉
- 관계: – 관계는 Ory Permissions의 기본 데이터 유형입니다. 이는 관리하려는 리소스인 객체와 이러한 리소스에 액세스하려는 사람 또는 사물인 주체 간의 관계를 인코딩합니다. 관계는 네임스페이스와 연관되며 여기서 관계를 정의하고 구성해야 합니다.
사용자:user1은 그룹:group1의 멤버에 있습니다.
사용자:user2는 Document:readme.txt의 리더에 있습니다.
폴더는 Document:package.json의 부모에 있습니다.
User1은 Group1의 멤버입니다. 즉, User1은 Group1에 속해 있으며, 이는 User1이 Group1과 관련된 리소스나 권한에 접근할 가능성이 있음을 의미합니다.
User2는 “readme.txt” 문서의 독자입니다. 이는 User2가 “readme.txt”라는 문서를 읽을 수 있는 권한이 있음을 나타내며, 이는 User2가 해당 문서의 내용을 볼 수 있음을 의미합니다.
폴더는 문서 “package.Json”의 부모입니다. 이는 폴더가 문서 “package.Json”을 포함하고 있음을 의미하며, 폴더가 문서를 보관하는 계층적 관계를 의미합니다.
https://research.google/pubs/zanzibar-googles-consistent-global- a uthorization-system/
그룹: group1#members@User:user1
그래픽 표현은 다음과 같습니다.
Ory Permissions에서 네임스페이스는 두 가지 주요 작업을 수행합니다.
- 그들은 물건과 사람들을 정리하는 데 도움을 줍니다.
- 이는 권한을 검사할 때 어떤 연결을 검사할지 결정하는 규칙을 가지고 있습니다.
각 네임스페이스에는 어떤 연결을 검사할지 결정하는 권한이 많이 있습니다. 예를 들어, 사용자 “밥”이 “문서” 네임스페이스에서 “readme.txt”라는 파일을 볼 수 있는지 확인할 때 시스템은 특정 연결을 찾아 해당 결정을 내립니다.
User: Document:readme.txt의 뷰어에 있는 bob입니다.
// 모든 뷰어가 문서를 볼 수 있습니다
User: Bob은 Document:readme.txt의 편집기에 있습니다.
// 모든 편집자가 문서를 볼 수 있습니다
User: Bob은 Document:readme.txt의 소유자입니다.
// 모든 소유자가 문서를 볼 수 있습니다
Ory Permission Language에서 네임스페이스는 카테고리와 같으며, User, Document, Folder 또는 Access Key와 같이 설명하는 내용의 단수형을 따서 명명해야 합니다. 각 이름은 User 또는 Document와 같이 대문자로 시작해야 합니다.
네임스페이스 내에서 관계를 명명할 때는 주어와 객체가 어떻게 관련되어 있는지 설명하는 복수형 단어를 사용합니다. 각 관계는 영어 문장으로 이해되어야 합니다. 예를 들어:
주어는 목적어의 멤버에 속합니다.
객체는 파일이나 항목과 같은 앱의 사물에 부여된 이름입니다. 앱은 각 사물에 고유한 이름을 부여해야 하며, 최대 64자까지 가능합니다.
이름에 UUID를 사용하는 것이 좋습니다. 고유하고 안전하기 때문입니다. 하지만 URL이나 다른 무작위 코드를 사용할 수도 있습니다. 이름이 같으면 객체는 동일한 것으로 간주됩니다.
예를 들어, Ory Permissions에서 어떤 문자열이든 사물의 이름으로 사용할 수 있지만 앱 데이터를 이름에 직접 넣는 것은 좋은 생각이 아닙니다. 대신 UUID를 사용하여 앱 데이터를 객체 이름과 연결합니다. 이렇게 하면 다음이 보장됩니다.
- 단일 주요 데이터 소스와 손쉬운 업데이트.
- 이름에는 #과 @를 제외한 모든 문자를 사용할 수 있습니다.
예를 들어, 이는 값 범위에 대한 규칙을 설정하는 데 사용될 수 있습니다. 앱은 UUID가 특정 조건에 어떻게 대응하는지 알고 있습니다.
Ory Permissions에는 다음과 같은 관계가 있습니다.
Ory Keto에서 주체는 특정 개인이나 개인 그룹을 지칭할 수 있는 데이터 유형입니다. 이러한 개인은 사용자 이름과 같이 앱에서 선택한 이름으로 식별할 수 있거나 개인 그룹일 수 있습니다.
주제 ID:
- 이는 사용자 이름이나 고유 코드처럼 개인에게 부여된 이름일 뿐입니다.
- UUID는 고유하고 안전하므로 사용하는 것이 가장 좋지만 URL이나 다른 코드를 사용할 수도 있습니다.
- 이름이 같으면 두 주체는 동일한 것으로 간주됩니다.
과목 세트:
이는 파일이나 리소스와 같은 어떤 것과 특정한 연결이 있는 개인 그룹을 말합니다.
Ory Permission은 간접적인 연결을 허용하기 때문에 매우 유연합니다.
특정 파일에 누가 접근할 수 있는지, 권한을 상속받을 수 있는지 등을 설정하는 데 사용할 수 있습니다.
주어 집합은 다른 주어 집합을 참조할 수도 있고, 비어 있을 수도 있는데, 이는 무언가와 관련된 모든 주어를 포함한다는 것을 의미합니다.
주제 집합은 또한 관계 네트워크 내의 모든 중간 연결을 나타냅니다.
기본 예:
간단한 예로, 앱은 사용자 이름이나 고유 ID를 사용하여 개인을 식별할 수 있습니다.
예를 들어, 사용자는 “zelatrix”와 같은 사용자 이름이나 “480158d4-0031-4412-9453-1bb0cdf76104″와 같은 고유 ID를 가질 수 있습니다.
이렇게 생각해 보세요. 주제는 이야기 속 등장인물과 같고, 주제 집합은 그들이 속한 그룹이나 이야기 속에서 그들이 하는 역할과 같습니다.