如何從 Amazon OpenSearch Service 網域的另一個 AWS 帳戶還原資料?

上次更新日期:2021 年 8 月 6 日

我希望從 Amazon OpenSearch Service (Amazon Elasticsearch Service 的繼任者) 網域的另一個 AWS 帳戶還原資料。該如何進行?

簡短描述

如要從 OpenSearch Service 網域的另一個 AWS 帳戶還原資料,您需要設定跨帳戶存取。您必須在您的 OpenSearch Service 網域與您嘗試還原資料的網域之間建立跨帳戶存取權。您還必須允許您的網域存取儲存資料的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

若要建立跨帳戶存取,請執行下列步驟:

1.    在帳戶 A 中設定下列項目:
Source:設有精細存取控制的 OpenSearch Service 網域
Source:Amazon S3 儲存貯體

2.    在帳戶 B 中設定設有精細存取控制的目標 (OpenSearch Service 網域)。

注意:您不需要在目標 (帳戶 B) 中創建 S3 儲存貯體。使用單一 S3 儲存貯體來還原不同 AWS 帳戶的資料。此設定也適用於沒有精細存取控制的 OpenSearch Service 網域。

解決方案

注意:本文中的範例使用 Python 和 Postman 程式碼。

設定帳戶 A 的跨帳戶存取

1.    在與 OpenSearch Service 網域相同的區域中,建立帳戶 A 的 S3 儲存貯體。

2.    建立 AWS Identity Access Management (IAM) 政策以提供 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/*"
            ]
        }
   ]
}

注意:以步驟 1 中的儲存貯體 ARN 替換 "arn:aws:s3:::snapshot"。

3.    建立 IAM 角色並選取 Amazon Elastic Compute Cloud (Amazon EC2) 作為您的服務。

4.    將步驟 2 中建立的 IAM 政策加入您新建立的 IAM 角色。

5.    開啟您的 IAM 角色並選擇 Trust relationships (信任關係)

6.    更新下列政策的信任關係:

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

注意:以 "Service": "es.amazonaws.com" 替換 "Service": "ec2.amazonaws.com"。此外,請記錄角色 ARN,您在稍後的步驟中將會需要有關資料。

7.    選擇下列其中一個選項:
更新步驟 2 的政策,加入 "iam:PassRole" 許可,將政策附加至您的 IAM 角色。
-或-
建立新的 IAM 政策,將政策附加至您的 IAM 角色。

注意:您可以透過更新政策,將所有許可放置在同一個 IAM 角色中。或者,如果您希望建立新的 IAM 政策並分開放置許可,您可以在其他使用案例中重複使用 IAM 政策。

以下是具有所需 IAM 許可的政策範例:

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

此政策必須附加至用來簽署 HTTP 請求的 IAM 使用者或角色。

注意:以步驟 3 中建立的角色替換 "arn:aws:iam::Account A:role/cross"。此外,將 "arn:aws:es:us-east-1:Account A:domain/srestore/*" 更新為帳戶 A 中Source (來源) 所列出的 OpenSearch Service 網域。帳戶 A 中的 Source (來源) 會用作建立叢集快照。

8.    建立 IAM 使用者並附加您在步驟 2 中建立的政策 (其中包括存取 Amazon S3 所需的許可)。此 IAM 使用者必須擁有帳戶 A 中 OpenSearch Service 網域的管理員存取權,才能存取使用 FGAC 的讀/寫 API。如需有關使用精細存取控制的詳細資訊,請參閱 OpenSearch Dashboards 的快照角色映射 (在使用精細存取控制的情況下)

9.    (選用) 如果您使用 Python 程式碼將 S3 儲存貯體註冊至 OpenSearch Service,請在帳戶 A 中啟動 Amazon EC2 機器,然後附加在步驟 3 中建立的 IAM 角色。

注意:請確定您的安全群組可以存取 OpenSearch Service 網域。

將 S3 儲存貯體註冊至帳戶 A 中的來源

若要將 S3 儲存貯體註冊至帳戶 A 中的來源網域,請執行下列步驟:

1.    使用包含 OpenSearch Service 網域端點和 S3 儲存貯體名稱的 URL 更新 PUT 欄位。例如:

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

2.    選擇 Authorization (授權) 標籤。

3.    更新 IAM 使用者的 AccessKeySecretKey

4.    更新 AWS Region (AWS 區域) 和 Service Name (服務名稱)。

5.    選擇 Save (儲存)。

6.    選擇 Headers (標題) 標籤。

7.    選擇 Content-Type (內容類型) 作為金鑰類型。

8.    選擇 Application/JSON (應用程式/JSON) 作為鍵值。

9.    選擇 Save (儲存)。

10.    選擇 Body (主題) 標籤。

11.    使用以下程式碼:

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

12.    選擇 Send (傳送),以透過 OpenSearch Service 主控台提交查詢。註冊完成後,您會收到 Status Code: 200 OK (狀態碼:200 OK) 的訊息。

13.    在帳戶 A 中登入 OpenSearch Dashboards,然後檢查 S3 儲存貯體上的可用資料。

注意:OpenSearch Dashboards 是 Kibana 的繼任者。

14.    使用下列命令來建立新的快照:

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

下列是輸出範例:

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

此輸出會驗證是否已經將 S3 儲存貯體註冊至帳戶 A 中的 OpenSearch Service 網域。

設定帳戶 B 的跨帳戶存取

1.    在帳戶 B 中建立政策和 IAM 角色,並指定與帳戶 A 相同的 S3 儲存貯體 ARN:

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

以下是您角色的信任政策範例:

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

2.    將您先前建立的 IAM 角色附加至帳戶 B 中的 IAM 使用者。該 IAM 使用者必須擁有帳戶 B 中 目的地 (具有 FGAC 的網域) 的管理員存取權。如需有關更新 IAM 使用者存取的詳細資訊,請參閱註冊手動快照儲存庫

3.     更新帳戶 A 中儲存貯體的 S3 儲存貯體政策,為帳戶 B 提供儲存貯體的存取權:

{
    "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.    在帳戶 B 中,將 S3 儲存貯體註冊到您的網域。

注意:您必須使用帳戶 B 中 IAM 使用者的身分驗證憑證。請務必選擇 OpenSearch Service 作為您的目標。

{
    "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.    在帳號 B 中登入 OpenSearch Dashboards。

6.    檢查 S3 儲存貯體中可用的帳戶 A 快照:

GET _cat/snapshots/casnapshot

以下是一個輸出的範例:

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

此輸出會確認是否成功在帳戶 B 中建立跨帳戶存取。