Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
別の 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 バケットへのアクセスを設定する
次の手順を実行します。
-
OpenSearch Service が S3 バケットにアクセスできるようにする AWS Identity and Access Management (IAM) ロールを作成します。次に、使用するサービスに Amazon Elastic Compute Cloud (Amazon EC2) を選択します。
-
次の、S3 バケットへのアクセス許可を付与する IAM ポリシーを作成し、そのポリシーを 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 バケットへの書き込み許可を付与するには、次のいずれかの手順を実行します。
すべてのアクセス許可を 1 つの 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 Dashboards にマッピングする必要があります。IAM ロールは、詳細アクセス制御を使用して読み取りまたは書き込み API にアクセス許可を付与します。
-
(オプション) アカウント A で Python クライアントを使用してバケットを OpenSearch Service に登録した場合は、アカウント A で EC2 インスタンスを起動し、IAM ロールをアタッチします。
注: セキュリティグループが OpenSearch Service ドメインにアクセスできることを確認してください。
両方のアカウントで、S3 バケットをスナップショットのリポジトリとして登録する
重要: アカウント B では、アカウント B の IAM ユーザー認証情報を使用し、宛先には OpenSearch Service を選択する必要があります。
バケットを登録するには、Postman アプリケーションを使用して HTTP PUT リクエストを行います。アプリケーションをインストールするには、Postman のウェブサイトで「Postman のダウンロード」を参照してください。
次の手順を実行します。
- PUT では、OpenSearch Service ドメインのエンドポイントと S3 バケット名を含む URL を入力します (例: your-domain-endpoint.amazonaws.com/_snapshot/your-snapshot-repository-name)。
- [認証] タブを選択します。
- [Postman] の [タイプ] で [AWS 署名] を選択します。AccessKey と SecretKey には、IAM ユーザーのアクセスキーを入力します。
- [AWS リージョン] にリージョンを入力します。
- [サービス名] に es と入力します。
- [保存] を選択します。
- [ヘッダー] タブを選択します。
- [キータイプ] で [Content-Type] を選択します。
- [キー値] で [Application/JSON] を選択します。
- [保存] を選択します。
- [本文] タブを選択します。
- 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 ロールに置き換えます。 [送信] をクリックし、クエリを送信します。
登録が完了すると、Status Code: 200 OK というメッセージが表示されます。
スナップショットのリポジトリが正しく設定されていることを確認する
アカウント A で次の手順を実行します。
- OpenSearch ダッシュボードを開き、バケット上の使用可能なデータを確認します。
- 次のコマンドを実行して新しいスナップショットを取得します。
注: 実際のものでそれぞれ、my-snapshot-repo-name を S3 バケット名に、snapshot name をスナップショット名に置き換えます。PUT /_snapshot/my-snapshot-repo-name/snapshot_name
次の出力例では、アカウント A の OpenSearch Service ドメインへの S3 バケットの登録が完了していることが検証されています。GET _cat/snapshots/my-snapshot-repo-name SUCCESS 1585190280 02:38:00 1585190284 02:38:04 3.9s 4 4 0 4
アカウント B で次の手順を実行します。
-
OpenSearch Dashboards を開きます。
-
次のコマンドを実行すると、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 をスナップショット名に置き換えます。さらに、indexname1 と indexname2 を実際のインデックスに置き換えます。
-
復元されたインデックスを確認するには、次のコマンドを実行します。
GET _cat/indices?v
関連情報
データを別の OpenSearch Service ドメインに移行する方法を教えてください
ステップ 1.3: バケットポリシーをアタッチしてアカウント B にクロスアカウントアクセス許可を付与する

関連するコンテンツ
- 質問済み 1年前lg...