Tutorial: usuário primário do IAM e Amazon Cognito
Este tutorial aborda um caso de uso popular de controle de acesso refinado: um usuário primário do IAM com autenticação do Amazon Cognito para o OpenSearch Dashboards. Embora essas etapas usem o grupo de usuários do Amazon Cognito para a autenticação, esse mesmo processo básico funciona para qualquer provedor de autenticação do Cognito que permita atribuir diferentes funções do IAM a usuários diferentes.
Este tutorial pressupõe que você tenha duas funções do IAM existentes, uma para o usuário primário e outra para usuários mais limitados. Se você não tiver duas funções, crie-as.
Conceitos básicos do controle de acesso refinado
-
Crie um domínio com as seguintes configurações:
-
OpenSearch 1.0 ou posterior ou Elasticsearch 7.8 ou posterior
-
Acesso público
-
Controle de acesso refinado habilitado com uma função do IAM como usuário primário (
IAMMasterUserRole
para o resto deste tutorial) -
Autenticação do Amazon Cognito habilitada para o OpenSearch Dashboards. Para obter instruções para habilitar a autenticação do Cognito e selecionar um usuário e um grupo de identidades, consulte Configuração de um domínio para usar o Amazon Cognito.
-
A seguinte política de acesso:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "es:ESHttp*" ], "Resource": "arn:aws:es:
region
:account
:domain/domain-name
/*" } ] } -
HTTPS necessário para todo o tráfego para o domínio
-
Criptografia de nó a nó
-
Criptografia de dados em repouso
-
Navegue até o console do IAM e escolha Roles (Funções).
-
Escolha
IAMMasterUserRole
e vá para a guia Trust relationships (Relações de confiança). -
Escolha Edit trust relationship (Editar relação de confiança) e certifique-se de que o grupo de identidades do Amazon Cognito possa assumir a função. Você deve ver a seguinte declaração:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "
identity-pool-id
" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } }] } -
Escolha Update Trust Policy.
-
Adicione a mesma política de confiança a uma segunda função do IAM (
IAMLimitedUserRole
para o restante deste tutorial). -
Navegue até o console do Amazon Cognito e escolha Manage User Pools (Gerenciar grupos de usuários).
-
Escolha seu grupo de usuários e depois escolha Users and groups (Usuários e grupos).
-
Escolha Create user (Criar usuário), especifique um nome de usuário para
master-user
e uma senha e escolha Create user (Criar usuário). -
Crie outro usuário chamado
limited-user
. -
Vá para a guia Groups (Grupos) e escolha Create group (Criar grupo).
-
Nomeie o grupo como
master-user-group
, escolhaIAMMasterUserRole
na lista suspensa IAM role (Função do IAM) e escolha Create group (Criar grupo). -
Crie outro grupo chamado
limited-user-group
que useIAMLimitedUserRole
. -
Escolha
master-user-group
, depois escolha Add users (Adicionar usuários) e então adicionemaster-user
. -
Escolha
limited-user-group
, depois escolha Add users (Adicionar usuários) e então adicionelimited-user
. -
Escolha App client settings (Configurações do cliente da aplicação) e anote o ID do cliente do seu domínio.
-
Escolha Federated Identities (Identidades federadas), depois escolha seu grupo de identidades e Edit identity pool (Editar grupo de identidades).
-
Expanda Authentication providers (Provedores de autenticação), localize o ID do grupo de usuários e o ID do cliente da aplicação para o seu domínio e altere Use default role (Usar função padrão) para Choose role from token (Escolher função a partir do token).
-
Em Role resolution (Resolução da função), escolha DENY (NEGAR). Com essa configuração, os usuários devem estar em um grupo para receber uma função do IAM após a autenticação.
-
Escolha Save Changes (Salvar alterações).
-
Navegue para o OpenSearch Dashboards.
-
Faça login com
master-user
. -
Escolha Add sample data (Adicionar exemplos de dados) e adicione alguns exemplos de dados de voo.
-
Escolha Security (Segurança), Roles (Funções), Create role (Criar função).
-
Nomeie a função
new-role
. -
Para as permissões do índice, especifique
opensearch_dashboards_sample_data_fli*
para o padrão de índice (kibana_sample_data_fli*
em domínios do Elasticsearch). -
Para o grupo de ações, escolha read (leitura).
-
Em Document level security (Segurança em nível de documento), especifique a seguinte consulta:
{ "match": { "FlightDelay": true } }
-
Para segurança em nível de campo, escolha Exclude (Excluir) e especifique
FlightNum
. -
Em Anonymization (Anonimização), especifique
Dest
. -
Escolha Create (Criar OpsItem).
-
Escolha Mapped users (Usuários mapeados) e Manage mapping (Gerenciar mapeamento). Em seguida, adicione o ARN para
IAMLimitedUserRole
como uma identidade externa e escolha Map (Mapa). -
Retorne à lista de funções e escolha opensearch_dashboards_user. Escolha Mapped users (Usuários mapeados) e Manage mapping (Gerenciar mapeamento). Adicione o ARN para
IAMLimitedUserRole
como uma função de backend e escolha Map (Mapa). -
Em uma nova janela privada do navegador, navegue até o Dashboards, faça login usando
limited-user
e escolha Explore on my own (Explorar por conta própria). -
Escolha Dev Tools (Ferramentas de desenvolvimento) e execute a pesquisa padrão:
GET _search { "query": { "match_all": {} } }
Observe o erro de permissões.
limited-user
não tem permissões para executar pesquisas em todo o cluster. -
Execute outra pesquisa:
GET opensearch_dashboards_sample_data_flights/_search { "query": { "match_all": {} } }
Observe que todos os documentos correspondentes têm um campo
FlightDelay
detrue
, um campo anônimoDest
e nenhum campoFlightNum
. -
Na janela original do navegador, conectado como
master-user
, escolha Dev Tools (Ferramentas de desenvolvimento) e execute as mesmas pesquisas. Observe a diferença nas permissões, número de ocorrências, documentos correspondentes e campos incluídos.