如何從 Amazon OpenSearch Service 網域的另一個 AWS 帳戶還原資料?
上次更新日期:2022 年 2 月 24 日
我希望從 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 使用者的 AccessKey 和 SecretKey。
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/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 是 Amazon Elasticsearch Service 的後繼者。