OpenSearch Service クラスターのきめ細かなアクセスコントロールの問題をトラブルシューティング方法を教えてください。
Amazon OpenSearch Service クラスターでアクセスコントロールエラーまたはきめ細かなアクセスコントロールの問題が発生しています。
解決策
前提条件
- OpenSearch Service で他の AWS サービスを使用するには、サービスの AWS Identity and Access Management (IAM) ロールに必要なアクセス許可を必ず付与してください。
- 特定のインデックスまたはダッシュボードへのきめ細かなアクセスコントロールを提供するには、テナントの Kibana インデックスに対する次のアクセス許可を持つロールにユーザーをマッピングします。
注: tenant_name を自分のテナント名に置き換えてください。OpenSearch は hash の値を自動的に生成します。.kibana_hash_tenant_name - フィールドレベルできめ細かなアクセスコントロールを行うには、必要なフィールドレベルのセキュリティを備えた OpenSearch セキュリティロールを設定します。手順については、OpenSearch のウェブサイトの「Defining roles」(ロールの定義) を参照してください。次に、ユーザーをロールにマッピングするには、OpenSearch のウェブサイトの「Mapping users to roles」(ユーザーとロールのマッピング) を参照してください。詳細については、OpenSearch のウェブサイトの「Field-level security」(フィールドレベルのセキュリティ) を参照してください。
- ドキュメントレベルできめ細かなアクセスコントロールを行うには、必要なドキュメントレベルのセキュリティを備えた OpenSearch セキュリティロールを作成します。次に、ユーザーをロールにマッピングするには、OpenSearch のウェブサイトの「Mapping users to roles」(ユーザーとロールのマッピング) を参照してください。詳細については、OpenSearch のウェブサイトの「Document-level security」(ドキュメントレベルのセキュリティ) を参照してください。
きめ細かなアクセスコントロールを使用してエラーが発生した場合は、受け取ったエラーに基づいて次のトラブルシューティングアクションを実行してください。
注: OpenSearch Service では匿名アクセスを使用できません。
"security_exception","reason":"no permissions for [action]" 403 エラー
このエラーを解決するには、OpenSearch Service クラスターのユーザーまたはバックエンドロールに必要なアクセス許可があるかどうかを確認してください。必要なアクセス許可については、OpenSearch のウェブサイトの「Permissions」(アクセス許可) を参照してください。次に、ユーザーまたはバックエンドロールを OpenSearch セキュリティーロールにマッピングしたことを確認します。手順については、OpenSearch のウェブサイトの「Mapping users to roles」(ユーザーとロールのマッピング) を参照してください。
"security_exception","reason":"no permissions for []" エラー
復元リクエストからシステムインデックスを除外する必要があります。そうしないと、必要なアクセス許可を持っていても、スナップショットを復元するときにこのエラーが発生する可能性があります。
この問題を解決するには、次のコマンドを実行して復元リクエストからシステムインデックスを除外します。
curl -XPOST 'domain-endpoint/_snapshot/snapshot-repository/snapshot-name/_restore' \ -d '{"indices": "-.kibana*,-.opendistro*"}' \ -H 'Content-Type: application/json'
注: domain-endpoint を実際のドメインエンドポイントに、snapshot-repository をスナップショットリポジトリに、snapshot-name をスナップショット名に置き換えてください。
"Missing role" エラー
OpenSearch Dashboards にログインするには、ユーザーまたはバックエンドロールを少なくとも 1 つの OpenSearch セキュリティーロールにマッピングする必要があります。そうしないと、OpenSearch Dashboards にログインしたときに次のエラーメッセージが表示されることがあります。
"Missing role.No roles available for this user, please contact your system administrator."
この問題を解決するには、OpenSearch のウェブサイトの「Mapping users to roles」(ユーザーとロールのマッピング) を参照してください。
"User: anonymous is not authorized to perform: iam:PassRole" エラー
manage_snapshots ロールを、手動スナップショットの登録に使用した IAM ロールにマッピングする必要があります。そうしないと、手動スナップショットリポジトリを登録するときにこのエラーが表示されることがあります。
この問題を解決するには、次の手順を実行します。
- OpenSearch ダッシュボードに管理者ユーザーとしてログインします。
- ナビゲーションペインで、[セキュリティ] をクリックします。
- [ロール] をクリックします。
- manage_snapshots を選択します。
- [マッピングされたユーザー] をクリックし、[マッピングを管理] を選択します。
- [バックエンドロール] には、IAM ロールの Amazon リソースネーム (ARN) を入力します。
- Enter キーを押します。
- [マッピング] をクリックします。
"User: anonymous is not authorized to perform: es:ESHttp HTTP_Method" エラー
申請者はドメインアクセスポリシーの要件に従う必要があります。従わないと、"not authorized to perform" というエラーメッセージが表示されます。
このエラーを解決するには、送信するリクエストの種類を許可するようにドメインアクセスポリシーを更新します。署名されていないリクエストを許可するには、[Principal] を "AWS": "*" に設定します。
次に、ポリシーの要件に基づいて次のアクションを実行します。
ポリシーに IAM プリンシパルが含まれている
ドメインアクセスポリシーに IAM プリンシパルが含まれている場合、IAM プリンシパルは AWS 署名バージョン 4 でリクエストに署名する必要があります。このシナリオでは、OpenSearch Service は基本認証や匿名アクセスなどの署名のないリクエストを拒否します。
以下のコマンド例は、IAM ロールが署名するリクエストを示しています。
curl -X GET "opensearch_endpoint" \ --user "AWS_ACCESS_KEY_ID":"AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token: AWS_SESSION_TOKEN" \ --aws-sigv4 "aws:amz:region:es"
注: opensearch_endpoint を実際のエンドポイントに、AWS_ACCESS_KEY_ID をアクセスキーに、AWS_SECRET_ACCESS_KEY をシークレットアクセスキーに、AWS_SESSION_TOKEN をセッショントークンに、region を AWS リージョンに置き換えてください。IAM ユーザーからのリクエストの場合は、-H "x-amz-security-token: AWS_SESSION_TOKEN" \ を削除します。
ポリシーが、特定の IP アドレスからのリクエストのみを許可する
ポリシーに IP アドレス条件があり、"Principal": { "AWS": "*" } オープンプリンシパルを使用している場合は、署名されていないリクエストを使用して OpenSearch Service にアクセスできます。ただし、リクエストは許可された IP アドレスから送信する必要があります。
注: ポリシーに IAM プリンシパルが含まれ、特定の IP アドレスのみが許可される場合は、IAM プリンシパルがリクエストに署名する必要があります。また、リクエストは許可された IP アドレスから送信される必要があります。
ポリシーが特定の HTTP アクションをブロックする
ドメインアクセスポリシーが、リクエストした HTTP メソッドを許可していることを確認してください。例えば、POST リクエストを送信する場合は、ポリシーに es:ESHttpPost アクションを必ず含めてください。
"Couldn't find any Elasticsearch data" エラー
OpenSearch Service バージョン 7.9 にアップグレードした後に、きめ細かなアクセスコントロールを備えたクラスターでインデックスパターンを作成すると、このエラーが表示されることがあります。ユーザーに割り当てられたロールに、関連するインデックスとエイリアスに対する indices:admin/resolve/index アクセス許可があることを確認してください。詳細については、OpenSearch のウェブサイトで「Resolve Index API」(インデックス API を解決する) を参照してください。
"401 unauthorized" エラー
きめ細かなアクセスコントロールでクラスターにアクセスするには、-u フラグを使用して認証する必要があります。例えば、次のコマンドを実行すると、"401 unauthorized" エラーメッセージが表示され、失敗します。
curl Domain_Endpoint
クラスターにアクセスするには、次のコマンドを実行し、-u フラグを使用してユーザー名とパスワードを含めます。
curl -u 'username:password' Domain_Endpoint
注: username を実際のユーザー名に、password をパスワードに、Domain_Endpoint をドメインエンドポイントに置き換えてください。
curl コマンドを実行するときは、有効な文字を使用する必要があります。curl コマンドで -u フラグを使用する際、プライマリ認証情報に $ または ! を含めると、"401 unauthorized" エラーが表示されることがあります。また、認証情報は必ず一重引用符で囲んでください。
コマンド例:
curl -u 'username' Domain_Endpoint
注: username を実際のユーザー名に、Domain_Endpoint をドメインエンドポイントに置き換えてください。
"Authentication finally failed" エラー
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
ドメインのユーザータイプと一致するリクエストを送信する必要があります。基本 (ユーザー名/パスワード) 認証リクエストを送信したが、ドメインのマスターユーザータイプを IAM プリンシパルとして設定した場合、このエラーが表示されます。マスターユーザーの場合、クライアントは AWS 署名バージョン 4 で署名されたリクエストをドメインに送信する必要があります。
HTTP 基本認証を使用するには、次の AWS CLI コマンド update-domain-config を実行して、マスターユーザータイプを内部ユーザーデータベースに変更します。
aws opensearch update-domain-config --domain-name domain-name --advanced-security-options InternalUserDatabaseEnabled=true
注: domain-name を実際のドメイン名に置き換えてください。
関連情報
OpenSearch のウェブサイトの「Index Management」(インデックス管理)
