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

4 分的閱讀內容
0

我希望從 Amazon OpenSearch 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 角色。此許可讓 OpenSearch 服務具有對 S3 儲存貯體的寫入存取權。

-或-

建立新的 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 儲存貯體上的可用資料。

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

PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>

下列是輸出範例:

GET _cat/snapshots/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 中建立跨帳戶存取。


相關資訊

如何將資料從一個 Amazon OpenSearch Service 網域遷移到另一個網域?

附加儲存貯體政策,使帳戶 B 擁有跨帳戶許可

使用遠端重新索引遷移 Amazon OpenSearch Service 索引

AWS 官方
AWS 官方已更新 2 年前