본문 바로가기

AWS

RDS Aurora MySql snapshot export to S3

RDS 에서 자동 백업되는 snapshot 을 S3 로 export 하는 방법

 

절차는 크게 4단계로 진행한다.

1. S3 bucket 생성

2. Key Management Service 에 Key 생성

3. IAM Role 생성

4. RDS export 설정


1. S3 bucket 생성

-  기본 설정을 유지하며, 다만 Bucket Key 는 사용하지 않을 예정이다.

-> RDS 에서 export시 KMS key 로 encrypt 하므로 큰 의미가 없기 때문이다.


2. Key Management Service 에 Key 생성

RDS에서 S3로 내보내기 시, AWS KMS Key 를 요구하는데, 이때 사용할 Key를 미리 생성한다.

KMS > Customer managed keys 메뉴에서 Create Key 버튼을 클릭하여 생성할 수 있다.

 

Key type : Symmetric

Key usage : Encrypt and decrypt

 

 

 

Key 이름은 적당한 값을 입력한다.

 

 

Key 관리자로 IAM user 를 선택한다.

 

 

Key 를 사용할 Role 을 선택하는 화면이다.

 

설정 값을 확인하고 Key 를 생성한다.

생성된 Key의 ARN은 IAM Role을 생성할때 사용할 예정이다.

 


3. IAM Role 생성

RDS에서 S3로 내보내기 시, S3와 관련된 역할을 부여해야 하는데, 이때 사용할 Role 을 생성한다.

IAM > Roles 에서 Create role 버튼을 클릭하여 생성한다.

 

 

 

Trusted entity type : AWS service

 

 

Use case에서 RDS를 검색하고, RDS - Add Role and Database 를 선택한다.

 

Role에 권한을 부여하는 과정이다.

필요한 권한은 다음과 같다.

- S3 접근할 권한

- KMS 권한

 

S3와 관련된 권한은 s3:PutObject 만 필수이며, 상황에 따라 세부적으로 적용하면 된다.

필자는 이 Role을 여러 클러스터에서 사용할 예정으로, 모든 권한과, 모든 리소스를 적용하였다.

 

{
  "Effect": "Allow",
  "Action": [
    "s3:PutObject",
    "s3:ListBucket",
    "s3:GetBucketLocation"
  ],
  "Resource": [
    "arn:aws:s3:::<your-s3-bucket-name>",
    "arn:aws:s3:::<your-s3-bucket-name>/*"
  ]
}

 

KMS 관련 권한은 다음과 같다.

{
  "Effect": "Allow",
  "Action": [
    "kms:GenerateDataKey",
    "kms:Decrypt",

    "kms:Encrypt",

    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:<region>:<account-id>:key/<kms-key-id>"
}

 

S3FullAccess를 검색하여 부여한다.

 

적당한 이름을 지정하고 Role을 생성한다.

Trust policy에서 Service 키에 export.rds.amzonaws.com 이 필요한데

필자의 경우 Edit 버튼을 클릭하면 계속 첫 화면으로 이동하여, 생성 후 편집하였다.

 

 

 

생성된 Role의 상세 화면에서 Trust relationships 탭에서 아래와 같이 편집한다.

 

 

KMS와 관련한 권한을 부여한다.

생성된 Role의 상세 화면에서 Permissions 탭에서 인라인으로 추가했다.

자주 사용할 정책이 아니라 IAM 에서 별도로 정책을 생성하지 않았다.

 

 

이전에 언급한 다음 권한을 부여한다.

 

"kms:GenerateDataKey",
"kms:Decrypt",

"kms:Encrypt",

"kms:DescribeKey"

 

 

 

 

 

최종 부여된 권한 정책은 다음과 같다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*",
                "s3-object-lambda:*"
            ],
            "Resource": "*"
        }
    ]
}

 

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:GenerateDataKey",
                "kms:DescribeKey"
            ],
            "Resource": "<KMS key ARN>"
        }
    ]
}

 

4. RDS export S3

RDS 에서 자동 백업된 snapshot을 내보내기 할 예정이다.

 

이전 단계에서 생성한 버킷, Role, Key를 선택한다.

 

 

 

이상으로 이번 주제를 마칩니다.