Como restauro dados de um domínio do Amazon OpenSearch Service em outra conta da AWS?

Data da última atualização: 24/02/2022

Desejo restaurar dados de um domínio do Amazon OpenSearch Service em outra conta da AWS. Como fazer isso?

Breve descrição

Para restaurar dados de um domínio do OpenSearch Service em outra conta da AWS, você deve configurar o acesso entre contas. O acesso entre contas deve ser estabelecido entre o domínio do OpenSearch Service e o domínio de onde você está tentando restaurar dados. Você também deve permitir que o seu domínio acesse o bucket do Amazon Simple Storage Service (Amazon S3) que armazena os seus dados.

Para criar esse acesso entre contas, execute as seguintes etapas:

1.    Na conta A, configure o seguinte:
Fonte: domínio do OpenSearch Service com controle de acesso refinado
Fonte: bucket do Amazon S3

2.    Na conta B, configure o seu destino (domínio do OpenSearch Service) com controle de acesso refinado.

Observação: você não precisa criar um bucket do S3 no destino (conta B). Um único bucket do S3 é usado para restaurar os dados entre as contas da AWS. Essa configuração também funciona para os domínios do OpenSearch Service sem controle de acesso refinado.

Resolução

Observação: os exemplos neste artigo usam código de Python e Postman.

Configure o acesso entre contas para a conta A

1.    Crie um bucket do S3 na conta A na mesma região que o domínio do OpenSearch Service.

2.    Crie uma política do AWS Identity Access Management (IAM) para fornecer permissões de acesso ao bucket do S3:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::snapshot"
      ]
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:DeleteObject",
        "iam:PassRole"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::snapshot/*"
      ]
    }
  ]
}

Observação: substitua “arn:aws:s3:::snapshot” pelo seu ARN do bucket da etapa 1.

3.    Crie uma função do IAM e selecione o Amazon Elastic Compute Cloud (Amazon EC2) como o seu serviço.

4.    Adicione a política do IAM (criada na etapa 2) à sua função do IAM recém-criada.

5.    Abra a sua função do IAM e escolha Trust relationships (Relações de confiança).

6.    Atualize a relação de confiança da seguinte política:

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

Observação: substitua “Service”: “ec2.amazonaws.com” por “Service”: “es.amazonaws.com”. Além disso, registre a função do ARN, pois será necessária nas etapas posteriores.

7.    Escolha uma das opções a seguir:
Atualize a política (da etapa 2) para incluir as permissões “iam:PassRole”, anexando a política à sua função do IAM. Essa permissão permite que o serviço OpenSearch tenha acesso de gravação a um bucket do S3.

-ou-

Crie uma nova política do IAM, anexando a política à sua função do IAM.

Observação: você pode manter todas as permissões definidas em uma função do IAM atualizando a política. Ou, se você quiser criar uma nova política do IAM e dividir as permissões, poderá reutilizar a política do IAM para outro caso de uso.

Aqui está um exemplo de política com as permissões do IAM necessárias:

{
    "Version": "2012-10-17",
    "Statement": [
    {
        "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/*"
    }
  ]
}

Essa política deve ser anexada ao usuário ou à função do IAM que é usada para assinar a solicitação HTTP.

Observação: substitua “arn:aws:iam::Account A:role/cross” pela função que você criou na etapa 3. Além disso, atualize “arn:aws:es:us-east-1:Account A:domain/srestore/*” com o domínio do OpenSearch Service listado como a fonte na conta A. A fonte na conta A é usada para snapshots de cluster.

8.    Crie um usuário do IAM e anexe a política que você criou na etapa 2 (que inclui as permissões necessárias para acessar o Amazon S3). Esse usuário do IAM deve ter acesso de administrador ao domínio do OpenSearch Service na conta A para fornecer acesso à API de leitura/gravação usando o FGAC. Para obter mais informações sobre como usar o controle de acesso refinado, consulte Mapear a função de snapshot no OpenSearch Dashboards (se estiver usando controle de acesso refinado).

9.    (Opcional) se você estiver usando o código Python para registrar o bucket do S3 no OpenSearch Service, inicie uma máquina do Amazon EC2 na conta A. Em seguida, anexe a função do IAM criada na etapa 3.

Observação: certifique-se de que o seu grupo de segurança possa acessar o domínio do OpenSearch Service.

Registre o bucket do S3 na fonte na conta A

Para registrar o bucket do S3 no domínio de fonte na conta A, execute as seguintes etapas:

1.    Atualize o campo PUT com um URL que inclua o endpoint de domínio do OpenSearch Servie e o nome do bucket do S3. Por exemplo:

https://endpointofdomain.amazonaws.com/_snapshot/snapshot

2.    Escolha a guia Authorization (Autorização).

3.    Atualize a AccessKey e a SecretKey do usuário do IAM.

4.    Atualize a AWS Region (Região da AWS) e o Service Name (Nome do serviço).

5.    Escolha Save (Salvar).

6.    Escolha a guia Headers (Cabeçalhos).

7.    Selecione Content-Type (Tipo de conteúdo) para o seu tipo de chave.

8.    Selecione Application/JSON (Aplicação/JSON) para a sua chave-valor.

9.    Escolha Save (Salvar).

10.    Escolha a guia Body (Corpo).

11.    Use o código a seguir:

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

12.    Escolha Send (Enviar) para enviar a consulta por meio do console do OpenSearch Service. Após a conclusão do registro, você receberá uma mensagem Status Code: 200 OK (Código do status: 200 OK).

13.    Acesse a conta A no OpenSearch Dashboards. Em seguida, confira os dados disponíveis no bucket do S3.

Observação: o OpenSearch Dashboards é o sucessor do Kibana.

14.    Use o seguinte comando para capturar um novo snapshot:

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

Aqui está um exemplo de saída:

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

Essa saída verifica a conclusão do registro do bucket do S3 no domínio do OpenSearch Service na conta A.

Configure o acesso entre contas para a conta B

1.    Crie uma política e uma função do IAM na conta B especificando o mesmo ARN do bucket do S3 que a conta A:

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

Aqui está um exemplo de política de confiança para sua função:

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

2.    Anexe a função do IAM que você criou anteriormente ao usuário do IAM na conta B. O mesmo usuário do IAM deverá ter acesso de administrador ao destino (domínio com FGAC) na conta B. Para obter mais informações sobre como atualizar o acesso do usuário do IAM, consulte Como registrar um repositório de snapshots manual.

3.     Atualize a política de bucket do S3 para o seu bucket na conta A fornecendo à conta B acesso ao bucket:

{
    "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.    Registre o bucket do S3 em seu domínio (na conta B).

Observação: você deve usar as credenciais de autenticação do usuário do IAM na conta B. Certifique-se de escolher o OpenSearch Service como o seu destino.

{
    "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.    Acesse a conta B no OpenSearch Dashboards.

6.    Confira os snapshots da conta A disponíveis no bucket do S3:

GET _cat/snapshots/casnapshot

Aqui está um exemplo da saída:

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

Essa saída confirma que o acesso entre contas foi configurado com êxito na conta B.

O Amazon OpenSearch Service é o sucessor do Amazon Elasticsearch Service.