如何从另一个 AWS 账户中的 OpenSearch Service 域恢复数据?
我想从另一个账户中的 Amazon OpenSearch Service 域恢复数据。
简短描述
要从另一个账户中的 OpenSearch Service 域恢复数据,必须为以下域设置跨账户访问权限:
- 您要从中恢复数据的源域(账户 A)
- 您的 OpenSearch Service 目标域(账户 B)
您还必须为您的域设置权限,以允许访问用于存储数据的 Amazon Simple Storage Service (Amazon S3) 存储桶。
**注意:**无需在目标(账户 B)中创建 Amazon S3 存储桶。OpenSearch Service 可使用单个 Amazon S3 存储桶恢复不同账户中的数据。
解决方法
**注意:**OpenSearch Service 将使用账户 A 中的源域来获取集群快照。
首先,在与 OpenSearch Service 目标域位于同一 AWS 区域的账户 A 中创建一个 Amazon S3 存储桶。然后,完成以下步骤以设置跨账户访问。您必须完成账户 A 和账户 B 的相关步骤。
在两个账户中设置对 S3 存储桶的访问权限
完成以下步骤:
-
创建一个 AWS Identity and Access Management (IAM) 角色,以向 OpenSearch Service 授予访问 S3 存储桶的权限。然后,选择 Amazon Elastic Compute Cloud (Amazon EC2) 作为您的服务。
-
创建以下 IAM 策略,以授予 S3 存储桶访问权限,然后将该策略附加到 IAM 角色:
{ "Version": "2012-10-17", "Statement": [{ "Action": [ "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::AccountA_S3_Bucket_Name" ] }, { "Action": [ "s3:GetObject", "s3:PutObject", "s3:DeleteObject", "iam:PassRole" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::AccountA_S3_Bucket_Name/*" ] }] }
**注意:**请将 arn:aws:s3:::AccountA_S3_Bucket_Name 替换为您的存储桶的 ARN。
-
使用以下语句更新账户 A 的存储桶策略,以向账户 B 中的 IAM 角色授予跨账户存储桶访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "Permission for AccountB role", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-B-id:role/AccountB-role" }, "Action": [ "s3:GetLifecycleConfiguration", "s3:ListBucket", "s3:GetObject", "s3:PutObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::AccountA-bucket", "arn:aws:s3:::AccountA-bucket/*" ] } ] }
-
更新角色的信任策略,以包括以下信任关系:
{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Service": "es.amazonaws.com" }, "Action": "sts:AssumeRole" }] }
**注意:**记下角色的 ARN,以便在后续步骤中使用。
-
要授予 OpenSearch Service 对您的 S3 存储桶的写入权限,请执行以下操作之一:
要将所有权限归到一个 IAM 角色下,请在现有 IAM 策略中包含 iam:PassRole 权限。
-或-
要拆分权限,请创建一个具有 iam:PassRole 权限的新 IAM 策略。
**注意:**必须将 IAM 策略附加到用于对 HTTP 请求进行签名的 IAM 角色。
以下示例策略包含所需的 IAM 权限:{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::Account:snapshot role" }, { "Effect": "Allow", "Action": "es:ESHttpPut", "Resource": "arn:aws:es:us-east-1:Account:domain/srestore/*" }] }
**注意:**请将 arn:aws:iam::Account:snapshot-role 替换为您的 IAM 角色。此外,请将 arn:aws:es:us-east-1:Account:domain/restore/* 替换为账户 A 或账户 B 中的 OpenSearch Service 域。
-
如果您为域启用了精细访问控制,则必须将 IAM 角色映射到 OpenSearch 控制面板。IAM 角色使用精细访问控制来提供对读取或写入 API 的访问权限。
-
(可选)如果您在账户 A 中使用 Python 客户端将存储桶注册到 OpenSearch Service,请在账户 A 中启动 EC2 实例,然后附加您的 IAM 角色。
**注意:**确保您的安全组可以访问 OpenSearch Service 域。
在两个账户中将 S3 存储桶注册为快照存储库
**重要事项:**对于账户 B,必须使用账户 B 的 IAM 用户身份验证凭证,并选择 OpenSearch Service 作为目标。
要注册存储桶,请使用 Postman 应用程序发出 HTTP PUT 请求。要安装该应用程序,请参阅 Postman 网站上的 Download Postman。
完成以下步骤:
- 对于 PUT,输入包含 OpenSearch Service 域端点和 S3 存储桶名称的 URL,例如 your-domain-endpoint.amazonaws.com/_snapshot/your-snapshot-repository-name。
- 选择 Authorization(授权)选项卡。
- 在 Postman 下,对于 Type(类型),选择 AWS Signature(AWS 签名)。对于 AccessKey 和 SecretKey,输入 IAM 用户的访问密钥。
- 对于 AWS Region(AWS 区域),输入您的区域。
- 对于 Service Name(服务名称),输入 es。
- 选择 Save(保存)。
- 选择 Headers(标题)选项卡。
- 对于 Key type(键类型),选择 Content-Type。
- 对于 Key value(键值),选择 Application/JSON(应用程序/JSON)。
- 选择 Save(保存)。
- 选择 Body(正文)选项卡。
- 将 S3 存储桶注册为快照存储库:
{ "type": "s3", "settings": { "bucket": "snapshot", "region": "us-east-1", "role_arn": "arn:aws:iam::Account:role/cross" } }
**注意:**请将 snapshot 替换为您的 S3 存储桶名称,将 us-east-1 替换为您的区域,将 arn:aws:iam::Account:role/cross 替换为账户 A 或账户 B 中的 IAM 角色。 要提交查询,请选择 Send(发送)。
注册完成后,您将收到 Status Code: 200 OK(状态代码:200 正常)消息。
验证您的快照存储库是否配置正确
在账户 A 中,完成以下步骤:
- 打开 OpenSearch 控制面板,然后查看存储桶上的可用数据。
- 运行以下命令以拍摄新快照:
**注意:**请将 my-snapshot-repo-name 替换为您的 S3 存储桶名称,将 snapshot name 替换为您的快照名称。PUT /_snapshot/my-snapshot-repo-name/snapshot_name
以下示例输出将验证 S3 存储桶是否已成功注册到账户 A 中的 OpenSearch Service 域:GET _cat/snapshots/my-snapshot-repo-name SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
在账户 B 中,完成以下步骤:
-
打开 OpenSearch 控制面板。
-
运行以下命令,以查看 S3 存储桶中来自账户 A 的可用快照:
GET _cat/snapshots/my-snapshot-repo-name
**注意:**请将 my-snapshot-repo-name 替换为您的快照存储库。
以下示例输出将确认您是否在账户 B 中设置了跨账户访问权限:today SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
-
要恢复数据,请运行以下命令:
POST /_snapshot/my-snapshot-repo-name/snapshotID/_restore
**注意:**请将 my-snapshot-repo-name 替换为您的快照存储库,将 snapshotID 替换为您的快照名称。
-
要恢复特定索引,请运行以下命令:
POST /_snapshot/my-snapshot-repo-name/snapshot ID/_restore { "indices": "index name1,index name2" }
**注意:**请将 my-snapshot-repo-name 替换为您的快照存储库,将 snapshotID 替换为您的快照名称。此外,请将 index name1 和 indexname2 替换为您的索引。
-
要验证恢复的索引,请运行以下命令:
GET _cat/indices?v
相关信息
如何将数据从一个 OpenSearch Service 域迁移到另一个域?
步骤 1.3: 附加一个存储桶策略,向账户 B 授予跨账户权限

相关内容
- AWS 官方已更新 7 个月前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前