如何从另一个 AWS 账户中的 Amazon OpenSearch Service 域恢复数据?

4 分钟阅读
0

我想要从另一个 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 用户的 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 正常)消息。

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 中成功设置。


相关信息

如何将数据从一个 Amazon OpenSearch Service 域迁移到另一个?

附加存储桶策略以向账户 B 授予跨账户权限

使用远程重新索引迁移 Amazon OpenSearch Service 索引

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