Wie stelle ich Daten aus einer Amazon-OpenSearch-Service-Domäne in einem anderen AWS-Konto wieder her?

Letzte Aktualisierung: 06.08.2021

Ich möchte Daten von einer Amazon-OpenSearch-Service (Nachfolger von Amazon Elasticsearch Service)-Domäne in einem anderen AWS-Konto wiederherstellen. Wie gehe ich dabei vor?

Kurzbeschreibung

Um Daten von einer OpenSearch-Service-Domäne in einem anderen AWS-Konto wiederherzustellen, müssen Sie einen kontoübergreifenden Zugriff einrichten. Ein kontoübergreifender Zugriff muss zwischen Ihrer OpenSearch-Service-Domäne und der Domäne hergestellt werden, von der Sie Daten wiederherstellen möchten. Sie müssen Ihrer Domäne außerdem erlauben, auf den Amazon Simple Storage Service (Amazon S3)-Bucket zuzugreifen, in dem Ihre Daten gespeichert sind.

Führen Sie die folgenden Schritte aus, um diesen kontoübergreifenden Zugriff zu erstellen:

1.    Richten Sie in Konto A Folgendes ein:
Quelle: OpenSearch-Service-Domäne mit feinkörniger Zugriffskontrolle
Quelle: Amazon S3 Bucket

2.    Richten Sie in Konto B Ihr Ziel (OpenSearch-Service-Domäne) mit feinkörniger Zugriffssteuerung ein.

Hinweis: Sie müssen keinen S3 Bucket im Ziel (Konto B) erstellen. Ein einziger S3 Bucket wird verwendet, um die Daten über die AWS-Konten hinweg wiederherzustellen. Dieses Setup funktioniert auch für die OpenSearch-Service-Domänen ohne feinkörnige Zugriffssteuerung.

Auflösung

Hinweis: Die Beispiele in diesem Artikel verwenden Python- und Postman-Code.

Richten Sie einen kontoübergreifenden Zugriff für Konto A ein

1.    Erstellen Sie einen S3 Bucket in Konto A in derselben Region wie die OpenSearch-Service-Domäne.

2.    Erstellen Sie eine AWS Identity Access Management (IAM)-Richtlinie, um S3-Bucket-Zugriffsberechtigungen bereitzustellen:

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

Hinweis: Ersetzen Sie „arn:aws:s3:::snapshot“ durch Ihren Bucket-ARN aus Schritt 1.

3.    Erstellen Sie eine IAM-Rolle und wählen Sie Amazon Elastic Compute Cloud (Amazon EC2) als Ihren Service aus.

4.    Fügen Sie die IAM-Richtlinie (erstellt in Schritt 2) zu Ihrer neu erstellten IAM-Rolle hinzu.

5.    Öffnen Sie Ihre IAM-Rolle und wählen Sie Vertrauensbeziehungen aus.

6.    Aktualisieren Sie die Vertrauensbeziehung der folgenden Richtlinie:

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

Hinweis: Ersetzen Sie „Service“: „ec2.amazonaws.com“ durch „Service“: „es.amazonaws.com“. Notieren Sie außerdem den Rollen-ARN, den Sie für spätere Schritte benötigen werden.

7.    Wählen Sie eine dieser Optionen:
Aktualisieren Sie die Richtlinie (aus Schritt 2), um die Berechtigungen „iam:PassRole“ aufzunehmen, und fügen Sie die Richtlinie an Ihre IAM-Rolle an.
-oder-
Erstellen Sie eine neue IAM-Richtlinie und fügen Sie die Richtlinie an Ihre IAM-Rolle an.

Hinweis: Sie können alle Ihre Berechtigungen unter einer IAM-Rolle festlegen lassen, indem Sie die Richtlinie aktualisieren. Oder wenn Sie eine neue IAM-Richtlinie erstellen und die Berechtigungen aufteilen möchten, können Sie die IAM-Richtlinie für einen anderen Anwendungsfall wiederverwenden.

Hier ist eine Beispielrichtlinie mit den erforderlichen IAM-Berechtigungen:

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

Diese Richtlinie muss an den IAM-Benutzer oder die Rolle angefügt werden, die zum Signieren der HTTP-Anforderung verwendet wird.

Hinweis: Ersetzen Sie „arn:aws:iam::Account A:role/cross“ durch die Rolle, die Sie in Schritt 3 erstellt haben. Aktualisieren Sie außerdem „arn:aws:es:us-east-1:Account A:domain/srestore/*“ mit der OpenSearch-Service-Domäne, die in Konto A als Quelle aufgeführt ist. Die Quelle in Konto A wird für Cluster-Snapshots verwendet.

8.    Erstellen Sie einen IAM-Benutzer und fügen Sie die Richtlinie an, die Sie in Schritt 2 erstellt haben (einschließlich der erforderlichen Berechtigungen für den Zugriff auf Amazon S3). Dieser IAM-Benutzer muss Administratorzugriff auf die OpenSearch-Service-Domäne in Konto A haben, um mithilfe von FGAC Zugriff auf die Lese-/Schreib-API zu ermöglichen. Weitere Informationen zur Verwendung einer feinkörnigen Zugriffssteuerung finden Sie unter Zuordnen der Snapshot-Rolle in OpenSearch Dashboards (bei Verwendung von feinkörniger Zugriffssteuerung).

9.    (Optional) Wenn Sie einen Python-Code verwenden, um den S3 Bucket bei OpenSearch Service zu registrieren, starten Sie einen Amazon-EC2-Computer in Konto A und fügen Sie dann die in Schritt 3 erstellte IAM-Rolle hinzu.

Hinweis: Stellen Sie sicher, dass Ihre Sicherheitsgruppe auf die OpenSearch-Service-Domäne zugreifen kann.

Registrieren Sie den S3 Bucket bei der Quelle in Konto A

Führen Sie die folgenden Schritte aus, um den S3 Bucket bei der Quelldomäne in Konto A zu registrieren:

1.    Aktualisieren Sie das PUT-Feld mit einer URL, die den OpenSearch-Service-Domänen-Endpunkt und den S3-Bucket-Namen enthält. Beispiel:

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

2.    Wählen Sie die Registerkarte Autorisierung aus.

3.    Aktualisieren Sie den AccessKey und SecretKey des IAM-Benutzers.

4.    Aktualisieren Sie die AWS-Region und den Servicenamen.

5.    Wählen Sie Speichern aus.

6.    Wählen Sie die Registerkarte Überschriften.

7.    Wählen Sie Content-Type für Ihren Schlüsseltyp aus.

8.    Wählen Sie Anwendung/JSON für Ihren Schlüssel-Wert aus.

9.    Wählen Sie Speichern aus.

10.    Wählen Sie die Registerkarte Body aus.

11.    Verwenden Sie den folgenden Code:

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

12.    Wählen Sie Senden, um die Abfrage über die OpenSearch-Service-Konsole abzusenden. Nach Abschluss der Registrierung erhalten Sie eine Meldung Statuscode: 200 OK.

13.    Loggen Sie sich in Konto A bei OpenSearch Dashboards ein. Überprüfen Sie dann die verfügbaren Daten im S3-Bucket.

Hinweis: OpenSearch Dashboards ist der Nachfolger von Kibana.

14.    Verwenden Sie den folgenden Befehl, um einen neuen Snapshot zu erstellen:

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

Hier ist eine Beispielausgabe:

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

Diese Ausgabe bestätigt den Abschluss der S3 Bucket-Registrierung für die OpenSearch-Service-Domäne in Konto A.

Richten Sie einen kontoübergreifenden Zugriff für Konto B ein

1.    Erstellen Sie eine Richtlinie und eine IAM-Rolle in Konto B und geben Sie dabei denselben S3 Bucket-ARN wie Konto A an:

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

Hier ist ein Beispiel für eine Vertrauensrichtlinie für Ihre Rolle:

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

2.    Fügen Sie die zuvor erstellte IAM-Rolle an den IAM-Benutzer in Konto B. an. Derselbe IAM-Benutzer muss über Administratorzugriff auf das Ziel (Domäne mit FGAC) in Konto B verfügen. Weitere Informationen zum Aktualisieren des IAM-Benutzerzugriffs finden Sie unter Registrierung eines manuellen Snapshot-Repositorys.

3.     Aktualisieren Sie die S3-Bucket-Richtlinie für Ihren Bucket in Konto A und gewähren Sie Konto B Zugriff auf Ihren 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.    Registrieren Sie den S3 Bucket bei Ihrer Domäne (in Konto B).

Hinweis: Sie müssen die Authentifizierungsdaten des IAM-Benutzers in Konto B verwenden. Stellen Sie sicher, dass Sie OpenSearch Service als Ziel wählen.

{
    "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.    Loggen Sie sich bei OpenSearch Dashboards in Konto B ein.

6.    Prüfen Sie die Snapshots von Konto A, die im S3 Bucket verfügbar sind:

GET _cat/snapshots/casnapshot

Hier ist eine Beispielausgabe:

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

Diese Ausgabe bestätigt, dass der kontoübergreifende Zugriff in Konto B erfolgreich eingerichtet ist.