다른 AWS 계정의 Amazon Elasticsearch Service 도메인에서 데이터를 복원하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 2월 10일

다른 AWS 계정의 Amazon ES(Amazon Elasticsearch Service) 도메인에서 데이터를 복원하려고 합니다. 어떻게 해야 하나요?

간략한 설명

다른 AWS 계정의 Amazon ES 도메인에서 데이터를 복원하려면 사용자의 도메인과 데이터를 복원하려는 Amazon ES 도메인 간에 교차 계정 액세스를 설정해야 합니다. 또한 도메인에서 데이터를 저장하는 Amazon S3(Amazon Simple Storage Service) 버킷에 액세스하도록 허용해야 합니다.

이 교차 계정 액세스를 생성하려면 다음 단계를 수행합니다.

1.    계정 A에서 다음을 설정합니다.

소스(Source): Amazon ES 도메인, 세분화된 액세스 제어 포함
소스(Source): Amazon S3 버킷

2.    계정 B에서 세부적인 액세스 제어를 통해 대상(Amazon ES 도메인)을 설정합니다.

참고: 대상(계정 B)에 Amazon S3 버킷을 만들 필요가 없습니다. 단일 Amazon S3 버킷은 AWS 계정 전체에서 데이터를 복원하는 데 사용됩니다. 이 설정은 세분화된 액세스 제어 없이 Amazon ES 도메인에서도 작동합니다.

해결 방법

참고: 이 문서의 예제는 Python과 Postman 코드로 작성되었습니다.

계정 A에 대한 교차 계정 액세스 설정

1.    Amazon ES 도메인과 동일한 리전의 계정 A에서 Amazon S3 버킷을 생성합니다.

2.    AWS Identity Access Management(IAM) 정책을 생성하여 Amazon S3 버킷 액세스 권한을 제공합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::snapshot" --> bucket ARN created in step 1.
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::snapshot/*"
            ]
        }
   ]
}

"arn:aws:s3:::snapshot"을 버킷 ARN으로 바꿉니다.

3.    역할을 만들고 Amazon Elastic Compute Cloud(Amazon EC2)를 서비스로 선택합니다.

4.    방금 만든 IAM 정책을 추가합니다.

5.    [신뢰 관계(Trust relationships)]를 선택합니다.

6.    다음 정책의 신뢰 관계를 업데이트합니다.

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

"Service": "ec2.amazonaws.com"을 "Service": "es.amazonaws.com"으로 바꿉니다.

참고: 역할 ARN을 사용하여 이후 단계를 수행할 수 있습니다.

7.    웹 사이트의 CNAME이 CloudFront 배포의 도메인 이름을 가리키도록 도메인의 DNS 레코드를 업데이트합니다.

{
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::Account A:role/cross"
        },
        {
            "Effect": "Allow",
            "Action": "es:ESHttpPut",
            "Resource": "arn:aws:es:us-east-1:Account A:domain/srestore/*"
        }

“arn:aws:iam::Account A:role/cross”를 3단계에서 만든 역할로 바꿉니다. 또한 계정 A의 소스로 나열된 Amazon ES 도메인으로 “arn:aws:es:us-east-1:Account A:domain/srestore/*”를 업데이트합니다. 계정 A의 소스는 클러스터 스냅샷에 사용됩니다.

8.    IAM 사용자를 만들고 3단계에서 만든 정책을 연결합니다. FGAC를 사용하여 읽기/쓰기 API에 대한 액세스 권한을 제공하려면 동일한 IAM 사용자에게 계정 A의 Amazon ES 도메인에 대한 관리자 액세스 권한이 있어야 합니다. 세분화된 액세스 제어 사용에 대한 자세한 내용은 사용자에게 역할 매핑을 참조하세요.

9.    (선택 사항) Python 코드를 사용하여 Amazon S3 버킷을 Amazon ES에 등록하는 경우 계정 A에서 Amazon EC2 시스템을 시작한 다음 3단계에서 생성한 IAM 역할을 연결합니다.

참고: 보안 그룹이 Amazon ES 도메인에 액세스할 수 있는지 확인해야 합니다. 자세한 내용은 사용자에게 역할 매핑을 참조하세요.

계정 A의 소스에 Amazon S3 버킷 등록

계정 A의 소스 도메인에 Amazon S3 버킷을 등록하려면 다음 단계를 수행합니다.

1.    Amazon ES 도메인 엔드포인트 및 S3 버킷 이름이 포함된 URL로 [PUT] 필드를 업데이트합니다. 예:

https://endpointofES domain.amazonaws.com/_snapshot/snapshot

2.    [승인(Authorization)] 탭을 선택합니다.

3.    IAM 사용자의 [AccessKey] 및 [SecretKey]를 업데이트합니다.

4.    [AWS 리전(AWS Region)] 및 [서비스 이름(Service Name)]을 업데이트합니다.

5.    저장(Save)을 선택합니다.

6.    [헤더(Headers)] 탭을 선택합니다.

7.    키 유형으로 [콘텐츠 유형(Content-Type)]을 선택합니다.

8.    키 값으로 [애플리케이션/JSON(Application/JSON)]을 선택합니다.

9.    저장(Save)을 선택합니다.

10.    [본문(Body)] 탭을 선택합니다.

11.    다음 코드를 사용하세요.

{
    "type": "s3",
    "settings" : {
        "bucket" : "snapshot",
        "region" : "us-east-1",
        "role_arn" : "arn:aws:iam::Account A:role/cross"
}

12.    Amazon ES 콘솔을 통해 쿼리를 제출하려면 [보내기(Send)]를 선택합니다. 등록이 완료되면 상태 코드: 200 OK(Status Code: 200 OK) 메시지가 나타납니다.

13.    계정 A의 Kibana에 로그인한 다음 Amazon S3 버킷에서 사용 가능한 데이터를 확인합니다.

14.    다음 명령을 사용하여 새 스냅샷을 만듭니다.

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

예제 출력은 다음과 같습니다.

GET _cat/snapshot/casnapshot
today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4

이 출력은 계정 A의 Amazon ES 도메인에 대한 Amazon S3 버킷 등록이 완료되었는지 확인합니다.

계정 B에 대한 교차 계정 액세스 설정

1.    계정 B에서 정책 및 IAM 역할을 만들어 계정 A와 동일한 Amazon S3 버킷 ARN을 지정합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::snapshot"  --> S3 bucket ARN from Account A
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "iam:PassRole"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::snapshot/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::Account B:role/cross"  --> role created in Account B 
        },
        {
            "Effect": "Allow",
            "Action": "es:*",
            "Resource": "arn:aws:es:us-east-1:Account B:domain/restore/*"  --> Destination ES domain in Account B
        }
    ]
}

다음은 역할에 대한 신뢰 정책의 예입니다.

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

2.    이전에 만든 IAM 역할을 계정 B의 IAM 사용자에게 연결합니다. 동일한 IAM 사용자에게 계정 B의 대상(FGAC가 있는 Amazon ES 도메인)에 대한 관리자 액세스 권한이 있어야 합니다. IAM 사용자 액세스 업데이트에 대한 자세한 내용은 사용자에게 역할 매핑을 참조하세요.

3.     계정 A의 버킷에 대한 Amazon S3 버킷 정책을 업데이트하여 계정 B에 버킷에 대한 액세스 권한을 제공합니다.

{
    "Version": "2012-10-17",
    "Id": "Policy1568001010746",
    "Statement": [
        {
            "Sid": "Stmt1568000712531",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::Account B:role/cross"  --> Role which is created in Account B 
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::snapshot"
        },
        {
            "Sid": "Stmt1568001007239",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::Account B:role/cross" -->  Role which is created in Account B 
            },
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::snapshot/*"
        }
    ]
}

4.    Amazon S3 버킷을 Amazon ES 도메인(계정 B)에 등록합니다.

참고: 계정 B에서 IAM 사용자의 인증 자격 증명을 사용해야 합니다. Amazon ES를 대상으로 선택해야 합니다.

{
    "type": "s3",
    "settings" : {
        "bucket" : "snapshot",
        "region" : "us-east-1",
        "role_arn" : "arn:aws:iam::Account B:role/cross" ->  role which is created in Account B.
}

5.    계정 B의 Kibana에 로그인합니다.

6.    Amazon S3 버킷에서 사용할 수 있는 계정 A의 스냅샷을 확인합니다.

GET _cat/snapshots/casnapshot

출력 예는 다음과 같습니다.

today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4

이 출력은 계정 B에서 교차 계정 액세스가 성공적으로 설정되었음을 확인합니다.