¿Cómo puedo restaurar datos de un dominio de Amazon OpenSearch Service en otra cuenta de AWS?

Última actualización: 24/02/2022

Quiero restaurar datos de un dominio de Amazon OpenSearch Service en otra cuenta de AWS. ¿Cómo puedo hacerlo?

Descripción corta

Para restaurar datos de un dominio de OpenSearch Service en otra cuenta de AWS, debe configurar el acceso entre cuentas. El acceso entre cuentas debe establecerse entre el dominio de OpenSearch Service y el dominio desde el que intenta restaurar datos. También debe permitir que su dominio acceda al bucket de Amazon Simple Storage Service (Amazon S3) que almacena sus datos.

Para crear este acceso entre cuentas, realice los siguientes pasos:

1.    En la cuenta A, configure lo siguiente:
Origen: dominio de OpenSearch Service con control de acceso detallado
Origen: bucket de Amazon S3

2.    En la cuenta B, configure el destino (dominio de OpenSearch Service) con control de acceso detallado.

Nota: No es necesario crear un bucket de S3 en el destino (cuenta B). Se utiliza un único bucket de S3 para restaurar los datos en todas las cuentas de AWS. Esta configuración también funciona para los dominios de OpenSearch Service que no cuentan con el control de acceso detallado.

Resolución

Nota: En los ejemplos de este artículo se utilizan los códigos Python y Postman.

Configurar el acceso entre cuentas para la cuenta A

1.    Cree un bucket de S3 en la cuenta A en la misma región en la que se encuentra el dominio de OpenSearch Service.

2.    Cree una política de AWS Identity and Access Management (IAM) para proporcionar permisos de acceso al bucket de 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/*"
      ]
    }
  ]
}

Nota: Reemplace “arn:aws:s3:::snapshot” por el ARN de su bucket del paso 1.

3.    Cree un rol de IAM y seleccione Amazon Elastic Compute Cloud (Amazon EC2) como su servicio.

4.    Agregue la política de IAM (creada en el paso 2) al rol de IAM recién creado.

5.    Abra su rol de IAM y elija Trust relationships (Relaciones de confianza).

6.    Actualice la relación de confianza de la siguiente política:

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

Nota: Reemplace "Service": "ec2.amazonaws.com" por "Service": "es.amazonaws.com". Además, registre el ARN del rol, ya que lo necesitará para los pasos posteriores.

7.    Elija una de estas opciones:
Actualizar la política (del paso 2) para incluir los permisos “iam:PassRole” adjuntando la política a su rol de IAM. Este permiso permite al servicio OpenSearch tener acceso de escritura a un bucket de S3.

-o bien-

Crear una nueva política de IAM y adjuntarla a su rol de IAM.

Nota: Puede configurar todos los permisos en un solo rol de IAM actualizando la política. O bien, si desea crear una nueva política de IAM y dividir los permisos, puede volver a utilizar la política de IAM para otro caso de uso.

A continuación, se muestra un ejemplo de política con los permisos de IAM necesarios:

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

Esta política debe adjuntarse al usuario o al rol de IAM que se utiliza para firmar la solicitud HTTP.

Nota: Reemplace “arn:aws:iam::Account A:role/cross” por el rol que creó en el paso 3. Además, actualice "arn:aws:es:us-east-1:Account A:domain/srestore/*" por el dominio de OpenSearch Service que aparece como origen en la cuenta A. El origen de la cuenta A se utiliza para las instantáneas del clúster.

8.    Cree un usuario de IAM y adjunte la política que creó en el paso 2 (que incluye los permisos necesarios para acceder a Amazon S3). Este usuario de IAM debe tener acceso de administrador al dominio de OpenSearch Service de la cuenta A para proporcionar acceso a la API de lectura o escritura mediante el FGAC. Para obtener más información acerca del uso del control de acceso detallado, consulte Asignar el rol de instantánea en OpenSearch Dashboards (si utiliza el control de acceso detallado).

9.    (Opcional) Si utiliza el código Python para registrar el bucket de S3 en OpenSearch Service, lance una máquina de Amazon EC2 en la cuenta A. A continuación, adjunte el rol de IAM que creó en el paso 3.

Nota: Asegúrese de que su grupo de seguridad pueda acceder al dominio de OpenSearch Service.

Registrar el bucket de S3 en el origen de la cuenta A

Para registrar el bucket de S3 en el dominio de origen de la cuenta A, lleve a cabo los siguientes pasos:

1.    Actualice el campo PUT con una dirección URL que incluya el punto de conexión del dominio de OpenSearch Service y el nombre del bucket de S3. Por ejemplo:

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

2.    Seleccione la pestaña Authorization (Autorización).

3.    Actualice la AccessKey (Clave de acceso) y la SecretKey (Clave secreta) del usuario de IAM.

4.    Actualice la AWS region (región de AWS) y el Service Name (Nombre del servicio).

5.    Elija Save (Guardar).

6.    Seleccione la pestaña Headers (Encabezados).

7.    Seleccione Content-Type (Tipo de contenido) para su tipo de clave.

8.    Seleccione Application/JSON (Aplicación/JSON) para el valor de clave.

9.    Elija Save (Guardar).

10.    Seleccione la pestaña Body (Cuerpo).

11.    Utilice el siguiente código:

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

12.    Seleccione Send (Enviar) para enviar la consulta a través de la consola de OpenSearch Service. Una vez finalizado el registro, recibirá un mensaje de Status Code: 200 OK (Código de estado: 200 OK).

13.    Inicie sesión en OpenSearch Dashboards en la cuenta A. A continuación, verifique los datos disponibles en el bucket de S3.

Nota: OpenSearch Dashboards es el sucesor de Kibana.

14.    Utilice el siguiente comando para tomar una nueva instantánea:

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

A continuación, se muestra un resultado de ejemplo:

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

Este resultado verifica la finalización del registro del bucket de S3 en el dominio de OpenSearch Service en la cuenta A.

Configurar el acceso entre cuentas para la cuenta B

1.    Cree una política y un rol de IAM en la cuenta B especificando el mismo ARN de bucket de S3 que la cuenta 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
        }
    ]
}

A continuación, aparece un ejemplo de política de confianza para su rol:

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

2.    Adjunte el rol de IAM que creó anteriormente al usuario de IAM en la cuenta B. El mismo usuario de IAM debe tener acceso de administrador al destino (dominio con FGAC) de la cuenta B. Para obtener más información acerca de cómo actualizar el acceso de usuarios de IAM, consulte Registrar un repositorio de instantáneas manuales.

3.     Actualice la política de bucket de S3 de su bucket de la cuenta A y proporcione a la cuenta B acceso al 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 el bucket de S3 en su dominio (en la cuenta B).

Nota: Debe utilizar las credenciales de autenticación del usuario de IAM de la cuenta B. Asegúrese de elegir OpenSearch Service como 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.    Inicie sesión en OpenSearch Dashboards en la cuenta B.

6.    Verifique las instantáneas de la cuenta A que están disponibles en el bucket de S3:

GET _cat/snapshots/casnapshot

A continuación, se presenta un ejemplo del resultado:

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

Este resultado confirma que el acceso entre cuentas se configuró correctamente en la cuenta B.

Amazon OpenSearch Service es el sucesor de Amazon Elasticsearch Service.