

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Configuration de l’accès intercompte à Amazon DynamoDB
<a name="configure-cross-account-access-to-amazon-dynamodb"></a>

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

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

Ce modèle explique les étapes de configuration de l'accès entre comptes à Amazon DynamoDB à l'aide de politiques basées sur les ressources. Pour les charges de travail qui utilisent DynamoDB, il est de plus en plus courant d'[utiliser des stratégies d'isolation des charges de travail](https://aws.amazon.com/solutions/guidance/workload-isolation-on-aws/?did=sl_card&trk=sl_card) afin de minimiser les menaces de sécurité et de répondre aux exigences de conformité. La mise en œuvre de stratégies d'isolation des charges de travail nécessite souvent un accès entre comptes et entre régions aux ressources DynamoDB à l'aide Gestion des identités et des accès AWS de politiques basées sur l'identité (IAM). Cela implique de définir des autorisations IAM et d'établir une relation de confiance entre les Comptes AWS.

Les [politiques basées sur les ressources pour DynamoDB simplifient considérablement le dispositif de sécurité pour les charges](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html) de travail entre comptes. Ce modèle fournit des étapes et un exemple de code pour montrer comment configurer les AWS Lambda fonctions d'un compte Compte AWS pour écrire des données dans une table de base de données DynamoDB d'un autre compte.

## Conditions préalables et limitations
<a name="configure-cross-account-access-to-amazon-dynamodb-prereqs"></a>

**Conditions préalables**
+ Deux actifs Comptes AWS. Dans ce schéma, ces comptes sont appelés *compte A* et *compte B.*
+ AWS Command Line Interface (AWS CLI) [installé](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) et [configuré pour](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) accéder au compte A, afin de créer la table DynamoDB. Les autres étapes de ce modèle fournissent des instructions d'utilisation des consoles IAM, DynamoDB et Lambda. Si vous prévoyez de l'utiliser à la AWS CLI place, configurez-le pour accéder aux deux comptes.

**Limites**
+ Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir [Services AWS par région](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/). Pour des points de terminaison spécifiques, consultez la page [Points de terminaison et quotas du service](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html), puis choisissez le lien vers le service.

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

Le schéma suivant montre une architecture à compte unique. AWS Lambda, Amazon Elastic Compute Cloud (Amazon EC2) et DynamoDB appartiennent tous au même compte. Dans ce scénario, les fonctions Lambda et les EC2 instances Amazon peuvent accéder à DynamoDB. Pour accorder l'accès à la table DynamoDB, vous pouvez créer une stratégie basée sur l'identité dans IAM ou une stratégie basée sur les ressources dans DynamoDB.

![Utilisation des autorisations IAM pour accéder à une table DynamoDB dans le même compte.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/cbb009eb-422d-4833-a1bc-0c571d83c21f.png)


Le schéma suivant montre une architecture multi-comptes. Si les ressources d'un compte Compte AWS nécessitent l'accès à une table DynamoDB dans un autre compte, vous devez configurer une politique basée sur les ressources dans DynamoDB pour accorder l'accès requis. Par exemple, dans le schéma suivant, l'accès à la table DynamoDB du compte A est accordé à une fonction Lambda du compte B à l'aide d'une politique basée sur les ressources.

![Utilisation d'une politique basée sur les ressources pour accéder à une table DynamoDB dans un autre compte.](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/bfc32fe8-5db0-4cac-a30f-b870a1a82875/images/9f9165a8-b767-4427-a2ae-31b5b8c83326.png)


Ce modèle décrit l'accès entre comptes entre Lambda et DynamoDB. Vous pouvez suivre des étapes similaires pour les autres comptes Services AWS si les autorisations appropriées sont configurées sur les deux comptes. Par exemple, si vous souhaitez fournir à une fonction Lambda un accès à un bucket Amazon Simple Storage Service (Amazon S3) dans le compte A, vous pouvez créer une [politique basée sur](https://docs.aws.amazon.com/AmazonS3/latest/userguide/bucket-policies.html) les ressources dans Amazon S3 et ajouter les autorisations au rôle d'exécution Lambda dans le compte [B.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)

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

**Services AWS**
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.
+ [Gestion des identités et des accès AWS (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) vous aide à gérer en toute sécurité l'accès à vos ressources AWS en contrôlant qui est authentifié et autorisé à les utiliser.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) est un service de calcul qui vous aide à exécuter du code sans avoir à allouer ni à gérer des serveurs. Il exécute votre code uniquement lorsque cela est nécessaire et évolue automatiquement, de sorte que vous ne payez que pour le temps de calcul que vous utilisez.

**Code**

Ce modèle inclut un exemple de code dans la section [Informations supplémentaires](#configure-cross-account-access-to-amazon-dynamodb-additional) pour montrer comment configurer une fonction Lambda dans le compte B pour écrire dans la table DynamoDB du compte A. Le code est fourni uniquement à des fins d'illustration et de test. Si vous implémentez ce modèle dans un environnement de production, utilisez le code comme référence et personnalisez-le pour votre propre environnement.

## Bonnes pratiques
<a name="configure-cross-account-access-to-amazon-dynamodb-best-practices"></a>
+ Suivez les [meilleures pratiques relatives aux politiques basées sur les ressources](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/rbac-best-practices.html) dans la documentation DynamoDB.
+ Respectez le principe du moindre privilège et accordez les autorisations minimales requises pour effectuer une tâche. Pour plus d'informations, consultez les sections [Accorder le moindre privilège](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#grant-least-priv) et [Bonnes pratiques en matière de sécurité](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) dans la documentation IAM.

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

### Création d'une politique et d'un rôle IAM pour la fonction Lambda dans le compte B
<a name="create-an-iam-policy-and-role-for-the-lam-function-in-account-b"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une politique dans le compte B. | Cette politique IAM autorise l'[PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html)action pour une table DynamoDB dans le compte A.[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS général | 
| Créez un rôle dans le compte B. | La fonction Lambda du compte B utilise ce rôle IAM pour accéder à la table DynamoDB du compte A.[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)<br />Pour plus d'informations sur la création de rôles, consultez la [documentation IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html). | AWS général | 
| Notez l'ARN du rôle. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS général | 

### Création d'une table DynamoDB dans le compte A
<a name="create-a-ddb-table-in-account-a"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une table DynamoDB. | Utilisez la AWS CLI commande suivante pour créer une table 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><br />Remplacez le code suivant dans cet exemple de code :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)Vous spécifiez la configuration de la politique basée sur les ressources dans l'`create-table`instruction à l'aide de l'`--resource-policy`indicateur. Cette politique fait référence à l'ARN de la table DynamoDB dans le compte A.<br />Pour plus d'informations sur la création de tables, consultez la documentation [DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html). | AWS général | 

### Création d'une fonction Lambda dans le compte B
<a name="create-a-lam-function-in-account-b"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une fonction Lambda pour écrire des données dans DynamoDB. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html)[Pour plus d'informations sur la création de fonctions Lambda, consultez la documentation Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html) | AWS général | 

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


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Supprimer des ressources . | Pour éviter les coûts associés aux ressources créées selon ce modèle, procédez comme suit pour supprimer ces ressources :[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/configure-cross-account-access-to-amazon-dynamodb.html) | AWS général | 

## Résolution des problèmes
<a name="configure-cross-account-access-to-amazon-dynamodb-troubleshooting"></a>


| Problème | Solution | 
| --- | --- | 
| Lorsque vous créez la fonction Lambda, vous recevez un `ResourceNotFoundException` message d'erreur. | Vérifiez que vous avez correctement saisi le Région AWS et l'ID du compte A. Ils font partie de l'ARN de la table DynamoDB. | 

## Ressources connexes
<a name="configure-cross-account-access-to-amazon-dynamodb-resources"></a>
+ [Démarrage avec DynamoDB (documentation](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStartedDynamoDB.html) DynamoDB)
+ [Commencer à utiliser Lambda (documentation](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html) Lambda)
+ [Utilisation de politiques basées sur les ressources pour DynamoDB (documentation DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-resource-based.html))
+ [Création de politiques IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create.html) (documentation IAM)
+ [Logique d'évaluation des politiques entre comptes](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) (documentation IAM)
+ [Référence des éléments de politique JSON IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html) (documentation IAM)

## Informations supplémentaires
<a name="configure-cross-account-access-to-amazon-dynamodb-additional"></a>

*Exemple de code*

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

**Note**  
Lorsque le client DynamoDB est instancié, l'ARN de la table DynamoDB est fourni à la place du nom de la table. Cela est nécessaire pour que la fonction Lambda se connecte à la bonne table DynamoDB lors de son exécution.