As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Adicionando contexto
O contexto é a informação relevante para as decisões políticas, mas não faz parte da identidade de seu diretor, ação ou recurso. A reivindicação do token de acesso é contextual. Talvez você queira permitir uma ação somente de um conjunto de endereços IP de origem ou somente se o usuário tiver feito login com o MFA. Seu aplicativo tem acesso a esses dados contextuais da sessão e deve preenchê-los para solicitações de autorização. Os dados de contexto em uma solicitação de autorização de Permissões verificadas devem estar JSON-formatted em um contextMap elemento.
Os exemplos que ilustram esse conteúdo vêm de um exemplo de armazenamento de políticas. Para acompanhar, crie o repositório DigitalPetStorede políticas de amostra em seu ambiente de teste.
O objeto de contexto a seguir declara um de cada tipo de dados do Cedar para um aplicativo com base no exemplo de armazenamento de DigitalPetStorepolíticas.
"context": {
"contextMap": {
"AccountCodes": {
"set": [
{
"long": 111122223333
},
{
"long": 444455556666
},
{
"long": 123456789012
}
]
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
},
"MfaAuthorized": {
"boolean": true
},
"NetworkInfo": {
"record": {
"IPAddress": {
"string": "192.0.2.178"
},
"Country": {
"string": "United States of America"
},
"SSL": {
"boolean": true
}
}
},
"RequestedOrderCount": {
"long": 4
},
"UserAgent": {
"string": "My UserAgent 1.12"
}
}
}
Tipos de dados no contexto de autorização
- Booleano
-
Um binário true ou false valor. No exemplo, o valor booleano de true for MfaAuthenticated indica que o cliente realizou a autenticação multifatorial antes de solicitar a visualização do pedido.
- Defina
-
Uma coleção de elementos de contexto. Os membros do conjunto podem ser todos do mesmo tipo, como neste exemplo, ou de tipos diferentes, incluindo um conjunto aninhado. No exemplo, o cliente está associado a três contas diferentes.
- String
-
Uma sequência de letras, números ou símbolos, entre " caracteres. No exemplo, a UserAgent string representa o navegador que o cliente usou para solicitar a visualização do pedido.
- Longo
-
Um valor inteiro. No exemplo, RequestedOrderCount indica que essa solicitação faz parte de um lote que resultou da solicitação do cliente para visualizar quatro de seus pedidos anteriores.
- Registro
-
Uma coleção de atributos. Você deve declarar esses atributos no contexto da solicitação. Um repositório de políticas com um esquema deve incluir essa entidade e os atributos da entidade no esquema. No exemplo, o NetworkInfo registro contém informações sobre o IP de origem do usuário, a geolocalização desse IP conforme determinado pelo cliente e a criptografia em trânsito.
- EntityIdentifier
-
Uma referência a uma entidade e atributos declarados no entities elemento da solicitação. No exemplo, o pedido do usuário foi aprovado pelo funcionárioBob.
Para testar esse contexto de exemplo no DigitalPetStoreaplicativo de exemplo, você deve atualizar sua solicitaçãoentities, seu esquema de armazenamento de políticas e a política estática com a descrição Customer Role - Get Order.
Modificando DigitalPetStore para aceitar o contexto de autorização
Inicialmente, não DigitalPetStoreé um repositório de políticas muito complexo. Ele não inclui nenhuma política ou atributo de contexto pré-configurado para dar suporte ao contexto que apresentamos. Para avaliar um exemplo de solicitação de autorização com essas informações de contexto, faça as seguintes modificações em seu repositório de políticas e em sua solicitação de autorização. Para exemplos de contexto com informações de token de acesso como contexto, consulte Mapeamento de tokens de Amazon Cognito acesso e Mapeamento de tokens de acesso OIDC.
- Schema
-
Aplique as seguintes atualizações ao esquema do repositório de políticas para oferecer suporte aos novos atributos de contexto. Atualize GetOrder da actions seguinte forma.
"GetOrder": {
"memberOf": [],
"appliesTo": {
"resourceTypes": [
"Order"
],
"context": {
"type": "Record",
"attributes": {
"AccountCodes": {
"type": "Set",
"required": true,
"element": {
"type": "Long"
}
},
"approvedBy": {
"name": "User",
"required": true,
"type": "Entity"
},
"MfaAuthorized": {
"type": "Boolean",
"required": true
},
"NetworkInfo": {
"type": "NetworkInfo",
"required": true
},
"RequestedOrderCount": {
"type": "Long",
"required": true
},
"UserAgent": {
"required": true,
"type": "String"
}
}
},
"principalTypes": [
"User"
]
}
}
Para referenciar o tipo de record dados nomeado NetworkInfo em seu contexto de solicitação, crie uma construção CommonType em seu esquema adicionando o seguinte ao seu esquema anterior. actions Uma commonType construção é um conjunto compartilhado de atributos que você pode aplicar a diferentes entidades.
"commonTypes": {
"NetworkInfo": {
"attributes": {
"IPAddress": {
"type": "String",
"required": true
},
"SSL": {
"required": true,
"type": "Boolean"
},
"Country": {
"required": true,
"type": "String"
}
},
"type": "Record"
}
},
- Policy
-
A política a seguir configura condições que devem ser atendidas por cada um dos elementos de contexto fornecidos. Ele se baseia na política estática existente com a descrição Customer Role - Get Order. Inicialmente, essa política exige apenas que o principal que faz uma solicitação seja o proprietário do recurso.
permit (
principal in DigitalPetStore::Role::"Customer",
action in [DigitalPetStore::Action::"GetOrder"],
resource
) when {
principal == resource.owner &&
context.AccountCodes.contains(111122223333) &&
context.approvedBy in DigitalPetStore::Role::"Employee" &&
context.MfaAuthorized == true &&
context.NetworkInfo.Country like "*United States*" &&
context.NetworkInfo.IPAddress like "192.0.2.*" &&
context.NetworkInfo.SSL == true &&
context.RequestedOrderCount <= 4 &&
context.UserAgent like "*My UserAgent*"
};
Agora exigimos que a solicitação para recuperar um pedido atenda às condições de contexto adicionais que adicionamos à solicitação.
-
O usuário deve ter feito login com o MFA.
-
O navegador da web do usuário User-Agent deve conter a stringMy UserAgent.
-
O usuário deve ter solicitado a visualização de 4 ou menos pedidos.
-
Um dos códigos de conta do usuário deve ser111122223333.
-
O endereço IP do usuário deve ser originário dos Estados Unidos da América, ele deve estar em uma sessão criptografada e seu endereço IP deve começar com. 192.0.2.
-
Um funcionário deve ter aprovado seu pedido. No entities elemento da solicitação de autorização, declararemos um usuário Bob que tem a função deEmployee.
- Request body
-
Depois de configurar seu repositório de políticas com o esquema e a política apropriados, você pode apresentar essa solicitação de autorização à operação IsAuthorizedda API de permissões verificadas. Observe que o entities segmento contém uma definição deBob, um usuário com uma função deEmployee.
{
"principal": {
"entityType": "DigitalPetStore::User",
"entityId": "Alice"
},
"action": {
"actionType": "DigitalPetStore::Action",
"actionId": "GetOrder"
},
"resource": {
"entityType": "DigitalPetStore::Order",
"entityId": "1234"
},
"context": {
"contextMap": {
"AccountCodes": {
"set": [
{"long": 111122223333},
{"long": 444455556666},
{"long": 123456789012}
]
},
"approvedBy": {
"entityIdentifier": {
"entityId": "Bob",
"entityType": "DigitalPetStore::User"
}
},
"MfaAuthorized": {
"boolean": true
},
"NetworkInfo": {
"record": {
"Country": {"string": "United States of America"},
"IPAddress": {"string": "192.0.2.178"},
"SSL": {"boolean": true}
}
},
"RequestedOrderCount":{
"long": 4
},
"UserAgent": {
"string": "My UserAgent 1.12"
}
}
},
"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"
}