Key

Keyは、APIキーや暗号化キーなどの機密キーを管理することでDrupalのセキュリティを向上させ、サイト管理者がキーの保存方法と保存場所を制御できるようにします。

key
61,439 sites
104
drupal.org

インストール

Drupal 12, 9, 8 v8.x-1.20
composer require 'drupal/key:8.x-1.20'
Drupal 11 v8.x-1.17
composer require 'drupal/key:8.x-1.17'

概要

Keyモジュールは、Drupalサイト全体で使用される機密キーの一元管理システムを提供します。キーの保存とキーの使用を分離し、管理者がキーの保存方法と保存場所を定義できるようにする一方で、他のモジュールは保存の詳細を知らなくてもキーを取得して使用できます。

Keyは、3種類のプラグインタイプを持つ柔軟なプラグインアーキテクチャを使用しています:Key Types(キーの目的を定義)、Key Providers(キーの保存場所を定義)、Key Inputs(キー値の入力方法を定義)。このアーキテクチャにより、高い設定可能性と拡張性が実現されています。

このモジュールは、Drupal設定、Webルート外のファイル、環境変数、またはDrupalのstateシステムなど、さまざまな場所にキーを保存することをサポートしています。この柔軟性により、サイトは機密データの取り扱いに関する規制やコンプライアンス要件を満たすことができます。

さらに、Keyは設定オーバーライド機能を提供しており、実行時にキー値を任意のDrupal設定項目に注入し、エクスポートされた設定ファイルから機密値を除外することができます。

Features

  • サイト全体のキーを作成、編集、削除するための管理インターフェースによる一元的なキー管理
  • 拡張可能なKey Types(Authentication、Encryption、User/Password)、Key Providers(Configuration、File、Environment、State)、Key Inputs(Text Field、Textarea、Generate)を備えたプラグインベースのアーキテクチャ
  • Webルート外のファイルベースストレージ、環境変数、Drupalのstateシステムなど、キーをデータベースから除外するための安全なストレージオプション
  • 実行時にキー値を任意のDrupal設定項目に動的に注入できる設定オーバーライドシステム
  • JSON形式のユーザー名/パスワードペアなどの複雑なデータを保存するマルチバリューキーのサポート
  • 暗号化キーとバイナリキー値のためのBase64エンコーディングサポート
  • 他のモジュールのフォームにキー選択を簡単に追加できるkey_selectフォーム要素
  • プログラムによるキー管理のためのkey.repositoryサービスを通じた包括的なAPI
  • コマンドラインでのキー管理操作のためのDrushコマンド
  • 設定可能なキーサイズによる暗号化キーの自動キー値生成

Use Cases

外部サービスのAPI認証情報のセキュア化

FileまたはEnvironment Key Providerを使用して、PayPal、MailChimp、Authorize.net、AWSなどのサービスのAPIキーを保存します。「Authentication」タイプでキーを作成し、適切なプロバイダーを選択して、ファイルパスまたは環境変数名を設定します。他のモジュールは、key_selectフォーム要素を使用して、管理者が設定フォームでキーを選択できるようにできます。

データ保護のための暗号化キー管理

Encryptモジュールで使用する暗号化キーを作成します。「Encryption」Key Typeを選択し、必要なキーサイズ(128または256ビット)を指定します。セキュリティのためにWebルート外のFileプロバイダーを使用します。必要に応じてBase64エンコーディングを有効にします。Generate Key Inputは、暗号論的に安全なランダムキーを自動的に作成できます。

外部接続用のデータベース認証情報の保存

「User/password」Key Typeを使用して、外部データベース接続の認証情報を保存します。キー値は「username」と「password」フィールドを持つJSONとして保存されます。getKeyValues()を使用して認証情報を配列として取得します。

機密設定値のオーバーライド

Key設定オーバーライドを使用して、実行時にキー値を任意のDrupal設定に注入します。これにより、SMTPパスワードなどの機密値をエクスポートされた設定ファイルから除外できます。キーを特定の設定項目(例:system.mail:password)にマッピングするオーバーライドを作成し、「Clear overridden value」を有効にして保存された設定から機密データを削除します。

環境固有のキー管理

Environment Key Providerを使用して、ホスティング環境で設定された環境変数からキーを取得します。これは、シークレットが環境変数を介して注入されるコンテナ化されたデプロイメントや、コードとは別にシークレットを管理するCI/CDパイプラインに最適です。

カスタムモジュールへのキー選択の追加

key_selectフォーム要素を使用して、モジュールのフォームにキー選択機能を追加します。この要素は利用可能なキーを自動的にリストし、#key_filtersプロパティを使用してタイプ、プロバイダー、またはタイプグループでフィルタリングできます。例:'#type' => 'key_select', '#title' => 'API Key', '#key_filters' => ['type' => 'authentication']。

Tips

  • 本番サイトでConfiguration Key Providerを使用しないでください。キー値がデータベースと設定エクスポートに保存されます
  • 暗号化キーファイルはWebルート外に保存し、適切なファイルパーミッション(Webサーバーユーザーのみ読み取り可能)を確保してください
  • コンテナ化されたデプロイメントやオーケストレーションプラットフォームで管理されるシークレットには環境変数を使用してください
  • key_selectフォーム要素は、利用可能なキーがない場合に新しいキーを作成するリンクを自動的に追加します
  • Key設定オーバーライドを使用して、SMTPパスワード、APIシークレット、その他の機密値を設定エクスポートから除外してください
  • マルチバリューKey Typeを使用する場合、getKeyValues()で配列を取得するか、getKeyValue()で生のJSONを取得します
  • Drushコマンドはデプロイメントパイプラインでのキー管理のスクリプト化に便利です
  • 制限されたパーミッションを持つキーファイル専用ディレクトリの作成を検討してください(例:/etc/drupal-keys/)

Technical Details

Admin Pages 6
Keys /admin/config/system/keys

サイト全体のキーを管理するためのメイン管理インターフェース。定義されたすべてのキーの名前、タイプ、プロバイダー、および各キーを使用する設定オーバーライドを表示します。このページから、管理者は新しいキーの追加、既存のキーの編集または削除、設定オーバーライドの作成ができます。

キーの追加 /admin/config/system/keys/add

新しいキーを作成するためのフォーム。管理者がキー名、説明、タイプ、プロバイダー、値の設定を定義できます。フォームは選択されたKey TypeとProviderに基づいて動的に更新されます。

キーの編集 /admin/config/system/keys/manage/{key}

既存のキーを編集するためのフォーム。変更を許可する前にキー編集のリスクについて警告を表示します。編集フォームを表示する前に確認が必要です。

キーの削除 /admin/config/system/keys/manage/{key}/delete

キーを削除するための確認フォーム。キー削除の潜在的な影響について警告します。

Key設定オーバーライド /admin/config/development/configuration/key-overrides

Key設定オーバーライドを管理するための管理インターフェース。これらのオーバーライドにより、実行時にキー値をDrupal設定項目に動的に注入し、設定エクスポートから機密値を除外できます。

Key設定オーバーライドの追加 /admin/config/development/configuration/key-overrides/add

Drupal設定項目にキー値を注入する新しい設定オーバーライドを作成するためのフォーム。

権限 2
キーの管理

サイト全体のキーを作成、編集、削除します。この権限はキー管理への完全なアクセスを付与するため、信頼できる管理者のみに制限する必要があります。

Key設定オーバーライドの管理

Drupal設定にキー値を注入するKey設定オーバーライドを作成および削除します。

Hooks 1
hook_key_provider_info_alter

モジュールがKey Providerプラグインの定義を変更できるようにし、プロバイダーの動作のカスタマイズやプロバイダー実装の差し替えを可能にします。

Drush Commands 6
drush key:save

指定されたIDとオプションの設定でキーを保存(作成または更新)します。

drush key:delete

IDでキーを削除します。削除前に確認を求めます。

drush key:list

利用可能なすべてのキーとそのタイプおよびプロバイダーを一覧表示します。

drush key:type-list

利用可能なKey Typeプラグインを一覧表示します。

drush key:provider-list

利用可能なKey Providerプラグインを一覧表示します。

drush key:value-get

キーの値を取得して表示します。キー値が公開されるため、注意して使用してください。

Troubleshooting 5
取得時にキー値が空またはNULL

Key Provider設定が正しいことを確認してください。Fileプロバイダーの場合、ファイルが存在し、Webサーバーから読み取り可能であることを確認します。Environmentプロバイダーの場合、PHPが実行されるコンテキストで環境変数が設定されていることを確認します。Stateプロバイダーの場合、drush state:getを使用してstate変数が存在することを確認します。

設定オーバーライドが機能しない

Key設定オーバーライドが正しい設定タイプ、名前、項目で正しく設定されていることを確認してください。オーバーライド作成後はDrupalキャッシュをクリアしてください。キー自体に有効な値があることを確認してください。オーバーライドは設定エクスポートや設定同期インターフェースには表示されません。

キーを編集または削除できない

キーの編集は潜在的な影響のため警告を表示し、確認が必要です。キーが他のモジュールで使用されている場合、変更前に影響を考慮してください。Keyモジュールは使用中のキーの削除を防止しません。まず依存するモジュールと調整してください。

File Key Providerの検証が失敗する

キーが保存される時点でファイルが存在し、読み取り可能である必要があります。ファイルパスが正しいことを確認してください(絶対パス、Drupalルートからの相対パス、または有効なストリームラッパー)。Webサーバーユーザーがファイルを読み取れるファイルパーミッションを確認してください。

生成された暗号化キーが表示されない

セキュリティのため、生成されたキー値はキー作成時に「Display value」がチェックされている場合にのみ一度表示されます。見逃した場合は、キーを削除して新しいものを作成するか、drush key:value-getに--base64オプションを付けて取得する必要があります。

Security Notes 7
  • Configurationプロバイダーで保存されたキー値は、データベース、設定エクスポート、管理UIで表示されます。開発のみに使用してください
  • FileおよびEnvironmentプロバイダーはキー値をデータベースから除外し、セキュリティを向上させます
  • Key設定オーバーライドは設定エクスポートから機密値を削除しますが、オーバーライドマッピング自体はエクスポートされます
  • 「administer keys」権限を持つユーザーは、Configurationに保存されたキー値を表示し、サイトセキュリティに影響を与える可能性のあるキーを作成できます
  • 暗号化キーは、人間が選んだ値ではなく、安全なランダム生成(Generateインプットで提供)を使用する必要があります
  • Fileプロバイダーを使用する場合はファイルシステムのセキュリティを考慮してください。キーファイルがWebサーバーの設定ミスでアクセス可能にならないようにしてください
  • 環境変数はプロセスリストでログに記録されたり公開されたりする可能性があります。ホスティング環境のセキュリティモデルを理解してください