Configurar o acesso entre contas ao Amazon DynamoDB - Recomendações da AWS

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

Configurar o acesso entre contas ao Amazon DynamoDB

Criado por Shashi Dalmia (AWS), Esteban Serna Parra () e Imhoertha AWS Ojior () AWS

Ambiente: produção

Tecnologias: bancos de dados; segurança, identidade, conformidade

AWSserviços: Amazon DynamoDBAWS; Identity and Access Management; Lambda AWS

Resumo

Esse padrão explica as etapas para configurar o acesso entre contas ao Amazon DynamoDB usando políticas baseadas em recursos. Para cargas de trabalho que usam o DynamoDB, está se tornando mais comum usar estratégias de isolamento de carga de trabalho para minimizar as ameaças à segurança e atender aos requisitos de conformidade. A implementação de estratégias de isolamento da carga de trabalho geralmente requer acesso entre contas e regiões aos recursos do DynamoDB usando políticas baseadas em identidade (). AWS Identity and Access Management IAM Isso envolve definir IAM permissões e estabelecer uma relação de confiança entre Contas da AWS o.

As políticas baseadas em recursos para o DynamoDB simplificam muito a postura de segurança para cargas de trabalho entre contas. Esse padrão fornece etapas e exemplos de código para demonstrar como você pode configurar AWS Lambda funções em uma Conta da AWS para gravar dados em uma tabela de banco de dados do DynamoDB em uma conta diferente.

Pré-requisitos e limitações

Pré-requisitos

  • Dois ativos Contas da AWS. Esse padrão se refere a essas contas como Conta A e Conta B.

  • AWS Command Line Interface (AWS CLI) instalado e configurado para acessar a Conta A, para criar a tabela do DynamoDB. As outras etapas desse padrão fornecem instruções para usar os consolesIAM, DynamoDB e Lambda. Se você planeja usar AWS CLI em vez disso, configure-o para acessar as duas contas.

Limitações

Arquitetura

O diagrama a seguir mostra uma arquitetura de conta única. AWS Lambda, Amazon Elastic Compute Cloud (AmazonEC2) e DynamoDB estão todos na mesma conta. Nesse cenário, as funções Lambda e as EC2 instâncias da Amazon podem acessar o DynamoDB. Para conceder acesso à tabela do DynamoDB, você pode criar uma política baseada em identidade ou criar uma política baseada IAM em recursos no DynamoDB.

Usando IAM permissões para acessar uma tabela do DynamoDB na mesma conta.

O diagrama a seguir mostra uma arquitetura de várias contas. Se os recursos em um Conta da AWS precisarem acessar uma tabela do DynamoDB em uma conta diferente, você precisará configurar uma política baseada em recursos no DynamoDB para conceder o acesso necessário. Por exemplo, no diagrama a seguir, o acesso à tabela do DynamoDB na Conta A é concedido a uma função Lambda na Conta B usando uma política baseada em recursos.

Usando uma política baseada em recursos para acessar uma tabela do DynamoDB em uma conta diferente.

Esse padrão descreve o acesso entre contas entre o Lambda e o DynamoDB. Você pode usar etapas semelhantes para outras, Serviços da AWS se as permissões apropriadas estiverem configuradas em ambas as contas. Por exemplo, se você quiser fornecer acesso à função Lambda a um bucket do Amazon Simple Storage Service (Amazon S3) na Conta A, você pode criar uma política baseada em recursos no Amazon S3 e adicionar as permissões à função de execução do Lambda na Conta B.

Ferramentas

Serviços da AWS

  • O Amazon DynamoDB é um serviço SQL sem banco de dados totalmente gerenciado que fornece desempenho rápido, previsível e escalável.

  • AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.

  • O AWS Lambda é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.

Código

Esse padrão inclui código de amostra na seção Informações adicionais para mostrar como você pode configurar uma função Lambda na Conta B para gravar na tabela do DynamoDB na Conta A. O código é fornecido somente para fins de ilustração e teste. Se você estiver implementando esse padrão em um ambiente de produção, use o código como referência e personalize-o para seu próprio ambiente.

Práticas recomendadas

Épicos

TarefaDescriçãoHabilidades necessárias

Crie uma política na Conta B.

Essa IAM política permite a PutItemação de uma tabela do DynamoDB na Conta A.

  1. Faça login na Conta A no AWS Management Console.

  2. Abra o IAMconsole.

  3. No painel de navegação, selecione Políticas e, em seguida, Criar política.

  4. Na página Especificar permissões, para o editor de políticas, selecione JSON.

  5. Insira a seguinte política.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }
  6. Substitua <Region> e <Account-A-ID> por seus valores e, em seguida, escolha Avançar.

  7. Em Nome da política, insira um nome exclusivo para sua política, comoDynamoDB-PutItem-Policy.

  8. (Opcional) Adicione uma descrição da política.

  9. Escolha Criar política.

Geral AWS

Crie uma função na Conta B.

A função Lambda na Conta B usa essa IAM função para acessar a tabela do DynamoDB na Conta A.

  1. Abra o IAMconsole.

  2. No painel de navegação, escolha Roles (Funções) e Create role (Criar função).

  3. Em Select trusted entity (Selecionar entidade confiável), escolha AWS service (Serviço da AWS).

  4. Na seção Caso de uso, escolha Lambda.

  5. Selecione Next: Permissions (Próximo: permissões).

  6. Na caixa Políticas de filtro insira DynamoDB.

  7. Na lista de políticas do DynamoDB, escolha. DynamoDB-PutItem-Policy

  8. Desmarque a caixa Filtrar políticas e, em seguida, insira Lambda.

  9. Na lista de políticas do Lambda, escolha. AWSLambdaExecute

  10. Escolha Avançar: nomear, revisar e criar.

  11. Em Role name (Nome da função), insira um nome exclusivo para a função, como DynamoDB-PutItemAccess.

  12. (Opcional) Adicione uma descrição da função.

  13. (Opcional) Adicione metadados à função anexando etiquetas como pares de chave-valor.

  14. Selecione Criar função.

Para obter mais informações sobre a criação de funções, consulte a IAMdocumentação.

Geral AWS

Observe a funçãoARN.

  1. Abra o IAMconsole.

  2. No painel de navegação, escolha Perfis.

  3. Na caixa de pesquisaDynamoDB-PutItemAccess, insira e escolha a função.

  4. Na página de resumo da função, copie o Amazon Resource Name (ARN). Você usa o ARN ao configurar a função Lambda.

Geral AWS
TarefaDescriçãoHabilidades necessárias

Crie uma tabela do DynamoDB.

Use o AWS CLI comando a seguir para criar uma tabela do DynamoDB.

aws dynamodb create-table \ --table-name Table-Account-A \ --attribute-definitions \ AttributeName=category,AttributeType=S \ AttributeName=item,AttributeType=S \ --key-schema \ AttributeName=category,KeyType=HASH \ AttributeName=item,KeyType=RANGE \ --provisioned-throughput \ ReadCapacityUnits=5,WriteCapacityUnits=5 \ --resource-policy \ '{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>" }, "Action": "dynamodb:PutItem", "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A" } ] }'

Substitua o seguinte neste exemplo de código:

  • <Account-B-ID>é o ID da Conta B.

  • <Role-Name>é o nome da IAM função que você criou, comoDynamoDB-PutItemAccess.

  • <Region>é Região da AWS onde você está criando a tabela do DynamoDB.

  • <Account-A-ID>é o ID da Conta A.

Nota: Você especifica a configuração da política baseada em recursos na create-table declaração usando o --resource-policy sinalizador. Essa política se refere à tabela do ARN DynamoDB na Conta A.

Para obter mais informações sobre criar tabelas, consulte a documentação do DynamoDB.

Geral AWS
TarefaDescriçãoHabilidades necessárias

Crie uma função do Lambda para gravar dados no DynamoDB.

  1. Faça login na Conta B no AWS Management Console.

  2. Abra o console do lambda.

  3. No painel de navegação, escolha Funções e selecione Criar função.

  4. Em Nome, digite lambda_write_function.

  5. Em Runtime, escolha Python 3.8 ou superior.

  6. Em Alterar função de execução padrão, escolha Usar uma função existente.

  7. Em Função existente, escolha a IAM função que você criou, comoDynamoDB-PutItemAccess.

  8. Escolha a opção Criar função.

  9. Na guia Código, cole o código de amostra fornecido na seção Informações adicionais desse padrão. Substitua o seguinte neste exemplo de código:

    • <Account-A-ID>é o ID da Conta A.

    • <Region>é Região da AWS onde você criou a tabela do DynamoDB.

  10. Escolha Implantar.

  11. Escolha Testar. Isso solicita que você configure um evento de teste. Crie um novo evento com seu nome preferido, comoMyTestEventForWrite, e salve a configuração.

  12. Escolha Test (Testar) novamente. Isso executa a função Lambda com o nome do evento que você forneceu.

  13. Verifique a saída da função. Isso deve indicar que a função acessou a tabela do DynamoDB na Conta A e conseguiu gravar dados nela.

Para obter mais informações sobre como criar funções do Lambda, consulte a documentação do Lambda.

Geral AWS
TarefaDescriçãoHabilidades necessárias

Excluir recursos.

Para evitar incorrer em custos associados aos recursos criados nesse padrão, faça o seguinte para excluir esses recursos:

  1. Na Conta B, exclua a função Lambda que você criou para se conectar ao DynamoDB. Para obter instruções, consulte a documentação do Lambda.

  2. Na Conta A, exclua a tabela do DynamoDB que você criou. Para obter instruções, consulte a documentação do DynamoDB.

  3. Para obter as melhores práticas de segurança, exclua a IAM política (DynamoDB-PutItem-Policy) quando ela não for mais necessária. Para obter mais informações, consulte a IAMdocumentação.

  4. Para obter as melhores práticas de segurança, exclua a IAM função (DynamoDB-PutItemAccess) quando ela não for mais necessária. Para obter mais informações, consulte a IAMdocumentação.

Geral AWS

Solução de problemas

ProblemaSolução

Ao criar a função Lambda, você recebe um ResourceNotFoundException erro.

Confirme se você inseriu corretamente a ID Região da AWS e a ID da Conta A. Elas fazem parte da tabela do ARN DynamoDB.

Recursos relacionados

Mais informações

Código de exemplo

import boto3 from datetime import datetime dynamodb_client = boto3.client('dynamodb') def lambda_handler(event, context): now = datetime.now().isoformat() data = dynamodb_client.put_item(TableName='arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": now}}) return data

Observação: quando o cliente do DynamoDB é instanciado, a tabela ARN do DynamoDB é fornecida em vez do nome da tabela. Isso é necessário para que a função Lambda se conecte à tabela correta do DynamoDB quando executada.