Lorsque j'exporte les données d'une table Amazon DynamoDB vers une solution Amazon Simple Storage (Amazon S3), l’erreur « Accès refusé » s'affiche.
Brève description
Si une erreur AccessDenied s'affiche lors de l'exportation, cela signifie que votre entité AWS Identity and Access Management (IAM) ne dispose peut-être pas des autorisations appropriées. Pour exporter les données d'une table DynamoDB à partir d'un point situé dans votre fenêtre Reprise ponctuelle (PITR), utilisez Exportation de DynamoDB vers S3. Vous pouvez utiliser cette fonctionnalité pour les comptes AWS qui utilisent l'une des méthodes de protection des données suivantes :
- Norme de chiffrement avancée (AES)
- Clés gérées par le client AWS Key Management Service (AWS KMS)
Résolution
Remarque : Exécutez toutes les commandes de l'interface de ligne de commande AWS (AWS CLI) depuis le compte où se trouve la table DynamoDB. Si des erreurs surviennent lorsque vous exécutez des commandes de l’AWS CLI, consultez la section Résoudre les erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.
Prérequis :
AES
Pour exporter les données d'une table DynamoDB vers un compartiment Amazon S3 du même compte, exécutez la commande suivante :
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <S3 bucket name> \
--export-format <Export format> \
--s3-sse-algorithm AES256
Pour exporter les données d'une table DynamoDB vers un compartiment Amazon S3 d'un autre compte, exécutez la commande suivante :
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <Cross account S3 bucket name> \
--s3-bucket-owner <Cross account ID> \
--export-format <Export format> \
--s3-sse-algorithm AES256
Clé gérée par le client AWS KMS
Pour les comptes qui utilisent une clé gérée par le client AWS KMS, mettez à jour la stratégie de clé gérée par le client AWS KMS. La stratégie de clé doit autoriser l'entité IAM à accéder à la clé AWS KMS.
Exemple de stratégie :
{
"Version": "2012-10-17",
"Id": "key-consolepolicy-3",
"Statement": [
{
"Sid": "Enable IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::<Account ID>:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
L'entité IAM doit également disposer des autorisations nécessaires pour accéder à la clé AWS KMS utilisée pour effectuer l'exportation.
Exemples d'autorisations de clé AWS KMS :
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "<Provide KMS key ARN>"
}
]
}
Pour utiliser une clé gérée par le client AWS KMS afin d'exporter vers un compartiment S3 au sein du même compte, exécutez la commande suivante :
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <S3 bucket name> \
--export-format <Export format> \
--s3-sse-algorithm KMS \
--s3-sse-kms-key-id <KMS key ARN>
Pour utiliser une clé gérée par le client AWS KMS afin d'exporter vers un compartiment S3 d'un autre compte, exécutez la commande suivante :
aws dynamodb export-table-to-point-in-time \
--table-arn <Table ARN> \
--s3-bucket <Cross account S3 bucket name> \
--s3-bucket-owner <Cross account ID> \
--export-format <Export format> \
--s3-sse-algorithm KMS \
--s3-sse-kms-key-id <KMS key ARN>
Pour accéder aux données de table exportées pour les utilisateurs de différents comptes, mettez à jour la stratégie de clé AWS KMS dans le compte source DynamoDB. Pour accéder aux objets exportés, la stratégie de clé AWS KMS doit autoriser l'utilisateur à utiliser la commande kms:Decrypt.
Exemple de stratégie de clé AWS KMS :
{
"Sid": "Enable cross account IAM User Permissions",
"Effect": "Allow",
"Principal": {
"AWS": "<Provide ARN of destination account user>"
},
"Action": "kms:",
"Resource": "*"
}
Résolution de problèmes supplémentaires
Après avoir vérifié toutes les autorisations, si le message d'erreur AccessDenied s’affiche toujours, vérifiez si votre organisation dispose de politiques de contrôle des services (SCP). Si votre organisation compte des SCP, détachez ou mettez à jour la politique.
Informations connexes
Demande d'exportation d'une table dans DynamoDB
Comment puis-je fournir un accès entre comptes à des objets se trouvant dans des compartiments Amazon S3 ?
Réplication entre comptes avec Amazon DynamoDB
Pourquoi les utilisateurs entre comptes reçoivent-ils des erreurs d'accès refusé lorsqu'ils tentent d'accéder à mes objets S3 que j'ai chiffrés avec une clé gérée par le client AWS KMS ?
Éléments de la politique AWS JSON : Principal