Configuration de l'accès intercompte à Amazon DynamoDB - Recommandations AWS

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

Créée par Shashi Dalmia (AWS), Esteban Serna Parra (AWS) et Imhoertha Ojior (AWS)

Récapitulatif

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 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 AWS Identity and Access Management 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 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

Prérequis

  • 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é et configuré pour 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

Architecture

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.

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.

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 les ressources dans Amazon S3 et ajouter les autorisations au rôle d'exécution Lambda dans le compte B.

Outils

Services AWS

  • Amazon DynamoDB est un service de base de données NoSQL entièrement géré, offrant des performances rapides, prévisibles et évolutives.

  • AWS Identity and Access Management (IAM) 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 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 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

Épopées

TâcheDescriptionCompétences requises

Créez une politique dans le compte B.

Cette politique IAM autorise l'PutItemaction pour une table DynamoDB dans le compte A.

  1. Connectez-vous au compte B dans le AWS Management Console.

  2. Ouvrez la console IAM.

  3. Dans le volet de navigation, sélectionnez Politiques, puis Créer une politique.

  4. Sur la page Spécifier les autorisations, pour l'éditeur de politiques, sélectionnez JSON.

  5. Saisissez la politique suivante.

    { "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. Remplacez <Region> et <Account-A-ID> par vos valeurs, puis choisissez Next.

  7. Dans Nom de la politique, entrez un nom unique pour votre politique, tel queDynamoDB-PutItem-Policy.

  8. (Facultatif) Ajoutez une description de la politique.

  9. Choisissez Create Policy (Créer une politique).

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.

  1. Ouvrez la console IAM.

  2. Dans le volet de navigation, sélectionnez Rôles, puis Créer un rôle.

  3. Pour Select trusted entity (Sélectionner une entité de confiance), choisissez Service AWS.

  4. Dans la section Cas d'utilisation, choisissez Lambda.

  5. Choisissez Suivant : Autorisations.

  6. Dans la zone Politiques de filtrage, entrez DynamoDB.

  7. Dans la liste des politiques DynamoDB, sélectionnez. DynamoDB-PutItem-Policy

  8. Décochez la case Politiques de filtrage, puis entrez Lambda.

  9. Dans la liste des politiques Lambda, choisissez AWSLambda Execute.

  10. Choisissez Suivant : Nom, révision et création.

  11. Pour Role name (Nom de rôle), saisissez un nom unique pour votre rôle, par exemple, DynamoDB-PutItemAccess.

  12. (Facultatif) Ajoutez une description du rôle.

  13. (Facultatif) Ajoutez des métadonnées au rôle en associant les identifications sous forme de paires clé-valeur.

  14. Sélectionnez Créer un rôle.

Pour plus d'informations sur la création de rôles, consultez la documentation IAM.

AWS général

Notez l'ARN du rôle.

  1. Ouvrez la console IAM.

  2. Dans le panneau de navigation, choisissez Roles (Rôles).

  3. Dans la zone de rechercheDynamoDB-PutItemAccess, entrez, puis choisissez le rôle.

  4. Sur la page de résumé du rôle, copiez le nom de ressource Amazon (ARN). Vous utilisez l'ARN lorsque vous configurez la fonction Lambda.

AWS général
TâcheDescriptionCompétences requises

Créez une table DynamoDB.

Utilisez la AWS CLI commande suivante pour créer une table 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" } ] }'

Remplacez le code suivant dans cet exemple de code :

  • <Account-B-ID>est l'identifiant du compte B.

  • <Role-Name>est le nom du rôle IAM que vous avez créé, par exempleDynamoDB-PutItemAccess.

  • <Region>est l' Région AWS endroit où vous créez la table DynamoDB.

  • <Account-A-ID>est l'identifiant du compte A.

Note

Vous spécifiez la configuration de la politique basée sur les ressources dans l'create-tableinstruction à l'aide de l'--resource-policyindicateur. Cette politique fait référence à l'ARN de la table DynamoDB dans le compte A.

Pour plus d'informations sur la création de tables, consultez la documentation DynamoDB.

AWS général
TâcheDescriptionCompétences requises

Créez une fonction Lambda pour écrire des données dans DynamoDB.

  1. Connectez-vous au compte B dans le AWS Management Console.

  2. Ouvrez la console Lambda.

  3. Dans le volet de navigation, choisissez Functions, puis Create function.

  4. Pour Nom, saisissez lambda_write_function.

  5. Pour Runtime, choisissez Python 3.8 ou version ultérieure.

  6. Sous Modifier le rôle d'exécution par défaut, choisissez Utiliser un rôle existant.

  7. Pour Rôle existant, choisissez le rôle IAM que vous avez créé, tel queDynamoDB-PutItemAccess.

  8. Sélectionnez Create function (Créer une fonction).

  9. Dans l'onglet Code, collez l'exemple de code fourni dans la section Informations supplémentaires de ce modèle. Remplacez le code suivant dans cet exemple de code :

    • <Account-A-ID>est l'identifiant du compte A.

    • <Region>est l' Région AWS endroit où vous avez créé la table DynamoDB.

  10. Sélectionnez Deploy (Déployer).

  11. Sélectionnez Test. Cela vous invite à configurer un événement de test. Créez un nouvel événement avec votre nom préféré, par exempleMyTestEventForWrite, puis enregistrez la configuration.

  12. Choisissez Test à nouveau. Cela exécute la fonction Lambda avec le nom d'événement que vous avez fourni.

  13. Vérifiez le résultat de la fonction. Cela doit indiquer que la fonction a accédé à la table DynamoDB dans le compte A et a pu y écrire des données.

Pour plus d'informations sur la création de fonctions Lambda, consultez la documentation Lambda.

AWS général
TâcheDescriptionCompétences requises

Supprimez 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 :

  1. Dans le compte B, supprimez la fonction Lambda que vous avez créée pour vous connecter à DynamoDB. Pour obtenir des instructions, consultez la documentation Lambda.

  2. Dans le compte A, supprimez la table DynamoDB que vous avez créée. Pour obtenir des instructions, consultez la documentation DynamoDB.

  3. Pour respecter les meilleures pratiques en matière de sécurité, supprimez la politique IAM (DynamoDB-PutItem-Policy) lorsqu'elle n'est plus nécessaire. Pour de plus amples informations, veuillez consulter la documentation IAM.

  4. Pour respecter les meilleures pratiques en matière de sécurité, supprimez le rôle IAM (DynamoDB-PutItemAccess) lorsqu'il n'est plus nécessaire. Pour de plus amples informations, veuillez consulter la documentation IAM.

AWS général

Résolution des problèmes

ProblèmeSolution

Lors de la création de 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

Informations supplémentaires

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.