Armazenamentos de políticas vinculados à API - Amazon Verified Permissions

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á.

Armazenamentos de políticas vinculados à API

Ao criar um novo repositório de políticas no console Amazon Verified Permissions, você pode escolher a opção Configurar com o API Gateway e uma fonte de identidade. Com essa opção, você cria um armazenamento de políticas vinculado à API, um modelo de autorização para aplicativos que se autenticam com grupos de usuários do Amazon Cognito ou com um provedor de identidade (IdP) do OIDC e obtêm dados das APIs do Amazon API Gateway. Para começar, consulte o Crie um repositório de políticas com uma API conectada e um provedor de identidade.

Importante

Os repositórios de políticas que você cria com a opção Configurar com o API Gateway e uma fonte de identidade no console de Permissões Verificadas não se destinam à implantação imediata na produção. Com seu repositório de políticas inicial, finalize seu modelo de autorização e exporte os recursos do repositório de políticas para o. CloudFormation Implante permissões verificadas na produção de forma programática com o AWS Cloud Development Kit (CDK). Para ter mais informações, consulte Passando para a produção com AWS CloudFormation.

Em um repositório de políticas vinculado a uma API e a uma fonte de identidade, seu aplicativo apresenta um token de grupo de usuários em um cabeçalho de autorização ao fazer uma solicitação à API. A fonte de identidade do seu repositório de políticas fornece validação de token para permissões verificadas. O token principal forma as solicitações de autorização com a IsAuthorizedWithTokenAPI. As Permissões Verificadas criam políticas em torno da associação de seus usuários ao grupo, conforme apresentado em uma declaração de grupos em identidade (ID) e tokens de acesso, por exemplocognito:groups, para grupos de usuários. Sua API processa o token do seu aplicativo em um autorizador Lambda e o envia à Verified Permissions para uma decisão de autorização. Quando sua API recebe a decisão de autorização do autorizador Lambda, ela passa a solicitação para sua fonte de dados ou nega a solicitação.

Componentes da fonte de identidade e autorização do API Gateway com permissões verificadas
  • Um grupo de usuários do Amazon Cognito ou IdP do OIDC que autentica e agrupa usuários. Os tokens dos usuários preenchem a associação ao grupo e o principal ou contexto que as Permissões Verificadas avaliam em seu repositório de políticas.

  • Uma API REST do API Gateway. As permissões verificadas definem ações de caminhos e métodos de API, por exemploMyAPI::Action::get /photo.

  • Uma função Lambda e um autorizador Lambda para sua API. A função Lambda recebe tokens portadores do seu grupo de usuários, solicita autorização das Permissões Verificadas e retorna uma decisão ao API Gateway. O fluxo de trabalho Configurar com o Cognito e o API Gateway cria automaticamente esse autorizador Lambda para você.

  • Um repositório de políticas de permissões verificadas. A fonte de identidade do repositório de políticas é seu grupo de usuários. O esquema do repositório de políticas reflete a configuração da sua API, e as políticas vinculam os grupos de usuários às ações permitidas da API.

  • Um aplicativo que autentica usuários com seu IdP e anexa tokens às solicitações da API.

Como as permissões verificadas autorizam solicitações de API

Quando você cria um novo repositório de políticas e seleciona a opção Configurar com o Cognito e o API Gateway, o Verified Permissions cria o esquema e as políticas do repositório de políticas. O esquema e as políticas refletem as ações da API e os grupos de grupos de usuários que você deseja autorizar a realizar as ações. As permissões verificadas também criam a função e o autorizador do Lambda. Você deve configurar o novo autorizador em um método na sua API.

Um diagrama que exibe o fluxo de uma solicitação de autorização com o Amazon API Gateway, o Amazon Cognito e o Amazon Verified Permissions.
  1. Seu usuário faz login com seu aplicativo por meio do Amazon Cognito ou de outro IdP do OIDC. O IdP emite tokens de ID e acesso com as informações do usuário.

  2. Seu aplicativo armazena os JWTs. Para obter mais informações, consulte Uso de tokens com grupos de usuários no Guia do Desenvolvedor do Amazon Cognito.

  3. Seu usuário solicita dados que seu aplicativo deve recuperar de uma API externa.

  4. Seu aplicativo solicita dados de uma API REST no API Gateway. Ele anexa um ID ou token de acesso como cabeçalho da solicitação.

  5. Se sua API tiver um cache para a decisão de autorização, ela retornará a resposta anterior. Se o armazenamento em cache estiver desativado ou a API não tiver cache atual, o API Gateway passará os parâmetros da solicitação para um autorizador Lambda baseado em token.

  6. A função Lambda envia uma solicitação de autorização para um repositório de políticas de permissões verificadas com a IsAuthorizedWithTokenAPI. A função Lambda transmite os elementos de uma decisão de autorização:

    1. O token do usuário como principal.

    2. O método da API combinado com o caminho da API, por exemploGetPhoto, como a ação.

    3. O termo Application como recurso.

  7. As permissões verificadas validam o token. Para obter mais informações sobre como os tokens do Amazon Cognito são validados, consulte Autorização com permissões verificadas da Amazon no Guia do desenvolvedor do Amazon Cognito.

  8. O Verified Permissions avalia a solicitação de autorização em relação às políticas em seu repositório de políticas e retorna uma decisão de autorização.

  9. O autorizador Lambda retorna uma Deny resposta Allow or para o API Gateway.

  10. A API retorna dados ou uma ACCESS_DENIED resposta ao seu aplicativo. Seu aplicativo processa e exibe os resultados da solicitação da API.

Adicionando controle de acesso baseado em atributos (ABAC)

Uma sessão de autenticação típica com um IdP retorna tokens de ID e acesso. Você pode passar qualquer um desses tipos de token como um token portador em solicitações de aplicativos para sua API. Dependendo de suas escolhas ao criar seu repositório de políticas, as Permissões Verificadas esperam um dos dois tipos de tokens. Ambos os tipos contêm informações sobre a associação do usuário ao grupo. Para obter mais informações sobre os tipos de token no Amazon Cognito, consulte Uso de tokens com grupos de usuários no Guia do desenvolvedor do Amazon Cognito.

Depois de criar um repositório de políticas, você pode adicionar e estender políticas. Por exemplo, você pode adicionar novos grupos às suas políticas ao adicioná-los ao seu grupo de usuários. Como seu repositório de políticas já está ciente da forma como seu grupo de usuários apresenta grupos em tokens, você pode permitir um conjunto de ações para qualquer novo grupo com uma nova política.

Talvez você também queira estender o modelo de avaliação de políticas baseado em grupos para um modelo mais preciso baseado nas propriedades do usuário. Os tokens do grupo de usuários contêm informações adicionais do usuário que podem contribuir para as decisões de autorização.

Tokens de identificação

Os tokens de ID representam os atributos do usuário e têm o nível mais alto de controle de acesso refinado. Para avaliar endereços de e-mail, números de telefone ou atributos personalizados, como departamento e gerente, avalie o token de ID.

Tokens de acesso

Os tokens de acesso representam as permissões de um usuário com escopos do OAuth 2.0. Para adicionar uma camada de autorização ou configurar solicitações de recursos adicionais, avalie o token de acesso. Por exemplo, você pode validar se um usuário está nos grupos apropriados e tem um escopo como PetStore.read esse que geralmente autoriza o acesso à API. Os grupos de usuários podem adicionar escopos personalizados aos tokens com servidores de recursos e com a personalização de tokens em tempo de execução.

Veja, Trabalhando com fontes de identidade em esquemas e políticas por exemplo, políticas que processam reivindicações em tokens de ID e acesso.

Considerações sobre repositórios de políticas vinculados à API

Ao criar um repositório de políticas vinculado à API no console de permissões verificadas, você está criando um teste para uma eventual implantação de produção. Antes de passar para a produção, estabeleça uma configuração fixa para sua API e seu grupo de usuários. Considere os seguintes fatores:

O API Gateway armazena respostas em cache

Em repositórios de políticas vinculados à API, o Verified Permissions cria um autorizador Lambda com um TTL de cache de autorização de 120 segundos. Você pode ajustar esse valor ou desativar o armazenamento em cache no seu autorizador. Em um autorizador com o armazenamento em cache ativado, seu autorizador retorna a mesma resposta todas as vezes até que o TTL expire. Isso pode estender a vida útil efetiva dos tokens do grupo de usuários em uma duração igual ao TTL de cache do estágio solicitado.

Os grupos do Amazon Cognito podem ser reutilizados

As permissões verificadas da Amazon determinam a associação ao grupo de usuários do grupo de usuários a partir da cognito:groups reivindicação no ID do usuário ou no token de acesso. O valor dessa afirmação é uma matriz dos nomes amigáveis dos grupos de grupos de usuários aos quais o usuário pertence. Você não pode associar grupos de grupos de usuários a um identificador exclusivo.

Grupos de grupos de usuários que você exclui e recria com o mesmo nome presente no seu repositório de políticas como o mesmo grupo. Ao excluir um grupo de um grupo de usuários, exclua todas as referências ao grupo do seu repositório de políticas.

O namespace e o esquema derivados da API são point-in-time

O Verified Permissions captura sua API em um determinado momento: ele só consulta sua API quando você cria seu repositório de políticas. Quando o esquema ou o nome da sua API muda, você deve atualizar seu repositório de políticas e o autorizador Lambda ou criar um novo armazenamento de políticas vinculado à API. As permissões verificadas derivam o namespace do repositório de políticas do nome da sua API.

A função Lambda não tem configuração de VPC

A função Lambda que a Verified Permissions cria para seu autorizador de API não está conectada a uma VPC. Por padrão. As APIs que têm acesso à rede restrito a VPCs privadas não podem se comunicar com a função Lambda que autoriza solicitações de acesso com permissões verificadas.

A Verified Permissions implanta recursos do autorizador em CloudFormation

Para criar um repositório de políticas vinculado à API, você deve cadastrar um AWS principal altamente privilegiado no console de Permissões Verificadas. Esse usuário implanta uma AWS CloudFormation pilha que cria recursos em vários. Serviços da AWS Esse diretor deve ter a permissão para adicionar e modificar recursos em Permissões Verificadas IAM, Lambda e API Gateway. Como prática recomendada, não compartilhe essas credenciais com outros administradores em sua organização.

Consulte Passando para a produção com AWS CloudFormation para obter uma visão geral dos recursos criados pelas Permissões Verificadas.

Passando para a produção com AWS CloudFormation

Os armazenamentos de políticas vinculados à API são uma forma de criar rapidamente um modelo de autorização para uma API do API Gateway. Eles foram projetados para servir como um ambiente de teste para o componente de autorização do seu aplicativo. Depois de criar seu repositório de políticas de teste, passe algum tempo refinando as políticas, o esquema e o autorizador Lambda.

Você pode ajustar a arquitetura da sua API, exigindo ajustes equivalentes no esquema e nas políticas do repositório de políticas. Os repositórios de políticas vinculados à API não atualizam automaticamente seu esquema a partir da arquitetura da API. As Permissões Verificadas somente pesquisam a API no momento em que você cria um repositório de políticas. Se sua API mudar o suficiente, talvez você precise repetir o processo com um novo repositório de políticas.

Quando seu aplicativo e modelo de autorização estiverem prontos para implantação na produção, integre o repositório de políticas vinculado à API que você desenvolveu com seus processos de automação. Como prática recomendada, recomendamos que você exporte o esquema e as políticas do repositório de políticas em um AWS CloudFormation modelo que possa ser implantado em outros Contas da AWS e. Regiões da AWS

Os resultados do processo de armazenamento de políticas vinculado à API são um armazenamento de políticas inicial e um autorizador Lambda. O autorizador Lambda tem vários recursos dependentes. O Verified Permissions implanta esses recursos em uma pilha gerada automaticamente CloudFormation . Para implantar na produção, você deve coletar o repositório de políticas e os recursos do autorizador Lambda em um modelo. Um repositório de políticas vinculado à API é composto pelos seguintes recursos:

  1. AWS::VerifiedPermissions::PolicyStore: copie seu esquema para o SchemaDefinition objeto. Escape de " personagens como\".

  2. AWS::VerifiedPermissions::IdentitySource: copie os valores da saída do seu repositório GetIdentitySource de políticas de teste e modifique-os conforme necessário.

  3. Uma ou mais das AWS::VerifiedPermissions::Policyseguintes: Copie sua declaração de política para o Definition objeto. Escape de " personagens como\".

  4. AWS: :Lambda: :Function, AWS::: :Role,IAM:AWS:: :Policy,IAM::: :Authorizer,AWS ApiGateway AWS::Lambda::Permission: Copie o modelo da guia Modelo da pilha que as Permissões Verificadas implantaram quando você criou seu armazenamento de políticas.

O modelo a seguir é um exemplo de armazenamento de políticas. Você pode acrescentar os recursos do autorizador Lambda da sua pilha existente a esse modelo.

{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "MyExamplePolicyStore": { "Type": "AWS::VerifiedPermissions::PolicyStore", "Properties": { "ValidationSettings": { "Mode": "STRICT" }, "Description": "ApiGateway: PetStore/test", "Schema": { "CedarJson": "{\"PetStore\":{\"actions\":{\"get /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}},\"get /pets/{petId}\":{\"appliesTo\":{\"context\":{\"type\":\"Record\",\"attributes\":{}},\"resourceTypes\":[\"Application\"],\"principalTypes\":[\"User\"]}},\"post /pets\":{\"appliesTo\":{\"principalTypes\":[\"User\"],\"resourceTypes\":[\"Application\"],\"context\":{\"type\":\"Record\",\"attributes\":{}}}}},\"entityTypes\":{\"Application\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}},\"User\":{\"memberOfTypes\":[\"UserGroup\"],\"shape\":{\"attributes\":{},\"type\":\"Record\"}},\"UserGroup\":{\"shape\":{\"type\":\"Record\",\"attributes\":{}}}}}}" } } }, "MyExamplePolicy": { "Type": "AWS::VerifiedPermissions::Policy", "Properties": { "Definition": { "Static": { "Description": "Policy defining permissions for testgroup cognito group", "Statement": "permit(\nprincipal in PetStore::UserGroup::\"us-east-1_EXAMPLE|testgroup\",\naction in [\n PetStore::Action::\"get /\",\n PetStore::Action::\"post /pets\",\n PetStore::Action::\"get /pets\",\n PetStore::Action::\"get /pets/{petId}\"\n],\nresource);" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" } }, "DependsOn": [ "MyExamplePolicyStore" ] }, "MyExampleIdentitySource": { "Type": "AWS::VerifiedPermissions::IdentitySource", "Properties": { "Configuration": { "CognitoUserPoolConfiguration": { "ClientIds": [ "1example23456789" ], "GroupConfiguration": { "GroupEntityType": "PetStore::UserGroup" }, "UserPoolArn": "arn:aws:cognito-idp:us-east-1:123456789012:userpool/us-east-1_EXAMPLE" } }, "PolicyStoreId": { "Ref": "MyExamplePolicyStore" }, "PrincipalEntityType": "PetStore::User" }, "DependsOn": [ "MyExamplePolicyStore" ] } } }