Come posso ripristinare i dati da un dominio Amazon OpenSearch Service in un altro account AWS?

Ultimo aggiornamento: 06-08-2021

Desidero ripristinare i dati da un dominio Amazon OpenSearch Service (successore di Amazon Elasticsearch Service) in un altro account AWS. In che modo posso farlo?

Breve descrizione

Per ripristinare i dati da un dominio OpenSearch Service in un altro account AWS, è necessario configurare l'accesso tra account. L'accesso tra account deve essere stabilito tra il dominio OpenSearch Service e il dominio da cui si sta tentando di ripristinare i dati. È inoltre necessario consentire al dominio di accedere al bucket Amazon Simple Storage Service (Amazon S3) che memorizza i dati.

Per creare questo accesso tra account, completa la seguente procedura:

1.    Nell’Account A, imposta quanto segue:
Origine: dominio OpenSearch Service con controllo granulare degli accessi
Origine: bucket Amazon S3

2.    Nell'Account B, imposta la tua destinazione (dominio OpenSearch Service) con un controllo granulare degli accessi.

Nota: non è necessario creare un bucket S3 nella destinazione (Account B). Per ripristinare i dati negli account AWS viene utilizzato un singolo bucket S3. Questa configurazione funziona anche per i domini di OpenSearch Service senza un controllo granulare degli accessi.

Risoluzione

Nota: gli esempi in questo articolo utilizzano il codice Python e Postman.

Configurazione dell'accesso tra account per l’Account A

1.    Crea un bucket S3 nell'Account A nella stessa regione del dominio OpenSearch Service.

2.    Crea una policy AWS Identity Access Management (IAM) per fornire le autorizzazioni di accesso al bucket 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: sostituisci "arn:aws:s3:::snapshot" con l’ARN del bucket dalla fase 1.

3.    Crea un ruolo IAM e seleziona Amazon Elastic Compute Cloud (Amazon EC2) come servizio.

4.    Aggiungi la policy IAM (creata nella fase 2) al ruolo IAM appena creato.

5.    Apri il ruolo IAM e scegli Relazioni di attendibilità.

6.    Aggiorna la relazione di attendibilità della seguente policy:

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

Nota: sostituisci "Service": "ec2.amazonaws.com" con "Service": "es.amazonaws.com". Inoltre, registra il ruolo ARN, di cui avrai bisogno per i passaggi successivi.

7.    Scegli una di queste opzioni:
Aggiorna la policy (dalla fase 2) per includere le autorizzazioni "iam:PassRole", collegandola al tuo ruolo IAM.
-oppure-
Crea una nuova policy IAM, collegandola al tuo ruolo IAM.

Nota: è possibile impostare tutte le autorizzazioni in un unico ruolo IAM aggiornando la policy. In alternativa, se desideri creare una nuova policy IAM e dividere le autorizzazioni, puoi riutilizzare la policy IAM per un altro caso d'uso.

Ecco un esempio di policy con le autorizzazioni IAM richieste:

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

Questa policy deve essere associata all'utente o al ruolo IAM utilizzato per firmare la richiesta HTTP.

Nota: sostituisci "arn:aws:iam::Account A:role/cross" con il ruolo creato nella fase 3. Inoltre, aggiorna "arn:aws:es:us-east-1:Account A:domain/srestore/*" con il dominio OpenSearch Service riportato come Origine nell’Account A. L’origine nell’Account A è utilizzato per gli snapshot del cluster.

8.    Crea un utente IAM e collega la policy creata nella fase 2 (che include le autorizzazioni necessarie per accedere ad Amazon S3). Questo utente IAM deve disporre dell'accesso Admin al dominio OpenSearch Service nell'Account A per fornire l'accesso all'API di lettura/scrittura tramite FGAC. Per ulteriori informazioni sull'utilizzo del controllo granulare degli accessi, consulta Mappatura del ruolo snapshot in OpenSearch Dashboards (se si utilizza un controllo granulare degli accessi).

9.    (Facoltativo) Se utilizzi il codice Python per registrare il bucket S3 in OpenSearch Service, avvia una macchina Amazon EC2 nell'Account A. Quindi, collega il ruolo IAM creato nella fase 3.

Nota: assicurati che il tuo gruppo di sicurezza possa accedere al dominio OpenSearch Service.

Registra il bucket S3 nell'origine nell’Account A

Per registrare il bucket S3 nel dominio di origine nell'Account A, completa la seguente procedura:

1.    Aggiorna il campo PUT con un URL che include l'endpoint di dominio OpenSearch Service e il nome del bucket S3. Ad esempio:

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

2.    Scegli la scheda Autorizzazione.

3.    Aggiorna AccessKey e SecretKey dell'utente IAM.

4.    Aggiorna la regione AWS e il nome del servizio.

5.    Scegli Salva.

6.    Scegli la scheda Intestazioni.

7.    Seleziona Content-Type per il tipo di chiave.

8.    Seleziona Application/JSON per il valore della chiave.

9.    Scegli Salva.

10.    Seleziona la scheda Corpo.

11.    Utilizza il seguente codice:

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

12.    Scegli Invia per inviare la query tramite la console di OpenSearch Service. Una volta completata la registrazione, riceverai un messaggio con Codice di stato: 200 OK.

13.    Accedi a OpenSearch Dashboards con l'Account A. Quindi, controlla i dati disponibili sul bucket S3.

Nota: OpenSearch Dashboards è il successore di Kibana.

14.    Utilizza il seguente comando per acquisire un nuovo snapshot:

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

Ecco un esempio di output.

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

Questo output verifica il completamento della registrazione del bucket S3 nel dominio del servizio OpenSearch nell'Account A.

Configurazione dell'accesso tra account per l’Account B

1.    Crea una policy e un ruolo IAM nell'Account B, specificando lo stesso ARN del bucket S3 dell'Account 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
        }
    ]
}

Ecco un esempio di policy di attendibilità per il tuo ruolo:

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

2.    Collega il ruolo IAM creato in precedenza all'utente IAM nell'Account B. Lo stesso utente IAM deve disporre dell'accesso da amministratore per la destinazione (dominio con FGAC) nell'Account B. Per ulteriori informazioni sull'aggiornamento dell'accesso utente IAM, consulta Registrazione di un repository di snapshot manuale.

3.     Aggiorna la policy del bucket S3 per il tuo bucket nell’Account A, fornendo all’Account B l'accesso al tuo 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.    Registra il bucket S3 nel tuo dominio (nell'Account B).

Nota: è necessario utilizzare le credenziali di autenticazione dell'utente IAM nell'Account B. Assicurati di scegliere OpenSearch Service come destinazione.

{
    "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.    Accedi OpenSearch Dashboards nell’Account B.

6.    Controlla gli snapshot dell'Account A disponibili nel bucket S3:

GET _cat/snapshots/casnapshot

Ecco un esempio dell'output:

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

Questo output conferma che l'accesso tra account è stato impostato correttamente per l’Account B.