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

Última atualização: 06-08-2021

Quero restaurar dados de um domínio do Amazon OpenSearch Service (sucessor do Amazon Elasticsearch Service) em outra conta da AWS. Como fazê-lo?

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.
--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 está sendo 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 Como 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/snapshot/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.