本記事では、OpenSearch Security プラグインの設定ファイル opensearch.yml に記載されている全項目について、役割や利用方法、ローカル開発環境での注意点を解説します。これにより、開発環境での動作確認やセキュリティ検証を円滑に進めるための知識を提供いたします。
1. 共通設定項目
1.1. plugins.security.nodes_dn
- 概要
クラスタ内の各ノードが使用する証明書の Distinguished Name(DN)の一覧を指定します。ワイルドカードや正規表現を使用可能です。 - 用途
証明書に含まれる DN に基づいて、セキュアなノード間通信を実現します。 - ローカル環境での留意点
単一ノードの場合はあまり重要ではありませんが、複数ノードのシミュレーション時には正確な DN 設定が求められます。
1.2. plugins.security.nodes_dn_dynamic_config_enabled
- 概要
ノード DN の動的管理を可能にする設定です。 - 用途
true
に設定すると、super-admin 権限で/opendistro/_security/api/nodesdn
API を利用して、DN リストの取得・更新が可能になります。 - ローカル環境での留意点
頻繁な更新が不要な場合は、デフォルトのfalse
で十分です。
1.3. plugins.security.authcz.admin_dn
- 概要
管理者権限を付与する証明書の DN を指定します。 - 用途
設定された DN を持つクライアントは、セキュリティ管理機能へのアクセスが許可されます。 - ローカル環境での留意点
自身の開発用証明書の DN を設定し、管理機能のテストに活用してください。
1.4. plugins.security.roles_mapping_resolution
- 概要
バックエンドロールと OpenSearch Security 内のロールのマッピング方法を定義します。 - オプション
- MAPPING_ONLY:
roles_mapping.yml
に記述されたマッピングのみを使用(デフォルト)。 - BACKENDROLES_ONLY: バックエンドのロールが直接セキュリティロールにマッピングされる。
- BOTH: 両方の方式を併用。
- MAPPING_ONLY:
- ローカル環境での留意点
基本的にはデフォルト設定で問題ありませんが、用途に応じて変更可能です。
2. REST 管理 API 設定
2.1. plugins.security.restapi.roles_enabled
- 概要
REST 管理 API へのアクセスをロールベースで制御します。 - 用途
指定したロールのみが API にアクセス可能となるため、管理者や特定のテストユーザに限定することができます。 - 設定例(コメントアウト状態)
#plugins.security.restapi.roles_enabled: ["all_access","xyz_role"]
- ローカル環境での留意点
テスト時に必要なアクセス権限を明示的に設定する場合は、コメントアウトを解除して利用してください。
2.2. plugins.security.restapi.endpoints_disabled
- 概要
特定のエンドポイントや HTTP メソッドを、特定ロールに対して無効化する設定です。 - 用途
例えば、全アクセス権を持つユーザからでも、特定の操作(PUT、POST、DELETE など)を制限可能です。 - 設定例(コメントアウト状態)
#plugins.security.restapi.endpoints_disabled.all_access.ACTIONGROUPS: ["PUT","POST","DELETE"] #plugins.security.restapi.endpoints_disabled.xyz_role.LICENSE: ["DELETE"]
- ローカル環境での留意点
不要な API 操作を制限することで、セキュリティリスクを低減させる目的で利用してください。 - 参考
利用可能なエンドポイント例: ACTIONGROUPS, CACHE, CONFIG, ROLES, ROLESMAPPING, INTERNALUSERS, SYSTEMINFO, PERMISSIONSINFO
3. 監査ログ(Auditlog)設定
3.1. 基本監査ログ設定
- 設定項目例
plugins.security.audit.enable_rest
: REST リクエストの監査ログを有効化(デフォルト:true)plugins.security.audit.enable_transport
: トランスポート層の監査ログ(デフォルト:false)plugins.security.audit.resolve_bulk_requests
: バルクリクエスト内の各サブリクエストもログ出力するかどうか(デフォルト:false)
- 用途
システムの操作履歴を記録し、不正アクセスや問題発生時の追跡に役立ちます。 - ローカル環境での留意点
デバッグや検証の目的に合わせ、適宜有効化・無効化を調整してください。
3.2. ログの除外設定
- 設定項目例
plugins.security.audit.config.disabled_categories
: 特定の監査ログカテゴリを無効化(例:[“AUTHENTICATED”,”GRANTED_PRIVILEGES”])plugins.security.audit.ignore_requests
: 一部リクエストを監査ログから除外(例:[“indices:data/read/“,”_bulk”])plugins.security.audit.ignore_users
: 特定ユーザのログ記録を除外(例:[‘kibanaserver’,’some*user’,’/also.*regex possible/’])
- 用途
ログのノイズを削減し、重要な情報にフォーカスするために利用します。
3.3. 監査ログの出力先設定
- 設定項目
plugins.security.audit.type
: 監査ログの出力先を指定。- internal_opensearch: 内部クラスタへの送信(推奨)
- external_opensearch: 外部クラスタへの送信
- debug: デバッグモードでの出力
- webhook: Webhook 経由で外部システムに送信
- ローカル環境での留意点
単純な検証の場合は、内部クラスタ(internal_opensearch)の利用が手軽です。
3.4. 外部送信および Webhook の詳細設定
- 設定項目例(全てコメントアウト状態)
- 外部 OpenSearch 用
#plugins.security.audit.config.http_endpoints: ['localhost:9200','localhost:9201','localhost:9202'] #plugins.security.audit.config.index: auditlog6 #plugins.security.audit.config.index: "'auditlog6-'YYYY.MM.dd" #plugins.security.audit.config.type: auditlog #plugins.security.audit.config.username: auditloguser #plugins.security.audit.config.password: auditlogpassword #plugins.security.audit.config.enable_ssl: false #plugins.security.audit.config.verify_hostnames: false #plugins.security.audit.config.enable_ssl_client_auth: false #plugins.security.audit.config.cert_alias: mycert #plugins.security.audit.config.pemkey_filepath: key.pem #plugins.security.audit.config.pemkey_content: <...pem base 64 content> #plugins.security.audit.config.pemkey_password: secret #plugins.security.audit.config.pemcert_filepath: cert.pem #plugins.security.audit.config.pemcert_content: <...pem base 64 content> #plugins.security.audit.config.pemtrustedcas_filepath: ca.pem #plugins.security.audit.config.pemtrustedcas_content: <...pem base 64 content>
- Webhook 用
#plugins.security.audit.config.webhook.url: "http://mywebhook/endpoint" #plugins.security.audit.config.webhook.format: JSON #plugins.security.audit.config.webhook.ssl.verify: false #plugins.security.audit.config.webhook.ssl.pemtrustedcas_filepath: ca.pem #plugins.security.audit.config.webhook.ssl.pemtrustedcas_content: <...pem base 64 content>
- 外部 OpenSearch 用
- 用途
外部システムとの連携や、監査ログのリアルタイム監視に用います。
3.5. log4j を利用した監査ログ設定
- 設定項目例
#plugins.security.audit.config.log4j.logger_name: auditlogger #plugins.security.audit.config.log4j.level: INFO
- 用途
ログ出力の詳細設定(出力先ロガー名やレベル)を定義し、運用環境に合わせたログ管理を実現します。
4. Kerberos 設定
4.1. plugins.security.kerberos.krb5_filepath
- 概要
Kerberos 認証を利用する場合の krb5.conf ファイルのパスを指定します。 - ローカル環境での留意点
Kerberos 認証が不要な環境では、コメントアウトのままで問題ありません。
4.2. plugins.security.kerberos.acceptor_keytab_filepath
- 概要
サーバ側の認証情報(keytab ファイル)のパスを指定します。
4.3. plugins.security.kerberos.acceptor_principal
- 概要
keytab に格納された認証情報に対応するプリンシパル名を指定します。 - ローカル環境での留意点
Kerberos 認証を導入する場合にのみ必要となります。
5. 高度な設定項目
5.1. Impersonation(なりすまし)設定
- plugins.security.authcz.impersonation_dn
特定の DN に対して、他ユーザへのなりすまし(インパーソネーション)を許可します。- 設定例(コメントアウト状態)
# "CN=spock,OU=client,O=client,L=Test,C=DE": # - worf # "cn=webuser,ou=IT,ou=IT,dc=company,dc=com": # - user2 # - user1
- 設定例(コメントアウト状態)
- plugins.security.authcz.rest_impersonation_user
REST リクエストにおけるユーザなりすまし設定です。- 設定例(コメントアウト状態)
# "picard": # - worf # "john": # - steve # - martin
- 設定例(コメントアウト状態)
5.2. セキュリティインデックスの自動初期化
- plugins.security.allow_default_init_securityindex
セキュリティインデックスが存在しない場合に、設定ファイル内の初期設定をもとに自動で初期化するかどうかを決定します。 - ローカル環境での留意点
初回起動時の検証に有用ですが、本番環境ではデフォルトパスワードのリスクがあるため注意が必要です。
5.3. デモ用証明書の許可
- plugins.security.allow_unsafe_democertificates
デモ用の既知の証明書を許可する設定です。 - ローカル環境での留意点
開発・テスト環境に限定し、本番環境では必ず無効化してください。
5.4. パスワード強度ルール
- plugins.security.restapi.password_validation_regex
パスワードの複雑性を正規表現で定義し、最低条件を満たすかチェックします。 - plugins.security.restapi.password_validation_error_message
条件を満たさない場合に表示するエラーメッセージを定義します。- 設定例
plugins.security.restapi.password_validation_regex: '(?=.*[A-Z])(?=.*[^a-zA-Z\d])(?=.*[0-9])(?=.*[a-z]).{8,}' plugins.security.restapi.password_validation_error_message: "A password must be at least 8 characters long and contain at least one uppercase letter, one lowercase letter, one digit, and one special character."
- 設定例
6. Expert(専門家向け)設定
6.1. 設定インデックス名
- plugins.security.config_index_name
OpenSearch Security の設定情報を保存するインデックス名を定義します。 - 用途
複数環境間での識別や、設定管理のカスタマイズが必要な場合に利用します。
6.2. サーバ証明書の OID
- plugins.security.cert.oid
ノード証明書の Object Identifier(OID)を定義します。 - 用途
高度な証明書検証を行う際に必要となる場合があります。
6.3. インタークラスタリクエスト評価クラス
- plugins.security.cert.intercluster_request_evaluator_class
ノード間のリクエスト評価に用いるクラスを指定します。 - 用途
基本的にはデフォルトの評価クラスが利用され、変更は不要です。
6.4. スナップショットリストア権限設定
- plugins.security.enable_snapshot_restore_privilege
通常ユーザによるスナップショットのリストアを制限するための権限設定です。 - plugins.security.check_snapshot_restore_write_privileges
リストア時の追加権限チェックを有効にするかどうかを決定します。 - ローカル環境での留意点
スナップショット機能の検証時にのみ設定を変更してください。
6.5. キャッシュ設定
- plugins.security.cache.ttl_minutes
認証キャッシュの有効期間(分単位)を設定します。 - ローカル環境での留意点
デフォルトの 60 分で十分なケースが多いですが、テスト目的で短縮・延長することも可能です。
6.6. セキュリティ機能の無効化
- plugins.security.disabled
OpenSearch Security 機能全体を無効化する設定です。 - 用途
一時的なデバッグやテスト用に利用可能ですが、本番環境では絶対に無効化してはいけません。
6.7. Protected Indices 設定
- plugins.security.protected_indices.enabled
特別なアクセス権が必要な保護インデックスの有効化を指定します。 - plugins.security.protected_indices.roles
保護インデックスに対してアクセス可能なロールを指定します(例:[‘all_access’])。 - plugins.security.protected_indices.indices
実際に保護対象とするインデックス名の一覧を設定します。 - 用途
重要なインデックスへのアクセス制御を強化するために使用します。
6.8. System Indices 設定
- plugins.security.system_indices.enabled
システム専用のインデックス管理を有効化します。 - plugins.security.system_indices.indices
システムインデックスとして扱うべきインデックス名をリスト化します。- 設定例
plugins.security.system_indices.indices: ['.opendistro-alerting-config', '.opendistro-ism-*', '.opendistro-reports-*', '.opensearch-notifications-*', '.opensearch-notebooks', '.opensearch-observability', '.opendistro-asynchronous-search-response*', '.replication-metadata-store']
- 設定例
7. ローカル開発環境での全体的な留意点
- 単一ノード環境の場合
多くのセキュリティ強化設定は実際の運用時の対策となるため、単一ノードでの検証では最低限の設定でも動作確認が可能です。 - 設定変更時の再起動
各設定の変更は OpenSearch ノードの再起動が必要です。変更毎に確実に再起動し、動作を確認してください。 - コメントアウトされた項目について
多くの設定例はコメントアウトされています。用途に合わせ、必要な部分のみコメントを解除して使用してください。