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éé par Shashi Dalmia (AWS), Esteban Serna Parra () et Imhoertha AWS Ojior () AWS

Environnement : Production

Technologies : bases de données ; sécurité, identité, conformité

AWSservices : Amazon DynamoDB AWS ; Identity and Access Management ; Lambda 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 de politiques basées sur l'identité (). AWS Identity and Access Management IAM Cela implique de définir IAM des autorisations 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 (AmazonEC2) 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é ou une stratégie basée sur IAM les ressources dans DynamoDB.

Utilisation IAM des autorisations 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 SQL sans base de données entièrement géré qui fournit 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 AWS ressources 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 IAM politique autorise l'PutItemaction pour une table DynamoDB dans le compte A.

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

  2. Ouvrez la IAMconsole.

  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 stratégie 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).

Général AWS

Créez un rôle dans le compte B.

La fonction Lambda du compte B utilise ce IAM rôle pour accéder à la table DynamoDB du compte A.

  1. Ouvrez la IAMconsole.

  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. Sélectionnez Next: Permissions (Étape suivante : 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. AWSLambdaExecute

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

Général AWS

Notez le rôleARN.

  1. Ouvrez la IAMconsole.

  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 la ressource Amazon (ARN). Vous utilisez le ARN lorsque vous configurez la fonction Lambda.

Général AWS
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 IAM rôle 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.

Remarque : 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 à ARN la table DynamoDB du compte A.

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

Général AWS
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 Name (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 IAM rôle que vous avez créé, par exempleDynamoDB-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.

Général AWS
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 IAM politique (DynamoDB-PutItem-Policy) lorsqu'elle n'est plus nécessaire. Pour plus d'informations, consultez la IAMdocumentation.

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

Général AWS

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

Remarque : Lorsque le client DynamoDB est instancié, le nom de la table DynamoDB est fourni à la place ARN 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.