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) e Jay Enjamoori (AWS)
Ambiente: produção | Tecnologias: DevOps; bancos de dados; segurança, identidade, conformidade | Serviços da AWS: Amazon DynamoDB; AWS Identity and Access Management; AWS Lambda |
Resumo
Esse padrão explica as etapas para configurar o acesso entre contas ao Amazon DynamoDB. Os serviços da Amazon Web Services (AWS) podem acessar tabelas do DynamoDB que estão na mesma conta da AWS se o serviço tiver as permissões apropriadas do AWS Identity and Access Management (IAM) configuradas no banco de dados. No entanto, o acesso de uma conta diferente da AWS exige a configuração de permissões do IAM e o estabelecimento de uma relação de confiança entre as duas contas.
Esse padrão fornece etapas e códigos de exemplo para demonstrar como você pode configurar funções do AWS Lambda em uma conta para ler e gravar em uma tabela do DynamoDB em uma conta diferente.
Pré-requisitos e limitações
Duas contas da AWS ativas. Esse padrão se refere a essas contas como Conta A e Conta B.
A AWS Command Line Interface (AWS CLI) foi instalada e configurada para acessar a Conta A e criar o banco de dados do DynamoDB. As outras etapas desse padrão fornecem instruções para usar os consoles IAM, DynamoDB e Lambda. Se você planeja usar a AWS CLI em vez disso, configure-o para acessar as duas contas.
Arquitetura
No diagrama a seguir, o AWS Lambda, o Amazon EC2 e o DynamoDB estão todos na mesma conta. Nesse cenário, as funções do Lambda e as instâncias do Amazon Elastic Compute Cloud (Amazon EC2) podem acessar o DynamoDB.
![Acessando o DynamoDB pela mesma conta](images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/4cd75ed4-98d8-4398-abaf-20d982477ec4.png)
Se recursos em uma conta diferente da AWS tentarem acessar o DynamoDB, eles precisarão configurar o acesso entre contas e uma relação de confiança. Por exemplo, no diagrama a seguir, para permitir o acesso entre o DynamoDB na Conta A e a função do Lambda na Conta B, você deve criar uma relação de confiança entre as contas e conceder acesso adequado ao serviço Lambda e aos usuários, conforme descrito na seção Épicos.
![Acessando o DynamoDB de uma conta diferente](images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/28331655-18a6-4da1-a5ad-9831e040b7f8.png)
Ferramentas
Serviços da AWS
O Amazon DynamoDB é um serviço de banco de dados NoSQL totalmente gerenciado que fornece uma performance rápida e previsível com escalabilidade integrada.
O AWS Lambda é um serviço de computação que permite a execução do código sem provisionar ou gerenciar servidores O Lambda executa o código somente quando necessário e dimensiona automaticamente, desde algumas solicitações por dia até milhares por segundo. Você paga apenas pelo tempo de computação consumido. Não haverá cobranças quando o código não estiver em execução.
O AWS Identity and Access Management (IAM) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS, controlando quem está autenticado e autorizado a usá-los.
Código
Esse padrão inclui códigos de exemplo na seção Informações adicionais para ilustrar como você pode configurar uma função do Lambda na Conta B para gravar e ler a 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.
Esse padrão ilustra o acesso entre contas com o Lambda e o DynamoDB. Você também pode usar as mesmas etapas para outros serviços da AWS, mas certifique-se de conceder e configurar as permissões apropriadas em ambas as contas. Por exemplo, se você quiser conceder acesso a um banco de dados do Amazon Relational Database Service (Amazon RDS) na Conta A, crie uma função para esse banco de dados e vincule-o a uma relação de confiança. Na Conta B, se você quiser usar o Amazon EC2 em vez do AWS Lambda, crie a respectiva política do IAM e, em seguida, anexe-as à instância do EC2.
Épicos
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma tabela do DynamoDB na conta A. | Depois de configurar a AWS CLI para a Conta A, use o seguinte comando da AWS CLI para criar uma tabela do DynamoDB:
Para obter mais informações sobre criar tabelas, consulte a documentação do DynamoDB. | AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma função na Conta A. | Essa função será usada pela Conta B para obter permissões para acessar a Conta A. Para criar a função:
Para obter mais informações sobre a criação de funções, consulte a documentação de IAM. | AWS DevOps |
Observe o ARN para a função na conta A. |
| AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Criar uma política para acessar a Conta A. |
Para obter mais informações sobre criação de políticas, consulte a Documentação do IAM. | AWS DevOps |
Criar uma função com base nessa política. | Essa função é usada pelas funções do Lambda na Conta B para ler e gravar na tabela do DynamoDB na Conta A.
Agora você pode associar essa função às funções do Lambda no próximo épico. Para obter mais informações sobre a criação de funções, consulte a documentação de IAM. | AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Crie uma função do Lambda para gravar dados no DynamoDB. |
Para obter mais informações sobre como criar funções do Lambda, consulte a documentação do Lambda. | AWS DevOps |
Crie uma função do Lambda para ler dados do DynamoDB. |
Para obter mais informações sobre como criar funções do Lambda, consulte a documentação do Lambda. | AWS DevOps |
Tarefa | Descrição | Habilidades necessárias |
---|---|---|
Exclua os recursos que você criou. | Se você estiver executando esse padrão em um ambiente de teste ou prova de conceito (PoC), exclua os recursos que você criou para evitar custos.
| AWS DevOps |
Recursos relacionados
Comece a usar a AWS CLI (Documentação da AWS CLI)
Configurando a AWS CLI (documentação da AWS CLI)
Introdução ao DynamoDB (Documentação do DynamoDB)
Introdução ao Lambda (documentação do AWS Lambda)
Criação de uma função para delegar permissões a um usuário do IAM (Documentação do IAM)
Criação de políticas do IAM (Documentação do IAM)
Lógica de avaliação de políticas entre contas (Documentação do IAM)
Referência de elementos de política JSON do IAM (Documentação do IAM)
Mais informações
O código nesta seção é fornecido apenas 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.
Função de gravação Lambda
Código de exemplo
import boto3 from datetime import datetime sts_client = boto3.client('sts') sts_session = sts_client.assume_role(RoleArn='arn:aws:iam::<Account-A ID>:role/DynamoDB-FullAccess-For-Account-B', RoleSessionName='test-dynamodb-session') KEY_ID = sts_session['Credentials']['AccessKeyId'] ACCESS_KEY = sts_session['Credentials']['SecretAccessKey'] TOKEN = sts_session['Credentials']['SessionToken'] dynamodb_client = boto3.client('dynamodb', region_name='<DynamoDB-table-region-in-account-A', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY, aws_session_token=TOKEN) def lambda_handler(event, context): now = datetime.now() date_time = now.strftime("%m/%d/%Y, %H:%M:%S") data = dynamodb_client.put_item(TableName='Table-Acccount-A', Item={"category": {"S": "Fruit"},"item": {"S": "Apple"},"time": {"S": date_time}}) return data
Exemplo de saída
![Exemplo de saída da função de gravação Lambda](images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/880a9f04-7e38-46dd-8ce3-91e562259420.png)
Função de leitura Lambda
Código de exemplo
import boto3 from datetime import datetime sts_client = boto3.client('sts') sts_session = sts_client.assume_role(RoleArn='arn:aws:iam::<Account-A ID>:role/DynamoDB-FullAccess-For-Account-B', RoleSessionName='test-dynamodb-session') KEY_ID = sts_session['Credentials']['AccessKeyId'] ACCESS_KEY = sts_session['Credentials']['SecretAccessKey'] TOKEN = sts_session['Credentials']['SessionToken'] dynamodb_client = boto3.client('dynamodb', region_name='<DynamoDB-table-region-in-account-A>', aws_access_key_id=KEY_ID, aws_secret_access_key=ACCESS_KEY, aws_session_token=TOKEN) def lambda_handler(event, context): response = dynamodb_client.get_item(TableName='Table-Acccount-A', Key={'category':{'S':'Fruit'}, 'item':{'S':'Apple'}}) return response
Exemplo de saída
![Exemplo de saída da função de leitura Lambda](images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/38ff890e-1d4c-4b14-9aa2-a2da4304a73b.png)