1.5.2. AWS S3 스토리지 버킷을 복제 리포지토리로 구성

AWS S3 스토리지 버킷을 MTC(Migration Toolkit for Containers)의 복제 리포지토리로 구성할 수 있습니다.

사전 요구 사항

  • 소스 및 대상 클러스터에서 AWS S3 스토리지 버킷에 액세스할 수 있어야 합니다.
  • AWS CLI가 설치되어 있어야 합니다.
  • 스냅샷 복사 방법을 사용하는 경우:

    • EC2 EBS(Elastic Block Storage)에 액세스할 수 있어야 합니다.
    • 소스 및 대상 클러스터는 동일한 지역에 있어야 합니다.
    • 소스 및 대상 클러스터는 동일한 스토리지 클래스를 보유해야 합니다.
    • 스토리지 클래스는 스냅샷과 호환 가능해야 합니다.

프로세스

  1. AWS S3 버킷을 생성합니다.

    $ aws s3api create-bucket \
        --bucket <bucket_name> \ 1
        --region <bucket_region> 2
    1
    S3 버킷 이름을 지정합니다.
    2
    S3 버킷 영역을 지정합니다(예: us-east-1).
  2. IAM 사용자 velero를 생성합니다.

    $ aws iam create-user --user-name velero
  3. EC2 EBS 스냅샷 정책을 생성합니다.

    $ cat > velero-ec2-snapshot-policy.json <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeVolumes",
                    "ec2:DescribeSnapshots",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:CreateSnapshot",
                    "ec2:DeleteSnapshot"
                ],
                "Resource": "*"
            }
        ]
    }
    EOF
  4. 하나 또는 모든 S3 버킷에 대한 AWS S3 액세스 정책을 생성합니다.

    $ cat > velero-s3-policy.json <<EOF
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:GetObject",
                    "s3:DeleteObject",
                    "s3:PutObject",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": [
                    "arn:aws:s3:::<bucket_name>/*" 1
                ]
            },
            {
                "Effect": "Allow",
                "Action": [
                    "s3:ListBucket",
                    "s3:GetBucketLocation",
                    "s3:ListBucketMultipartUploads"
                ],
                "Resource": [
                    "arn:aws:s3:::<bucket_name>" 2
                ]
            }
        ]
    }
    EOF
    1 2
    단일 S3 버킷에 대한 액세스 권한을 부여하려면 버킷 이름을 지정합니다. 모든 AWS S3 버킷에 대한 액세스 권한을 부여하려면 다음 예제와 같이 버킷 이름 대신 *를 지정합니다.

    출력 예

    "Resource": [
        "arn:aws:s3:::*"

  5. EC2 EBS 정책을 velero에 연결합니다.

    $ aws iam put-user-policy \
      --user-name velero \
      --policy-name velero-ebs \
      --policy-document file://velero-ec2-snapshot-policy.json
  6. AWS S3 정책을 velero에 연결합니다.

    $ aws iam put-user-policy \
      --user-name velero \
      --policy-name velero-s3 \
      --policy-document file://velero-s3-policy.json
  7. velero에 대한 액세스 키를 생성합니다.

    $ aws iam create-access-key --user-name velero
    {
      "AccessKey": {
            "UserName": "velero",
            "Status": "Active",
            "CreateDate": "2017-07-31T22:24:41.576Z",
            "SecretAccessKey": <AWS_SECRET_ACCESS_KEY>, 1
            "AccessKeyId": <AWS_ACCESS_KEY_ID> 2
        }
    }
    1 2
    MTC 웹 콘솔에 AWS 리포지토리를 추가하기 위해 AWS_SECRET_ACCESS_KEYAWS_ACCESS_KEY_ID를 기록합니다.