

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
<a name="configure-cross-account-access-to-amazon-dynamodb"></a>

*Shashi Dalmia, Imhoertha Ojior e Esteban Serna Parra, Amazon Web Services*

## Resumo
<a name="configure-cross-account-access-to-amazon-dynamodb-summary"></a>

Esse padrão explica as etapas para configurar o acesso entre contas ao Amazon DynamoDB usando políticas baseadas em recursos. Para os workloads que usam o DynamoDB, está se tornando cada vez mais comum adotar [estratégias de isolamento de workloads](https://aws.amazon.com/solutions/guidance/workload-isolation-on-aws/?did=sl_card&trk=sl_card) para reduzir ameaças de 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 (IAM). AWS Identity and Access Management Isso envolve definir permissões do IAM e estabelecer uma relação de confiança entre Contas da AWS o.

As [políticas baseadas em recursos para o DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) simplificam significativamente a postura de segurança para workloads 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
<a name="configure-cross-account-access-to-amazon-dynamodb-prereqs"></a>

**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](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) e [configurado](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) para acessar a Conta A, para criar a tabela do DynamoDB. As outras etapas desse padrão fornecem instruções para usar os consoles IAM, DynamoDB e Lambda. Se você planeja usar AWS CLI em vez disso, configure-o para acessar as duas contas.

**Limitações**
+ Alguns Serviços da AWS não estão disponíveis em todos Regiões da AWS. Para conferir a disponibilidade de uma região, consulte [Serviços da AWS by Region](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Para endpoints específicos, consulte a página [Cotas e endpoints de serviços](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html) e clique no link correspondente ao serviço desejado.

## Arquitetura
<a name="configure-cross-account-access-to-amazon-dynamodb-architecture"></a>

O diagrama a seguir mostra uma arquitetura de conta única. AWS Lambda, Amazon Elastic Compute Cloud (Amazon EC2) 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 no IAM ou uma política baseada em recursos no DynamoDB.

![\[Uso das permissões do IAM para acessar uma tabela do DynamoDB na mesma conta.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/cbb009eb-422d-4833-a1bc-0c571d83c21f.png)


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 apresentado a seguir, o acesso à tabela do DynamoDB na Conta A é concedido a uma função do Lambda na Conta B usando uma política baseada em recursos.

![\[Uso de uma política baseada em recursos para acessar uma tabela do DynamoDB em uma conta diferente.\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/9f9165a8-b767-4427-a2ae-31b5b8c83326.png)


Este 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ê desejar conceder a uma função do Lambda acesso a um bucket do Amazon Simple Storage Service (Amazon S3) na Conta A, você pode criar uma [política baseada em recursos](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) no Amazon S3 e adicionar as permissões ao [perfil de execução do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) na Conta B.

## Ferramentas
<a name="configure-cross-account-access-to-amazon-dynamodb-tools"></a>

**Serviços da AWS**
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus recursos da AWS controlando quem está autenticado e autorizado a usá-los.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é 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 **

Este padrão inclui código de amostra na seção [Informações adicionais](#configure-cross-account-access-to-amazon-dynamodb-additional) para mostrar como configurar uma função do Lambda na Conta B para escrever na tabela do DynamoDB na Conta A. O código é fornecido apenas para fins de ilustração e teste. Se você estiver implementando este padrão em um ambiente de produção, use o código como referência e personalize-o para o seu próprio ambiente.

## Práticas recomendadas
<a name="configure-cross-account-access-to-amazon-dynamodb-best-practices"></a>
+ Siga as [práticas recomendadas para as políticas baseadas em recursos](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-best-practices.html) na documentação do DynamoDB.
+ Respeite o princípio de privilégio mínimo, garantindo somente as permissões estritamente necessárias para a execução de uma tarefa. Para obter mais informações, consulte [Concessão de privilégio mínimo](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) e [Práticas recomendadas de segurança](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) na documentação do IAM.

## Épicos
<a name="configure-cross-account-access-to-amazon-dynamodb-epics"></a>

### Criação de um perfil e de uma política do IAM para a função do Lambda na Conta B
<a name="create-an-iam-policy-and-role-for-the-lam-function-in-account-b"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma política na Conta B. | Essa política do IAM permite a [PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)ação de uma tabela do DynamoDB na Conta A.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS geral | 
| Crie um perfil na Conta B. | A função do Lambda na Conta B usa este perfil do IAM para acessar a tabela do DynamoDB na Conta A.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Para obter mais informações sobre a criação de funções, consulte a [documentação de IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). | AWS geral | 
| Anote o ARN do perfil do . | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS geral | 

### Crie uma tabela do DynamoDB na conta A
<a name="create-a-ddb-table-in-account-a"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma tabela do DynamoDB. | Use o AWS CLI comando a seguir para criar uma tabela do DynamoDB.<pre> aws dynamodb create-table \<br />    --table-name Table-Account-A \<br />    --attribute-definitions \<br />      AttributeName=category,AttributeType=S \<br />      AttributeName=item,AttributeType=S \<br />    --key-schema \<br />      AttributeName=category,KeyType=HASH \<br />      AttributeName=item,KeyType=RANGE \<br />    --provisioned-throughput \<br />      ReadCapacityUnits=5,WriteCapacityUnits=5 \<br />    --resource-policy \<br />      '{         <br />          "Version": "2012-10-17",		 	 	 <br />          "Statement": [<br />            {                    <br />               "Sid": "Statement1",<br />               "Effect": "Allow",<br />               "Principal": {<br />                  "AWS": "arn:aws:iam::<Account-B-ID>:role/<Role-Name>"<br />               },<br />               "Action": "dynamodb:PutItem",<br />               "Resource": "arn:aws:dynamodb:<Region>:<Account-A-ID>:table/Table-Account-A"<br />            }            <br />         ]<br />      }'</pre>Substitua o seguinte nesta amostra de código:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Você especifica a configuração da política baseada em recursos na instrução `create-table` usando o parâmetro `--resource-policy`. Esta política faz referência ao ARN da tabela do DynamoDB na Conta A.Para obter mais informações sobre criar tabelas, consulte a [documentação do DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html). | AWS geral | 

### Criação de uma função do Lambda na Conta B
<a name="create-a-lam-function-in-account-b"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie uma função do Lambda para gravar dados no DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Para obter mais informações sobre como criar funções do Lambda, consulte a [documentação do Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) | AWS geral | 

### Limpeza
<a name="clean-up"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Excluir recursos. | Para evitar custos associados aos recursos criados neste padrão, faça o seguinte para excluir esses recursos:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS geral | 

## Solução de problemas
<a name="configure-cross-account-access-to-amazon-dynamodb-troubleshooting"></a>


| Problema | Solução | 
| --- | --- | 
| Ao criar a função do Lambda, você recebe um erro `ResourceNotFoundException`. | Confirme se você inseriu corretamente a ID Região da AWS e a ID da Conta A. Elas fazem parte do ARN da tabela do DynamoDB. | 

## Recursos relacionados
<a name="configure-cross-account-access-to-amazon-dynamodb-resources"></a>
+ [Introdução ao DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) (Documentação do DynamoDB)
+ [Conceitos básicos do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) (documentação do Lambda)
+ [Usar políticas baseadas em recursos para o DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) (documentação do DynamoDB)
+ [Criação de políticas do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) (Documentação do IAM)
+ [Lógica de avaliação de políticas entre contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) (Documentação do IAM)
+ [Referência de elementos de política JSON do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) (Documentação do IAM)

## Mais informações
<a name="configure-cross-account-access-to-amazon-dynamodb-additional"></a>

*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
```

**nota**  
Quando o cliente do DynamoDB é instanciado, o ARN da tabela do DynamoDB é fornecido em vez do nome da tabela. Isso é necessário para que a função do Lambda se conecte à tabela correta do DynamoDB quando for executada.