如何从另一个 AWS 账户中的 Amazon OpenSearch Service 域恢复数据?
我想要从另一个 AWS 账户中的 Amazon OpenSearch Service 域恢复数据。我该如何操作?
简短描述
要从另一个 AWS 账户中的 OpenSearch Service 域恢复数据,您必须设置跨账户访问权限。必须在您的 OpenSearch Service 域和您尝试从中恢复数据的域之间建立跨账户访问权限。您还必须允许您的域访问存储数据的 Amazon Simple Storage Service (Amazon S3) 存储桶。
要创建此跨账户访问权限,请执行以下步骤:
1. 在账户 A 中,设置以下内容:
**来源:**具有精细访问控制的 OpenSearch Service 域
来源: Amazon S3 存储桶
2. 在账户 B 中,使用精细访问控制设置目标(OpenSearch Service 域)。
**注意:**您无需在目标(账户 B)中创建 S3 存储桶。单个 S3 存储桶用于在 AWS 账户间还原数据。此设置也适用于没有精细访问控制的 OpenSearch Service 域。
解决方法
**注意:**本文中的示例使用 Python 和 Postman 代码。
为账户 A 设置跨账户访问权限
1. 在与 OpenSearch Service 域处于相同 Region(区域)的账户 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:aws:s3:::snapshot”替换为您的存储桶 ARN。
3. 创建 IAM 角色并选择 Amazon Elastic Compute Cloud (Amazon EC2) 作为您的服务。
4. 将 IAM 策略(在第 2 步中创建)添加到新创建的 IAM 角色。
5. 打开你的 IAM 角色,然后选择 Trust relationships(信任关系)。
6. 更新以下策略的信任关系:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
**注意:**将“Service”:“ec2.amazonaws.com”替换为“Service”:“es.amazonaws.com”。此外,请记录角色 ARN,后续步骤将需要该角色 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 用户或角色。
**注意:**将 "arn:aws:iam::Account A:role/cross" 替换为您在步骤 3 中创建的角色。此外,使用在账户 A 中列为 Source(源)的 OpenSearch Service 域更新“arn:aws:es:us-east-1:Account A:domain/srestore/*”。账户 A 中的 Source(源)用于集群快照。
8. 创建 IAM 用户并附加您在第 2 步中创建的策略(其中包括访问 Amazon S3 所需的权限)。这个 IAM 用户必须拥有对账户 A 中的 OpenSearch Service 域的 Admin(管理员)访问权限,以便使用 FGAC 提供读/写 API 的访问权限。有关使用精细访问控制的详细信息,请参阅在 OpenSearch 控制面板中映射快照角色(如果使用精细访问控制)。
9. (可选)如果您使用 Python 代码将 S3 存储桶注册到 OpenSearch Service,请在账户 A 中启动 Amazon EC2 计算机,然后附加在步骤 3 中创建的 IAM 角色。
**注意:**确保您的安全组可以访问 OpenSearch Service 域。
将 S3 存储桶注册到账户 A 中的源
要将 S3 存储桶注册到账户 A 中的源域,请执行以下步骤:
1. 使用包含 OpenSearch Servie 域端点和 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 正常)消息。
13. 在账户 A 中登录 OpenSearch 控制面板。然后,检查 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
此输出验证是否完成了对账户 A 中 OpenSearch Service 域的 S3 存储桶注册。
为账户 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 中的 Destination(目标)(具有 FGAC 的域)具有 administrator(管理员)访问权限。有关更新 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. 将 S3 存储桶注册到您的域(在账户 B 中)。
**注意:**您必须使用账户 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 控制面板。
6. 检查账户 A 中的快照是否在 S3 存储桶中可用:
GET _cat/snapshots/casnapshot
以下是输出的示例:
today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
此输出确认跨账户访问权限已在账户 B 中成功设置。
相关信息
相关内容
- AWS 官方已更新 1 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 1 年前