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

3 分钟阅读
0

我想从另一个账户中的 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 存储桶的访问权限

完成以下步骤:

  1. 创建一个 AWS Identity and Access Management (IAM) 角色,以向 OpenSearch Service 授予访问 S3 存储桶的权限。然后,选择 Amazon Elastic Compute Cloud (Amazon EC2) 作为您的服务。

  2. 创建以下 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。

  3. 使用以下语句更新账户 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/*"
                ]
            }
        ]
    }
  4. 更新角色的信任策略,以包括以下信任关系:

    {     "Version": "2012-10-17",
         "Statement": [{
              "Effect": "Allow",
              "Principal": {
                   "Service": "es.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
         }]
    }

    **注意:**记下角色的 ARN,以便在后续步骤中使用。

  5. 要授予 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 域。

  6. 如果您为域启用了精细访问控制,则必须将 IAM 角色映射到 OpenSearch 控制面板。IAM 角色使用精细访问控制来提供对读取或写入 API 的访问权限。

  7. (可选)如果您在账户 A 中使用 Python 客户端将存储桶注册到 OpenSearch Service,请在账户 A 中启动 EC2 实例,然后附加您的 IAM 角色。

**注意:**确保您的安全组可以访问 OpenSearch Service 域。

在两个账户中将 S3 存储桶注册为快照存储库

**重要事项:**对于账户 B,必须使用账户 B 的 IAM 用户身份验证凭证,并选择 OpenSearch Service 作为目标。

要注册存储桶,请使用 Postman 应用程序发出 HTTP PUT 请求。要安装该应用程序,请参阅 Postman 网站上的 Download Postman

完成以下步骤:

  1. 对于 PUT,输入包含 OpenSearch Service 域端点和 S3 存储桶名称的 URL,例如 your-domain-endpoint.amazonaws.com/_snapshot/your-snapshot-repository-name
  2. 选择 Authorization(授权)选项卡。
  3. Postman 下,对于 Type(类型),选择 AWS Signature(AWS 签名)。对于 AccessKeySecretKey,输入 IAM 用户的访问密钥
  4. 对于 AWS Region(AWS 区域),输入您的区域。
  5. 对于 Service Name(服务名称),输入 es
  6. 选择 Save(保存)。
  7. 选择 Headers(标题)选项卡。
  8. 对于 Key type(键类型),选择 Content-Type
  9. 对于 Key value(键值),选择 Application/JSON(应用程序/JSON)。
  10. 选择 Save(保存)。
  11. 选择 Body(正文)选项卡。
  12. 将 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 中,完成以下步骤:

  1. 打开 OpenSearch 控制面板,然后查看存储桶上的可用数据。
  2. 运行以下命令以拍摄新快照:
    PUT /_snapshot/my-snapshot-repo-name/snapshot_name
    **注意:**请将 my-snapshot-repo-name 替换为您的 S3 存储桶名称,将 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 中,完成以下步骤:

  1. 打开 OpenSearch 控制面板。

  2. 运行以下命令,以查看 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
  3. 要恢复数据,请运行以下命令:

    POST /_snapshot/my-snapshot-repo-name/snapshotID/_restore

    **注意:**请将 my-snapshot-repo-name 替换为您的快照存储库,将 snapshotID 替换为您的快照名称。

  4. 要恢复特定索引,请运行以下命令:

    POST /_snapshot/my-snapshot-repo-name/snapshot ID/_restore
    {
       "indices": "index name1,index name2"
    }

    **注意:**请将 my-snapshot-repo-name 替换为您的快照存储库,将 snapshotID 替换为您的快照名称。此外,请将 index name1indexname2 替换为您的索引。

  5. 要验证恢复的索引,请运行以下命令:

    GET _cat/indices?v

相关信息

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

步骤 1.3: 附加一个存储桶策略,向账户 B 授予跨账户权限

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

IAM 角色管理

AWS 官方
AWS 官方已更新 3 个月前