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

3 分的閱讀內容
0

我想要從另一個帳戶中的 Amazon OpenSearch Service 網域還原資料。

簡短說明

若要從另一個帳戶中的 OpenSearch Service 網域還原資料,您必須為下列網域設定跨帳戶存取權:

  • 您要從中還原資料的來源網域(帳戶 A)
  • 您的 OpenSearch Service 目的地網域(帳戶 B)

您還必須為網域設定權限以存取儲存資料的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。

注意: 您不需要在目的地 (帳戶 B) 中建立 Amazon S3 儲存貯體。OpenSearch Service 使用單一 Amazon S3 儲存貯體來還原您各個帳戶的資料。

解決方法

注意: OpenSearch Service 使用帳戶 A 中的來源網域進行叢集快照。

首先,在與 OpenSearch Service 目的地網域相同的 AWS 區域中的帳戶 A 中,建立 Amazon S3 儲存貯體。然後,完成以下步驟來設定跨帳戶存取權。您必須同時完成帳戶 A 和帳戶 B 的步驟。

在兩個帳戶中設定對 S3 儲存貯體的存取權

請完成下列步驟:

  1. 建立 AWS Identity and Access Management (IAM) 角色,授予 OpenSearch Service 存取 S3 儲存貯體的權限。然後,在服務選取 Amazon Elastic Compute Cloud (Amazon EC2)。

  2. 建立以下授予 S3 儲存貯體存取權的 IAM 政策,然後將該政策附加到 IAM 角色:

    {     "Version": "2012-10-17",
         "Statement": [{
              "Action": [
                   "s3:ListBucket"
              ],
              "Effect": "Allow",
              "Resource": [
                   "arn:aws:s3:::AccountA_S3_Bucket_Name"
              ]
         },
         {
              "Action": [
                   "s3:GetObject",
                   "s3:PutObject",
                   "s3:DeleteObject",
                   "iam:PassRole"
              ],
              "Effect": "Allow",
              "Resource": [
                   "arn:aws:s3:::AccountA_S3_Bucket_Name/*"
              ]
         }]
    }

    注意:arn:aws:s3:::Account AWS_S3_Bucket\Name 替換為您儲存貯體的 ARN。

  3. 使用下列陳述式更新帳戶 A 的儲存貯體政策,以授予帳戶 B 中的 IAM 角色跨帳戶儲存貯體存取權

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "Permission for AccountB role",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::account-B-id:role/AccountB-role"
                },
                "Action": [
                    "s3:GetLifecycleConfiguration",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject"
                ],
                "Resource": [
                    "arn:aws:s3:::AccountA-bucket",
                    "arn:aws:s3:::AccountA-bucket/*"
                ]
            }
        ]
    }
  4. 更新角色的信任政策以包含以下信任關係:

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

    注意: 請記下角色的 ARN,以在後續步驟中使用。

  5. 若要授予 OpenSearch Service 對 S3 儲存貯體的寫入權限,請執行下列其中一項:
    若要將所有權限分組到一個 IAM 角色下,請在現有的 IAM 政策中包含 iam:PassRole 權限。
    -或-
    若要分割權限,請建立具有 iam:PassRole 權限的新 IAM 政策。
    注意: 您必須將 IAM 政策附加到用於簽署 HTTP 請求的 IAM 角色。
    以下範例政策包含所需的 IAM 權限:

    {     "Version": "2012-10-17",
         "Statement": [{
              "Effect": "Allow",
              "Action": "iam:PassRole",
              "Resource": "arn:aws:iam::Account:snapshot role"
         },
         {
              "Effect": "Allow",
              "Action": "es:ESHttpPut",
              "Resource": "arn:aws:es:us-east-1:Account:domain/srestore/*"
         }]
    }

    注意:arn:aws:iam::Account:snapshot-role 替換為您的 IAM 角色。另外,將 arn:aws:es:us-east-1:Account:domain/restore/* 替換為帳戶 A 或帳戶 B 中的 OpenSearch Service 網域。

  6. 如果您為網域啟用了更精細的存取控制權,則必須將 IAM 角色對應到 OpenSearch 儀表板。IAM 角色使用更精細的存取控制權來提供對讀取或寫入 API 的存取權。

  7. (選用) 如果您使用帳戶 A 中的 Python 用戶端將儲存貯體註冊到 OpenSearch Service,則在帳戶 A 中啟動 EC2 執行個體

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

在兩個帳戶中將 S3 儲存貯體註冊為快照儲存庫

重要: 對於帳戶 B,您必須使用帳戶 B 的 IAM 使用者驗證憑證,然後選擇 OpenSearch Service 作為您的目的地。

若要註冊儲存貯體,請使用 Postman 應用程式發出 HTTP PUT 請求。要安裝該應用程式,請參閱 Postman 網站上的下載 Postman

請完成下列步驟:

  1. 對於 PUT,輸入包含 OpenSearch Service 域端點和 S3 儲存貯體名稱的 URL,例如 your-domain-endpoint.amazonaws.com/_snapshot/your-snapshot-repository-name
  2. 選擇 Authorization (授權) 索引標籤。
  3. Postman 下,在 Type (類型) 中,選擇 AWS Signature (AWS 簽章)。對於 AccessKeySecretKey,輸入 IAM 使用者的存取金鑰
  4. AWS Region (AWS 區域) 中,輸入您的區域。
  5. Service Name (服務名稱) 中,輸入 es
  6. 選擇 Save (儲存)。
  7. 選擇 Headers (標題) 索引標籤。
  8. Key type (金鑰類型) 中,選擇 Content-Type
  9. Key value (索引鍵值) 中,選擇 Application/JSON
  10. 選擇 Save (儲存)。
  11. 選擇 Body (內文) 索引標籤。
  12. 將 S3 儲存貯體註冊為快照儲存庫:
{     "type": "s3",
     "settings": {
          "bucket": "snapshot",
          "region": "us-east-1",
          "role_arn": "arn:aws:iam::Account:role/cross"
     }
}

注意:snapshot (快照) 替換為您的 S3 儲存貯體名稱,將 us-east-1 替換為您的區域,並將 arn:aws:iam::Account:role/cross 替換為帳戶 A 或帳戶 B 中的 IAM 角色。 若要提交查詢,請選擇 Send (傳送)。

註冊完成後,您將收到狀態碼: 200 確定訊息。

驗證快照儲存庫設定是否正確

在帳戶 A 中,完成以下步驟:

  1. 開啟 OpenSearch Dashboards,然後檢查儲存貯體上的可用資料。
  2. 執行以下命令來拍攝新的快照:
    PUT /_snapshot/my-snapshot-repo-name/snapshot_name
    注意:my-snapshot-repo-name 替換為您的 S3 儲存貯體名稱,將 snapshot name (快照名稱) 替換為您的快照名稱。
    以下範例輸出驗證了帳戶 A 中對 OpenSearch Service 網域的 S3 儲存貯體的完整註冊:
    GET _cat/snapshots/my-snapshot-repo-name
    
    SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4

在帳戶 B 中,完成下列步驟:

  1. 開啟 OpenSearch 儀表板。

  2. 執行以下命令以查看 S3 儲存貯體中可用的帳戶 A 快照:

    GET _cat/snapshots/my-snapshot-repo-name

    注意:my-snapshot-repo-name 替換為您的快照儲存庫。
    下列範例輸出確認您在帳戶 B 中設定跨帳戶存取權:

    today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
  3. 若要還原資料,請執行以下命令:

    POST /_snapshot/my-snapshot-repo-name/snapshotID/_restore

    注意:my-snapshot-repo-name 替換為您的快照儲存庫,將 snapshotID 替換為您的快照名稱。

  4. 若要還原特定索引,請執行以下命令:

    POST /_snapshot/my-snapshot-repo-name/snapshot ID/_restore
    {
       "indices": "index name1,index name2"
    }

    注意:my-snapshot-repo-name 替換為您的快照儲存庫,將 snapshotID 替換為您的快照名稱。另外,將 index name1indexname2 替換為您的索引。

  5. 若要驗證還原的索引,請執行下列命令:

    GET _cat/indices?v

相關資訊

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

步驟 1.3: 附加儲存貯體政策,以向帳戶 B 授予跨帳戶權限

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

IAM 角色管理

AWS 官方
AWS 官方已更新 2 個月前