Amazon RDS MySQL에서 Amazon S3로 스냅샷을 내보내려고 하는데 오류가 발생합니다. 왜 이런 현상이 발생합니까?

최종 업데이트 날짜: 2021년 8월 18일

Amazon Relational Database Service(Amazon RDS) MySQL 인스턴스에서 Amazon Simple Storage Service(Amazon S3) 버킷으로 스냅샷을 내보내려고 합니다. 하지만 오류가 발생하거나 옵션을 사용할 수 없습니다. 왜 이런 현상이 발생하며, 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Amazon RDS에서 Amazon S3로 DB 스냅샷을 내보내면 다음과 같은 이유로 실패할 수 있습니다.

  • AWS Identity Access Management(IAM) 역할 및 정책 잘못된 구성
  • AWS KMS 키 검사 실패
  • 내보내기 작업이 “STARTING”에서 멈춤
  • 액세스 거부 오류
  • AWS KMS 키 ID가 존재하지 않음
  • 테이블에 대한 권한 문제
  • IAM 역할이 존재하지 않음

해결 방법

AWS Identity Access Management(IAM) 역할 및 정책 잘못된 구성

IAM 역할에 Amazon RDS MySQL 인스턴스에서 Amazon S3로 스냅샷을 내보낼 수 있는 적절한 권한이 없는 경우 다음과 같은 오류가 발생합니다.

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.

스냅샷을 Amazon S3로 성공적으로 내보내려면 IAM 역할에 다음 다섯 가지 작업에 대해 적절한 권한이 있어야 합니다.

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

다음은 이러한 다섯 가지 작업을 허용하는 IAM 정책(JSON 형식)의 예입니다.

{
  "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/*"
      ]
    }
  ]
}

AWS KMS 키 검사 실패

스냅샷을 내보내는 동안 AWS KMS 키를 비활성화하거나 삭제한 경우 다음 오류가 발생합니다.

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

이 문제를 해결하려면 스냅샷 내보내기에 사용되는 AWS KMS 키KMS 콘솔에 있는지 확인합니다. AWS KMS 키 상태는 ‘Enabled’로 표시되어야 합니다.

내보내기 작업이 ‘STARTING’ 상태에서 멈춤

Amazon RDS for MySQL DB 스냅샷을 Amazon S3로 내보내는 경우 데이터베이스 크기와 유형에 따라 작업이 평소보다 오래 걸릴 수 있습니다. 내보내기 작업은 Amazon S3로 데이터를 추출하기 전에 전체 데이터베이스를 복원하고 확장합니다. 이 단계에서 내보내기 작업에 ‘STARTING’ 상태가 표시됩니다. 작업이 Amazon S3로 데이터를 내보내기 시작하면 상태가 ‘In progress’로 변경됩니다. 내보내기 작업이 성공하면 상태가 작업이 완료되었음을 나타냅니다. 내보내기 작업 프로세스에 문제가 있는 경우 상태가 작업 실패를 나타냅니다.

액세스 거부 오류

IAM 역할에 필요한 권한이 누락되어 있고 Amazon API Gateway와 함께 AWS Lambda를 사용하는 경우 다음 오류가 발생합니다.

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

이 문제를 해결하려면 rds:StartExportTask쓰기 액세스를 허용합니다. 그러나 StartExportTask 작업에 대한 액세스 권한이 있어야 합니다.

예를 들어 다음과 같습니다.

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

IAM 역할에 StartExportTask 작업을 호출할 수 있는 권한이 없으면 다음 오류가 발생합니다.

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.

이 오류를 해결하려면 AWS 서비스에 역할을 전달할 권한을 사용자에게 부여해야 합니다.

{
    "Effect": "Allow",
    "Action": [
      "iam:GetRole",
      "iam:PassRole"
    ],
    "Resource": "arn:aws:iam::1234567890:role/role_name"
}

AWS KMS 키 ID가 존재하지 않음

IAM 역할이 AWS KMS 키에 액세스할 수 있는 권한이 없는 경우 다음 오류가 발생합니다.

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.

이 오류를 해결하려면 KMS 키 정책에 다음 KmsKeyID 작업을 포함해야 합니다.

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

예를 들어 다음과 같습니다.

{
  "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"
}

테이블에 대한 권한 문제

Amazon RDS의 테이블에 액세스할 수 있는 적절한 권한이 없는 경우 다음 오류가 발생합니다.

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

이 문제를 해결하려면 PostgreSQL 데이터베이스에 연결한 후 다음 명령을 실행합니다.

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

IAM 역할이 존재하지 않음

IAM 역할의 신뢰 정책에 적절한 신뢰 관계가 지정되지 않은 경우 다음 오류가 발생합니다.

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.

이 문제를 해결하려면 신뢰 관계가 IAM 정책에서 ‘rds.amazonaws.com’ 대신 ‘export.rds.amazonaws.com’ 지정해야 합니다. 예를 들어 다음과 같습니다.

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

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?