上次更新日期:2021 年 2 月 10 日
我想从另一个 AWS 账户中的 Amazon Elasticsearch Service (Amazon ES) 域恢复数据。我该如何操作?
简短描述要从另一个 AWS 账户中的 Amazon ES 域恢复数据,您需要在您的域和您尝试从中恢复数据的 Amazon ES 域之间设置跨账户访问权限。您还必须允许您的域访问存储数据的 Amazon Simple Storage Service (Amazon S3) 存储桶。
要创建此跨账户访问权限,请执行以下步骤:
1.在账户 A 中,设置以下内容:
来源:具有精细访问控制的 Amazon ES 域
来源: Amazon S3 存储桶
2.在账户 B 中,使用精细访问控制设置目标(Amazon ES 域)。
注意:您无需在目标(账户 B)中创建 Amazon S3 存储桶。单个 Amazon S3 存储桶用于在 AWS 账户间还原数据。此设置也适用于没有精细访问控制的 Amazon ES 域。
解决方法注意:本文中的示例使用 Python 和 Postman 代码编写。
为账户 A 设置跨账户访问权限1.在与 Amazon ES 域处于相同区域的账户 A 中创建 Amazon S3 存储桶。
2.创建 AWS Identity Access Management (IAM) 策略以提供 Amazon S3 存储桶访问权限:
{
"Version": "2012-10-17",
"Statement": ,
"Effect": "Allow",
"Resource":
},
{
"Action": ,
"Effect": "Allow",
"Resource":
}
]
}
将“arn:aws:s3:::snapshot”替换为您的存储桶 ARN。
3.创建角色并选择 Amazon Elastic Compute Cloud (Amazon EC2) 作为您的服务。
4.添加刚刚创建的 IAM 策略。
5.选择 Trust relationships(信任关系)。
6.更新以下策略的信任关系:
{
"Version": "2012-10-17",
"Statement":
}
将“Service”:“ec2.amazonaws.com”替换为“Service”:“es.amazonaws.com”。
注意:在后续步骤中,您可以使用角色 ARN。
7.编辑您创建的策略:
{
"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/*"
}
将“arn:aws:iam::Account A:role/cross”替换为您在步骤 3 中创建的角色。此外,使用在账户 A 中列为源的 Amazon ES 域更新“arn:aws:es:us-east-1:Account A:domain/srestore/*”。账户 A 中的源用于集群快照。
8.创建 IAM 用户并附加您在步骤 3 中创建的策略。这个 IAM 用户必须具有对账户 A 中的 Amazon ES 域的管理员访问权限,以便使用 FGAC 提供读/写 API 的访问权限。有关使用精细访问控制的更多信息,请参阅将角色映射到用户。
9.(可选)如果您使用 Python 代码将 Amazon S3 存储桶注册到 Amazon ES,请在账户 A 中启动 Amazon EC2 计算机,然后附加在步骤 3 中创建的 IAM 角色。
注意:确保您的安全组可以访问 Amazon ES 域。有关更多信息,请参阅将角色映射到用户。
将 Amazon S3 存储桶注册到账户 A 中的源要将 Amazon S3 存储桶注册到账户 A 中的源域,请执行以下步骤:
1.使用包含 Amazon ES 域终端节点和 S3 存储桶名称的 URL 更新 PUT 字段。例如:
https://endpointofES domain.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(发送)以通过 Amazon ES 控制台提交查询。注册完成后,您会收到 Status Code: 200 OK(状态代码:200 正常)消息。
13.在账户 A 中登录 Kibana。然后,检查 Amazon S3 存储桶上的可用数据。
14.使用以下命令拍摄新快照:
PUT /_snapshot/<registered_snapshot_repository>/<snapshot_name>
以下是示例输出:
GET _cat/snapshot/casnapshot
today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
此输出验证是否完成了对账户 A 中 Amazon ES 域的 Amazon S3 存储桶注册。
为账户 B 设置跨账户访问1.在账户 B 中创建策略和 IAM 角色,以指定与账户 A 相同的 Amazon S3 存储桶 ARN:
{
"Version": "2012-10-17",
"Statement": ,
"Effect": "Allow",
"Resource":
},
{
"Action": ,
"Effect": "Allow",
"Resource":
},
{
"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":
}
2.将您之前创建的 IAM 角色附加到账户 B 中的 IAM 用户。这一 IAM 用户必须对账户 B 中的目标(具有 FGAC 的 Amazon ES 域)具有管理员访问权限。有关更新 IAM 用户访问权限的更多信息,请参阅将角色映射到用户。
3. 更新账户 A 中的存储桶的 Amazon S3 存储桶策略,以为账户 B 提供对存储桶的访问权限:
{
"Version": "2012-10-17",
"Id": "Policy1568001010746",
"Statement":
}
4.将 Amazon S3 存储桶注册到您的 Amazon ES 域(在账户 B 中)。
注意:您必须使用账户 B 中的 IAM 用户的身份验证凭证。请确保选择 Amazon ES 作为目标。
{
"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 中登录 Kibana。
6.检查账户 A 中的快照是否在 Amazon S3 存储桶中可用:
GET _cat/snapshots/casnapshot
以下是输出的示例:
today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
此输出确认跨账户访问权限已在账户 B 中成功设置。