기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
컨텍스트 추가
컨텍스트는 정책 결정과 관련이 있지만 보안 주체, 작업 또는 리소스의 자격 증명의 일부가 아닌 정보입니다. 액세스 토큰 클레임은 컨텍스트입니다. 소스 IP 주소 집합에서만 또는 사용자가 로 로그인한 경우에만 작업을 허용해야 할 수 있습니다MFA. 애플리케이션은 이 컨텍스트 세션 데이터에 액세스할 수 있으며 권한 부여 요청에 채워야 합니다. Verified Permissions 권한 부여 요청의 컨텍스트 데이터는 contextMap
요소에서 JSON형식이 지정되어야 합니다.
이 콘텐츠를 설명하는 예제는 샘플 정책 스토어 에서 가져온 것입니다. 계속하려면 테스트 환경에 DigitalPetStore 샘플 정책 스토어를 생성합니다.
다음 컨텍스트 객체는 샘플 DigitalPetStore 정책 스토어를 기반으로 애플리케이션에 대한 각 Cedar 데이터 유형 중 하나를 선언합니다.
"context": {
"contextMap": {
"MfaAuthorized": {
"boolean": true
},
"AccountCodes": {
"set": [
{
"long": 111122223333
},
{
"long": 444455556666
},
{
"long": 123456789012
}
]
},
"UserAgent": {
"string": "My UserAgent 1.12"
},
"RequestedOrderCount": {
"long": 4
},
"NetworkInfo": {
"record": {
"IPAddress": {
"string": "192.0.2.178"
},
"Country": {
"string": "United States of America"
},
"SSL": {
"boolean": true
}
}
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
}
}
}
권한 부여 컨텍스트의 데이터 유형
- 불
-
바이너리 true
또는 false
값입니다. 이 예제에서 부울 값true
인 for는 고객이 주문 보기를 요청하기 전에 다단계 인증을 수행했음을 MfaAuthenticated
나타냅니다.
- 설정
-
컨텍스트 요소의 모음입니다. 세트 멤버는 이 예제와 같이 모두 동일한 유형이거나 중첩된 세트를 포함하여 서로 다른 유형일 수 있습니다. 이 예에서 고객은 3개의 서로 다른 계정과 연결됩니다.
- String
-
"
문자로 묶인 일련의 문자, 숫자 또는 기호입니다. 이 예에서 UserAgent
문자열은 고객이 주문 보기를 요청하는 데 사용한 브라우저를 나타냅니다.
- Long
-
정수. 이 예에서 는 이 요청이 고객이 과거 주문 중 4개를 보라고 요청하여 발생한 배치의 일부임을 RequestedOrderCount
나타냅니다.
- 레코드
-
속성 모음입니다. 요청 컨텍스트에서 이러한 속성을 선언해야 합니다. 스키마가 있는 정책 스토어에는 스키마에 이 엔터티와 엔터티의 속성이 포함되어야 합니다. 이 예제에서는 NetworkInfo
레코드에 사용자의 원본 IP, 클라이언트가 결정한 해당 IP의 지리적 위치, 전송 중 암호화에 대한 정보가 포함되어 있습니다.
- EntityIdentifier
-
요청 entities
요소에 선언된 엔터티 및 속성에 대한 참조입니다. 이 예에서는 직원의 주문이 승인되었습니다Bob
.
예제 DigitalPetStore 앱에서 이 예제 컨텍스트를 테스트하려면 요청 , entities
정책 스토어 스키마 및 정적 정책을 Customer Role - Get Order 설명으로 업데이트해야 합니다.
권한 부여 컨텍스트를 수락 DigitalPetStore 하도록 수정
처음에는 DigitalPetStore 가 매우 복잡한 정책 스토어가 아닙니다. 우리가 제공한 컨텍스트를 지원하는 사전 구성된 정책 또는 컨텍스트 속성은 포함되지 않습니다. 이 컨텍스트 정보로 예제 권한 부여 요청을 평가하려면 정책 스토어와 권한 부여 요청을 다음과 같이 수정합니다. 액세스 토큰 정보를 컨텍스트로 사용하는 컨텍스트 예제는 섹션을 참조하세요액세스 토큰 매핑.
- Schema
-
정책 스토어 스키마에 다음 업데이트를 적용하여 새 컨텍스트 속성을 지원합니다. 다음과 actions
같이 GetOrder
를 업데이트합니다.
"GetOrder": {
"memberOf": [],
"appliesTo": {
"resourceTypes": [
"Order"
],
"context": {
"type": "Record",
"attributes": {
"UserAgent": {
"required": true,
"type": "String"
},
"approvedBy": {
"name": "User",
"required": true,
"type": "Entity"
},
"AccountCodes": {
"type": "Set",
"required": true,
"element": {
"type": "Long"
}
},
"RequestedOrderCount": {
"type": "Long",
"required": true
},
"MfaAuthorized": {
"type": "Boolean",
"required": true
}
}
},
"principalTypes": [
"User"
]
}
}
요청 컨텍스트NetworkInfo
에 이름이 지정된 record
데이터 유형을 참조하려면 다음과 같이 스키마에 commonType 구성 요소를 생성합니다. commonType
구성은 서로 다른 엔터티에 적용할 수 있는 공유 속성 집합입니다.
Verified Permissions 시각적 스키마 편집기는 현재 commonType
구성 요소를 지원하지 않습니다. 스키마에 스키마를 추가하면 더 이상 시각적 모드 에서 스키마를 볼 수 없습니다.
"commonTypes": {
"NetworkInfo": {
"attributes": {
"IPAddress": {
"type": "String",
"required": true
},
"SSL": {
"required": true,
"type": "Boolean"
},
"Country": {
"required": true,
"type": "String"
}
},
"type": "Record"
}
}
- Policy
-
다음 정책은 제공된 각 컨텍스트 요소에 의해 이행되어야 하는 조건을 설정합니다. 고객 역할 - 주문 받기 라는 설명과 함께 기존 정적 정책을 기반으로 합니다. 이 정책은 처음에 요청을 하는 보안 주체가 리소스의 소유자일 때만 필요합니다.
permit (
principal in DigitalPetStore::Role::"Customer",
action in [DigitalPetStore::Action::"GetOrder"],
resource
) when {
principal == resource.owner &&
context.MfaAuthorized == true &&
context.UserAgent like "*My UserAgent*" &&
context.RequestedOrderCount <= 4 &&
context.AccountCodes.contains(111122223333) &&
context.NetworkInfo.Country like "*United States*" &&
context.NetworkInfo.SSL == true &&
context.NetworkInfo.IPAddress like "192.0.2.*" &&
context.approvedBy in DigitalPetStore::Role::"Employee"
};
이제 주문 검색 요청이 요청에 추가한 추가 컨텍스트 조건을 충족해야 합니다.
-
사용자는 로 로그인해야 합니다MFA.
-
사용자의 웹 브라우저에는 문자열이 포함되어야 User-Agent
합니다My UserAgent
.
-
사용자는 4개 이하의 주문을 보도록 요청했어야 합니다.
-
사용자의 계정 코드 중 하나는 여야 합니다111122223333
.
-
사용자의 IP 주소는 미국에서 시작되어야 하고, 암호화된 세션에 있어야 하며, IP 주소는 로 시작해야 합니다192.0.2.
.
-
직원은 주문을 승인해야 합니다. 권한 부여 요청의 entities
요소에서 역할Bob
이 인 사용자를 선언합니다Employee
.
- Request body
-
적절한 스키마 및 정책으로 정책 스토어를 구성한 후 Verified Permissions API 작업 에 이 권한 부여 요청을 제공할 수 있습니다IsAuthorized. entities
세그먼트에는 역할이 인 사용자Bob
인 의 정의가 포함되어 있습니다Employee
.
{
"principal": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"action": {
"actionType": "DigitalPetStore::Action",
"actionId": "GetOrder"
},
"resource": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"context": {
"contextMap": {
"MfaAuthorized": {
"boolean": true
},
"UserAgent": {
"string": "My UserAgent 1.12"
},
"RequestedOrderCount":{
"long": 4
},
"AccountCodes": {
"set": [
{"long": 111122223333},
{"long": 444455556666},
{"long": 123456789012}
]
},
"NetworkInfo": {
"record": {
"IPAddress": {"string": "192.0.2.178"},
"Country": {"string": "United States of America"},
"SSL": {"boolean": true}
}
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
}
}
},
"entities": {
"entityList": [
{
"identifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"attributes": {
"memberId": {
"string": "801b87f2-1a5c-40b3-b580-eacad506d4e6"
}
},
"parents": [
{
"entityType": "DigitalPetStore::Role",
"entityId": "Customer"
}
]
},
{
"identifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Bob"
},
"attributes": {
"memberId": {
"string": "49d9b81e-735d-429c-989d-93bec0bcfd8b"
}
},
"parents": [
{
"entityType": "DigitalPetStore::Role",
"entityId": "Employee"
}
]
},
{
"identifier": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"attributes": {
"owner": {
"entityIdentifier": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
}
}
},
"parents": []
}
]
},
"policyStoreId": "PSEXAMPLEabcdefg111111"
}