J'essaie d'exporter un instantané d'Amazon RDS for MySQL vers Amazon S3, mais j’obtiens une erreur. Pourquoi cela se produit-il ?

Dernière mise à jour : 18/08/2021

J'essaie d'exporter un instantané vers mon compartiment Amazon Simple Storage Service (Amazon S3) à partir de mon instance MySQL Amazon Relational Database Service (Amazon RDS). Mais, une erreur s’affiche ou l'option n'est pas disponible pour moi. D'où vient le problème et comment le résoudre ?

Brève description

L'exportation d'un instantané de base de données de Amazon RDS vers Amazon S3 peut échouer pour les raisons suivantes :

  • Configuration incorrecte du rôle et des stratégies AWS Identity Access Management (IAM)
  • Échec de la vérification des clés AWS KMS
  • Tâche d'exportation bloquée à l’état « STARTING » (DÉMARRAGE)
  • Erreur d'accès refusé
  • ID de clé AWS KMS inexistant
  • Problèmes d'autorisation sur la table
  • Rôle IAM inexistant

Solution

Configuration incorrecte du rôle et des stratégies AWS Identity Access Management (IAM)

Si votre rôle IAM ne dispose pas des autorisations appropriées pour exporter un instantané depuis votre instance Amazon RDS for MySQL vers Amazon S3, les erreurs suivantes s'affichent :

An error occurred (IamRoleMissingPermissions) when calling the StartExportTask operation: The IAM Role arn:aws:iam::1234567890:role/service-role/role_name isn't authorized to call s3:GetBucketLocation on the S3 bucket my_bucket_name OR
An error occurred (IamRoleMissingPermissions) when calling the StartExportTask operation: The IAM Role arn:aws:iam::1234567890:role/service-role/role_name isn't authorized to call s3:DeleteObject on the S3 bucket my_bucket_name OR
An error occurred (IamRoleMissingPermissions) when calling the StartExportTask operation: The IAM Role arn:aws:iam::1234567890:role/service-role/role_name isn't authorized to call s3:PutObject on the S3 bucket my_bucket_name OR
An error occurred (IamRoleMissingPermissions) when calling the StartExportTask operation: The IAM Role arn:aws:iam::1234567890:role/service-role/role_name isn't authorized to call s3:ListBucket on the S3 bucket my_bucket_name OR
An error occurred (IamRoleMissingPermissions) when calling the StartExportTask operation: The IAM Role arn:aws:iam::1234567890:role/service-role/role_name isn't authorized to call s3:GetObject on the S3 bucket my_bucket_name.

Pour réussir l'exportation d'un instantané vers Amazon S3, votre rôle IAM doit disposer des autorisations appropriées pour les cinq actions suivantes :

  • s3:PutObject
  • s3:DeleteObject
  • s3:GetObject
  • s3:ListBucket
  • s3:GetBucketLocation

Voici un exemple de stratégie IAM (au format JSON) qui autorise ces cinq actions :

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExportPolicy",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject*",
        "s3:ListBucket",
        "s3:GetObject*",
        "s3:DeleteObject*",
        "s3:GetBucketLocation"
      ],
      "Resource": [
        "arn:aws:s3:::s3_bucket_name”,
        "arn:aws:s3:::s3_bucket_name/export/*"
      ]
    }
  ]
}

Échec de la vérification des clés AWS KMS

Si votre clé AWS KMS a été désactivée ou supprimée pendant l'exportation d'un instantané, l'erreur suivante s'affiche :

Error: KMS keys check failed. Please check the credentials on your KMS key and try again.

Pour résoudre ce problème, assurez-vous que la clé AWS KMS utilisée pour l’exportation d’instantanés existe dans la console KMS. L'état de la clé AWS KMS doit être « Enabled » (Activé).

La tâche d'exportation est bloquée à l’état « STARTING » (DÉMARRAGE)

Lorsque vous exportez votre instantané de base de données Amazon RDS for MySQL vers Amazon S3, la tâche peut prendre plus de temps que d'habitude, selon la taille et le type de base de données. La tâche d'exportation restaure et met à l'échelle toute la base de données avant d'extraire les données vers Amazon S3. Au cours de cette étape, votre tâche d'exportation indique le statut « STARTING » (DÉMARRAGE). Lorsque votre tâche commence à exporter les données vers Amazon S3, le statut passe à « In progress » (En cours). Si la tâche d'exportation réussit, l'état indique que la tâche est terminée. En cas de problème avec le processus de votre tâche d'exportation, l'état indique l’échec de la tâche.

Erreur d'accès refusé

Si votre rôle IAM ne dispose pas des autorisations requises et que vous utilisez AWS Lambda avec Amazon API Gateway, l'erreur suivante s'affiche :

An error occurred (AccessDenied) when calling the StartExportTask operation: User: arn:aws:sts::1234567890:assumed-role/user/rds_lambda is not authorized to perform: rds:StartExportTask

Pour résoudre ce problème, autorisez l'accès en écriture à RDS:StartExportTask. Vous devez cependant avoir accès à l'action StartExportTask.

Par exemple :

"Effect": "Allow",
"Action": "rds:StartExportTask",
"Resource": "*"

Si votre rôle IAM n'est pas autorisé à appeler l'opération StartExportTask, l'erreur suivante s'affiche :

An error occurred (AccessDenied) when calling the StartExportTask operation: User: arn:aws:sts::1234567890:assumed-role/user/rds_lambda is not authorized to perform: iam:PassRole on Resource ,iam role arn.
{
    "Effect": "Allow",
    "Action": [
      "iam:GetRole",
      "iam:PassRole"
    ],
    "Resource": "arn:aws:iam::1234567890:role/role_name"
}

ID de clé AWS KMS inexistant

Si votre rôle IAM n'est pas autorisé à accéder à la clé AWS KMS, l'erreur suivante s'affiche :

Error: Your request to export snapshot to S3 has failed. An internal error has occurred. Please try your query again at a later time OR The KMS key key_id doest not exist, is not enabled or you do not have permissions to access it.

Pour résoudre cette erreur, veillez à inclure les actions KMSKeyID suivantes dans votre stratégie de clé KMS :

GrantOperation.Encrypt
GrantOperation.Decrypt
GrantOperation.GenerateDataKey
GrantOperation.GenerateDataKeyWithoutPlaintext
GrantOperation.ReEncryptFrom
GrantOperation.ReEncryptTo
GrantOperation.CreateGrant
GrantOperation.DescribeKey
GrantOperation.RetireGrant

Par exemple :

{
  "Effect": "Allow",
  "Action": [
     “GrantOperation.Encrypt”,
  “GrantOperation.Decrypt”,
  “GrantOperation.GenerateDataKey”,
  “GrantOperation.GenerateDataKeyWithoutPlaintext”,
  “GrantOperation.ReEncryptFrom”,
  “GrantOperation.ReEncryptTo”,
  “GrantOperation.CreateGrant”,
  “GrantOperation.DescribeKey”,
  “GrantOperation.RetireGrant”
  ],
  "Resource": "arn:aws:iam::1234567890:role/role_name"
}

Problèmes d'autorisation sur la table

Si vous ne disposez pas des autorisations appropriées pour accéder à une table dans Amazon RDS, l'erreur suivante s'affiche :

Error: PERMISSIONS_DO_NOT_EXIST error stating that (n) tables were skipped

Pour résoudre ce problème, exécutez la commande suivante après vous être connecté à une base de données PostgreSQL :

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO superuser_name;

Rôle IAM inexistant

Si la relation d'approbation appropriée n'est pas spécifiée dans la stratégie d'approbation de votre rôle IAM, l'erreur suivante s'affiche :

Error: The Principal export.rds.amazonaws.com isn't allowed to assume the IAM role arn:aws:iam::1234567890:role/iam_role or the IAM role arn:aws:iam::1234567890:role/iam_role doesn't exist.

Pour résoudre ce problème, assurez-vous que la relation d'approbation spécifie « export.rds.amazonaws.com » au lieu de « rds.amazonaws.com » dans votre stratégie IAM. Par exemple :

{
  "Version": "2012-10-17",
  "Statement": [
  {
    "Effect": "Allow",
    "Principal": {
    "Service": "export.rds.amazonaws.com"
    },
    "Action": "sts:AssumeRole",
    "Condition": {}
  }
  ]
}

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?