註冊手動快照儲存庫 - Amazon OpenSearch Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

註冊手動快照儲存庫

您需要先向 OpenSearch Service 註冊快照儲存庫,才能手動擷取索引快照。此一次性操作要求您使用允許存取 的憑證簽署 AWS 請求TheSnapshotRole,如 中所述必要條件

步驟 1:在 OpenSearch 儀表板中映射快照角色 (如果使用精細存取控制)

精細存取控制會在註冊儲存庫時進行額外的步驟。即使您將HTTP基本身分驗證用於所有其他用途,仍需要將manage_snapshots角色映射至具有傳遞 iam:PassRole許可IAM的角色TheSnapshotRole

  1. 導覽至 OpenSearch 服務網域的 OpenSearch Dashboards 外掛程式。您可以在 OpenSearch 服務主控台的網域儀表板上找到儀表板端點。

  2. 從主選單中選擇 Security (安全性)、Roles (角色),然後選取 manage_snapshots 角色。

  3. 選擇 Mapped users (已映射的使用者)、Manage mapping (管理映射)。

  4. 新增具有傳遞 許可之角色ARN的 TheSnapshotRole。在後端角色 ARNs下放置角色。

    arn:aws:iam::123456789123:role/role-name
  5. 選擇 Map (映射),並確認使用者或角色顯示在 Mapped users (已映射的使用者) 中。

步驟 2:註冊儲存庫

下列快照索引標籤示範如何註冊快照目錄。如需在遷移至新網域後加密手動快照和註冊快照的特定選項,請參閱相關索引標籤。

Snapshots

若要註冊快照儲存庫,請將PUT請求傳送至 OpenSearch 服務網域端點。您可以使用 curl Python 用戶端範例Postman 或其他方法傳送已簽署的請求來註冊快照儲存庫。請注意,您無法在 OpenSearch 儀表板主控台中使用PUT請求來註冊儲存庫。

請求採用下列格式:

PUT domain-endpoint/_snapshot/my-snapshot-repo-name { "type": "s3", "settings": { "bucket": "s3-bucket-name", "base_path": "my/snapshot/directory", "region": "region", "role_arn": "arn:aws:iam::123456789012:role/TheSnapshotRole" } }
注意

儲存庫名稱不能以 "cs-" 開頭。此外,您不應該從多個網域寫入同一個儲存庫。只有一個網域應具有儲存庫的寫入存取權。

如果您的網域位於虛擬私有雲端 (VPC) 內,您的電腦必須連線至 VPC ,才能請求成功註冊快照儲存庫。存取 會因網路組態VPC而異,但可能涉及連線至 VPN或公司網路。若要檢查您是否可以到達 OpenSearch 服務網域,請在 Web 瀏覽器https://your-vpc-domain.region.es.amazonaws.com中導覽至 ,並驗證您是否收到預設JSON回應。

當您的 Amazon S3 儲存貯體位於網域 AWS 區域 OpenSearch以外的 時,請將 參數新增至"endpoint": "s3.amazonaws.com"請求。

Encrypted snapshots

您目前無法使用 AWS Key Management Service (KMS) 金鑰來加密手動快照,但您可以使用伺服器端加密 () 來保護快照SSE。

若要SSE使用您用作快照儲存庫之儲存貯體的 S3-managed金鑰開啟 ,請"server_side_encryption": true新增至PUT請求的 "settings" 區塊。如需詳細資訊,請參閱 Amazon Simple Storage Service 使用者指南中的使用具有 Simple Storage Service (Amazon S3) 管理的加密金鑰的伺服器端加密保護資料

或者,您可以在用作快照儲存庫的 S3 儲存貯體上使用 AWS KMS 金鑰進行伺服器端加密。如果您使用此方法,請務必為用於加密 S3 儲存貯體的 AWS KMS 金鑰提供TheSnapshotRole許可。如需詳細資訊,請參閱 AWS KMS中的金鑰政策

Domain migration

註冊快照儲存庫是一次性操作。但要從一個網域遷移到另一個網域,必須在舊網域和新網域上註冊相同的快照儲存庫。儲存庫名稱是任意的。

遷移至新網域或註冊具有多個網域的相同儲存庫時,請考慮下列準則:

  • 在新網域上註冊儲存庫時,請"readonly": true新增至PUT請求的"settings"區塊。此設定可防止您意外地從舊網域中覆寫資料。只有一個網域應具有儲存庫的寫入存取權。

  • 如果您要將資料遷移至不同 中的網域 AWS 區域,(例如,從 us-east-2 中的舊網域和儲存貯體遷移至 us-west-2 中的新網域),請在 PUT陳述式"endpoint": "s3.amazonaws.com"中取代 "region": "region" ,然後重試請求。

使用 Python 用戶端範例

Python 用戶端比簡單的HTTP請求更易於自動化,並且具有更好的可重複使用性。如果您選擇使用此方法來註冊快照儲存庫,請將下列範例 Python 程式碼儲存為 Python 檔案,例如 register-repo.py。用戶端需要 AWS SDK for Python (Boto3)請求requests-aws4auth 套件。用戶端包含其他快照操作的註解範例。

更新範本程式碼中的下列變數:hostregionpath 以及 payload

import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # domain endpoint region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '/_snapshot/my-snapshot-repo-name' # the OpenSearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name", "base_path": "my/snapshot/directory", "region": "us-west-1", "role_arn": "arn:aws:iam::123456789012:role/snapshot-role" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indexes except Dashboards and fine-grained access control) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security,-.opendistro-*", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '/_snapshot/my-snapshot-repo-name/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)