現在表示中:

ここでは、デプロイの際に AEM インストールのセキュリティを確保するために必要となる様々な手順について説明します。このチェックリストは、上から順に適用するように設計されています。

注意:

開発段階に適用されるその他のセキュリティに関する考慮事項も参照してください。

主なセキュリティ対策

実稼動準備モードでの AEM の実行

詳しくは、実稼動準備モードでの AEM の実行を参照してください。

トランスポート層のセキュリティのための HTTPS の有効化

インスタンスの安全を確保するには、オーサーインスタンスとパブリッシュインスタンスの両方の HTTPS トランスポート層を有効にする必要があります。

注意:

詳しくは、HTTP over SSL の有効化を参照してください。

セキュリティホットフィックスのインストール

アドビが提供する最新のセキュリティホットフィックスがインストールされていることを確認してください。

AEM および OSGi コンソールの admin アカウントのデフォルトパスワードの変更

インストール後に、(すべてのインスタンスに対する)権限のある AEM admin アカウントのパスワードを変更することを強くお勧めします。

以下のアカウントが該当します。

  • AEM admin アカウント
    AEM admin アカウントのパスワードを変更すると、CRX へのアクセス時には新しいパスワードを使用する必要があります。
  • OSGi Web コンソールの admin パスワード
    この変更は、Web コンソールへのアクセスに使用する admin アカウントにも適用されます。そのため、Web コンソールへのアクセスの際にも同じパスワードを使用する必要があります。

これらの 2 つのアカウントは、個別の資格情報を使用する異なるアカウントです。デプロイメントをセキュリティで保護するには、それぞれに強力なパスワードを設定することが不可欠です。

AEM admin パスワードの変更

AEM の admin アカウントのパスワードは、Granite の操作 - ユーザーコンソールで変更できます。

このコンソールでは、admin アカウントの編集とパスワードの変更をおこなうことができます。

注意:

admin アカウントを変更すると、OSGi Web コンソールのアカウントも変更されます。admin アカウントの変更後は、OSGi アカウントを変更してください。 

OSGi Web コンソールのパスワード変更の重要性

AEM admin アカウントとは別に、OSGi Web コンソールのデフォルトのパスワードを変更しない場合は、次の問題が発生する可能性があります。

  • 起動/シャットダウン(大規模なサーバーでは数分かかる場合があります)時にデフォルトのパスワードを使用するサーバーのリスク
  • リポジトリの停止/バンドルの再起動時(OSGi は実行されている場合)のサーバーのリスク

Web コンソールのパスワードの変更について詳しくは、以下の OSGi Web コンソールの admin パスワードの変更を参照してください。

OSGi Web コンソールの admin パスワードの変更

Web コンソールへのアクセスに使用するパスワードの変更も必要です。そのためには、Apache Felix OSGi Management Console の以下のプロパティを設定します。

User Name」と「Password」:Apache Felix Web Management Console にアクセスするための資格情報です。
インスタンスのセキュリティを確保するには、最初のインストールの後にパスワードを変更する必要があります。

次の手順を実行します。

  1. Web コンソール(<server>:<port>/system/console/configMgr)に移動します。

  2. Apache Felix OSGi Management Console に移動して、「User Name」と「Password」を変更します。

    chlimage_1
  3. Save」をクリックします。

カスタムエラーハンドラーの実装

情報が開示されないようにするには、(404 および 500 HTTP 応答コード専用の)カスタムエラーハンドラーページを定義することをお勧めします。

注意:

詳しくは、カスタムスクリプトまたはエラーハンドラーの作成方法に関するナレッジベースの記事を参照してください。

ディスパッチャーのセキュリティチェックリストの確認

AEM ディスパッチャーはインフラストラクチャの重要な部分です。ディスパッチャーのセキュリティチェックリストを確認することを強くお勧めします。

警告:

ディスパッチャーを使用して「.form」セレクターを無効にする必要があります。

検証手順

レプリケーションおよびトランスポートユーザーの設定

AEM の標準インストールでは、admin をデフォルトのレプリケーションエージェント内のトランスポート資格情報のユーザーとして指定します。また、admin ユーザーはオーサーシステムでレプリケーションのソースを特定する場合にも使用されます。

セキュリティを考慮して、特定の使用事例に対応するように両方のユーザーを変更してください。その際の注意事項を次に示します。

  • トランスポートユーザーは admin 以外のユーザーにする必要があります。正確には、パブリッシュシステムの関連部分へのアクセス権限のみを持つユーザーをパブリッシュシステムで設定し、そのユーザーの資格情報をトランスポートに使用してください。

    バンドルされたレプリケーション受信者ユーザーから開始し、状況に合わせてそのユーザーのアクセス権限を設定できます。

  • レプリケーションユーザーまたはエージェントユーザー ID も admin 以外のユーザー(ただし、レプリケーションされるコンテンツの確認のみ可能なユーザー)にする必要があります。レプリケーションユーザーは、レプリケーション対象のコンテンツを、公開者に送信する前にオーサーシステムで収集するために使用します。

操作ダッシュボードのセキュリティヘルスチェックの確認

AEM 6 には新しく操作ダッシュボードが導入されています。このダッシュボードは、システムオペレーターが問題のトラブルシューティングやインスタンスのヘルスの監視をおこなうためのものです。

また、このダッシュボードには一連のセキュリティヘルスチェック機能が用意されています。実稼働インスタンスの運用を開始する前に、すべてのセキュリティヘルスチェックのステータスを確認しておくことをお勧めします。詳しくは、操作ダッシュボードのドキュメントを参照してください。

サンプルコンテンツが存在するかどうかの確認

実稼動システムを公開する前に、そのシステム上のすべてのサンプルコンテンツ/ユーザー(Geometrixx プロジェクトやそのコンポーネントなど)を完全にアンインストールして削除しておく必要があります。

注意:

このインスタンスが実稼動準備モードで実行されている場合、サンプルの Geometrixx アプリケーションは削除されます。何らかの理由で削除されない場合は、パッケージのアンインストールの説明に従って cq-geometrixx-all-pkg パッケージをアンインストールできます。その後で、同じユーザーインターフェイスを使用して geometrixx パッケージをすべて削除できます。

CRX 開発バンドルが存在するかどうかの確認

実稼動のオーサーシステムとパブリッシュシステムへのアクセスを可能にする前に、それらの両方のシステムで、以下の開発用 OSGi バンドルをアンインストールしておく必要があります。

  • Adobe CRXDE サポート(com.adobe.granite.crxde-support)
  • Adobe Granite CRX Explorer(com.adobe.granite.crx-explorer)
  • Adobe Granite CRXDE Lite(com.adobe.granite.crxde-lite)

Sling 開発バンドルが存在するかどうかの確認

AEM Developer Tools for Eclipse は Apache Sling Tooling Support Install(org.apache.sling.tooling.support.install)をデプロイします。

実稼動のオーサーシステムとパブリッシュシステムへのアクセスを可能にする前に、それらの両方のシステムで、この OSGi バンドルをアンインストールしておく必要があります。

クロスサイトリクエストフォージェリからの保護

CSRF 対策フレームワーク

AEM 6.1 には、クロスサイトリクエストフォージェリから保護する CSRF 対策フレームワークと呼ばれるメカニズムが搭載されています。使用方法について詳しくは、ドキュメントを参照してください。

Sling Referrer Filter

CRX WebDAV および Apache Sling のクロスサイトリクエストフォージェリ(CSRF)に関する既存のセキュリティ問題に対応するには、リファラーフィルターを使用するために設定を追加する必要があります。

リファラーフィルターサービスは OSGi のサービスの 1 つであり、次の設定が可能です。

  • フィルター処理する HTTP メソッド
  • 空のリファラーヘッダーを使用できるかどうか
  • サーバーホスト以外に許可されるサーバーのホワイトリスト

デフォルトでは、localhost のすべてのバリエーションおよびサーバーのバインド先の現在のホストの名前がホワイトリストに含まれます。

リファラーフィルターサービスを設定するには:

  1. Apache Felix コンソール(Configurations)を開きます。
       http://<server>:<port_number>/system/console/configMgr

  2. admin としてログインします。

  3. Configurations メニューで、次の項目を選択します。

        Apache Sling Referrer Filter

  4. Allow Hosts」フィールドに、リファラーとして許可するすべてのホストを入力します。各エントリは次の形式にする必要があります。
       <protocol>://<server>:<port> 
    次に例を示します。

    • http://allowed.server:80 の場合、特定のポートを使用して、このサーバーからの要求がすべて許可されます。
    • https 要求も許可する場合は、2 行目を入力する必要があります。
    • このサーバーのすべてのポートを許可する場合は、ポート番号として 0 を使用できます。

  5. 空の、または欠落しているリファラーヘッダーを許可する場合は、「Allow Empty」フィールドを選択します。

    警告:

    空の値を許可するのではなく cURL などのコマンドラインツールを使用する場合は、リファラーを指定することをお勧めします。これは、システムが CSRF 攻撃を受ける可能性があるためです。

  6. Filter Methods」フィールドを使用して、このフィルターがチェックに使用する方法を編集します。

  7. Save」をクリックして変更を保存します。

OSGi 設定

一部の OSGi 設定は、アプリケーションのデバッグを容易におこなえるようにデフォルトで設定されます。実稼動のパブリッシュインスタンスとオーサーインスタンスでは、これらの設定を変更して、内部情報が公開されないようにする必要があります。

注意:

Day CQ WCM Debug Filter を除く以下のすべての設定は、自動的に実稼動準備モードの対象になります。このため、インスタンスを実稼働環境にデプロイする前にすべての設定を見直すことをお勧めします。

以下に示す各サービスについて、記載されている設定を変更してください。

詳しくは、OSGi 設定を参照してください。

AEM を操作しているときは、このようなサービスの設定を管理する方法がいくつかあります。詳細および推奨事項については、OSGi の設定を参照してください。

追加情報

サービス拒否(DoS)攻撃の軽減

サービス拒否(DoS)攻撃は、対象となるユーザーがコンピューターリソースを使用できない状態にするものです。多くの場合、この攻撃ではリソースを過負荷状態にします。次に例を示します。

  • 外部のソースから大量の要求を送信する。
  • システムが正常に提供可能な量を超える情報を要求する。
    例えば、リポジトリ全体の JSON 表現を要求します。
  • 無制限の数の URL を含むコンテンツページをリクエストする。URL にはハンドル、複数のセレクター、拡張子およびサフィックスを含めることができるうえ、すべて変更できます。
    例えば、.../en.html を以下のページとしてリクエストすることも可能です。
    • .../en.ExtensionDosAttack
    • .../en.SelectorDosAttack.html
    • .../en.html/SuffixDosAttack
    有効なすべてのバリエーション(例えば、200 という応答が返され、バリエーションをキャッシュするように設定されている場合)がディスパッチャーによってキャッシュされるので、最終的にはファイルシステムがいっぱいになり、以降の要求に対してサービスを提供できなくなります。

このような攻撃を防ぐための設定のポイントは多数ありますが、ここでは AEM に直接関連する設定についてのみ説明します。

DoS を防ぐための Sling の設定

Sling はコンテンツ中心型です。つまり、(HTTP)要求がそれぞれ JCR リソース(リポジトリノード)の形式でコンテンツにマップされるので、コンテンツに焦点を当てた処理が行われるということです。

  • 最初のターゲットは、コンテンツを保持するリソース(JCR ノード)です。
  • 次に、リソースのプロパティを要求の特定の部分(例:セレクター、拡張子など)と組み合わせてレンダラー(スクリプト)が特定されます。

注意:

詳しくは、Sling の要求処理を参照してください。

このアプローチにより Sling が強化され、柔軟性も向上しますが、これまでどおり柔軟性の管理には注意が必要です。

DoS の悪用を防ぐ方法は次のとおりです。

  1. アプリケーションレベルで制御を組み込みます。バリエーションの数が原因で、デフォルト設定が適していない可能性があります。

    アプリケーションで必要な処理は次のとおりです。

    • アプリケーションのセレクターを制御して、必要とされる明示的なセレクターのみ提供し、他のすべてに対しては 404 を返します。
    • 無制限の数のコンテンツノードの出力が行われないようにします。
  2. 問題点となっている可能性のあるデフォルトのレンダラーの設定を確認します。

    • 具体的には、ツリー構造が複数のレベルに及ぶ JSON レンダラーです。
      例えば、次のような要求があるとします。
          http://localhost:4502/.json
      この要求は、JSON 表現でリポジトリ全体をダンプします。これにより、サーバーで重大な問題が発生します。そのため、Sling では結果の最大数に制限を設定します。JSON レンダリングの深さを制限するために、次の値を設定できます。
          JSON Max resultsjson.maximumresults
      この値は Apache Sling GET Servlet の設定に含まれます。この制限を超えると、レンダリングはおこなわれません。AEM 内での Sling 用のデフォルト値は 200 です。
    • 予防策として、デフォルトの他のレンダラー(HTML、プレーンテキスト、XML)を無効にします。この場合も Apache Sling GET Servlet を設定します。

    警告:

    JSON レンダラーを無効にしないでください。これは AEM の通常の処理に必要なレンダラーです。

  3. ファイアウォールを使用してインスタンスへのアクセスをフィルタリングします。

    • 保護のない状態ではサービス拒否攻撃を受ける恐れがあるので、オペレーティングシステムレベルのファイアウォールを使用してインスタンスへのアクセスをフィルタリングする必要があります。

WebDAV の無効化

パブリッシュ環境では WebDAV を無効にする必要があります。そのためには、適切な OSGi バンドルを停止します。

  1. Felix Management Console に接続します。

    http://<host>:<port>/system/console

    例えば、http://localhost:4503/system/console/bundles に接続します。

  2. バンドルのリストで、次の名前のバンドルを探します。

        Apache Sling Simple WebDAV Access to repositories (org.apache.sling.jcr.webdav)

  3. (「Actions」列にある)停止ボタンをクリックして、このバンドルを停止します。

  4. バンドルのリストで、次の名前のバンドルを探します。

        Apache Sling DavEx Access to repositories (org.apache.sling.jcr.davex)

  5. 停止ボタンをクリックして、このバンドルを停止します。

    注意:

    AEM の再起動は不要です。

ユーザーのホームパスに個人を特定できる情報を公開していないことの確認

ユーザーの保護に重要なのは、リポジトリユーザーのホームパスに個人を特定できる情報を公開しないことです。

AEM 6.1 以降では、新しく実装された AuthorizableNodeName インターフェイスにより、ユーザー ID(または許可可能 ID)のノード名を保存する方法が変わりました。新しいインターフェイスでは、ノード名にユーザー ID を表示する代わりに、ランダムな名前を生成します。

これは現在は AEM で許可可能 ID を生成するデフォルトの方法なので、これを有効にするために設定を変更する必要はありません。

推奨されませんが、既存のアプリケーションとの下位互換性確保のために以前の実装が必要な場合は、この機能を無効にすることもできます。これをおこなうには、Web コンソールから Apache Jackrabbit Oak Random Authorizable Node Name OSGi 設定を削除する必要があります。

注意:

詳しくは、「Oak Documentation」のAuthorizable Node Name Generation(英語)を参照してください。

クリックジャッキングの防止

クリックジャッキングを防ぐには、SAMEORIGIN に設定した HTTP ヘッダー X-FRAME-OPTIONS を指定するように Web サーバーを設定することをお勧めします。

クリックジャッキングについて詳しくは、OWASP のサイトを参照してください。

必要な場合は暗号鍵を適切にレプリケーションする

特定の AEM 機能および認証スキームでは、すべての AEM インスタンスに暗号鍵をレプリケーションする必要があります。

これをおこなう前に、6.3 とそれ以前のバージョンでは鍵を保存する方法が異なるので、鍵のレプリケーションはバージョン間で異なることに注意してください。

詳しくは、以下を参照してください。

AEM 6.3 での鍵のレプリケーション

以前のバージョンではレプリケーション鍵はリポジトリに保存されましたが、AEM 6.3 からはファイルシステム上に保存されます。

したがって、インスタンス間で鍵をレプリケーションするには、ソースインスタンスからターゲットインスタンスのファイルシステム上の場所に鍵をコピーする必要があります。

具体的には、以下をおこなう必要があります。

  1. コピーする鍵データが含まれている AEM インスタンス(通常はオーサーインスタンス)にアクセスします。

  2. ローカルファイルシステムで com.adobe.granite.crypto.file バンドルを見つけます。例えば、次のパスにあります。

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21

    各フォルダー内の bundle.info ファイルによって、バンドル名が識別されます。

  3. データフォルダーに移動します。次に例を示します。

    • <author-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  4. HMAC ファイルおよびマスターファイルをコピーします。

  5. 次に、HMAC 鍵の複製先のターゲットインスタンスに移動し、データフォルダーに移動します。次に例を示します。

    • <publish-aem-install-dir>/crx-quickstart/launchpad/felix/bundle21/data
  6. 前にコピーした 2 つのファイルを貼り付けます。

  7. ターゲットインスタンスが既に実行されている場合は、Crypto バンドルを更新します。

  8. 鍵のレプリケーション先のすべてのインスタンスに対して上記の手順を繰り返します。

注意:

最初に AEM をインストールするときに次のパラメーターを追加することによって、6.3 よりも前の鍵の保存方法に戻すことができます。

-Dcom.adobe.granite.crypto.file.disable=true

AEM 6.2 以前のバージョンでの鍵のレプリケーション

AEM 6.2 以前のバージョンでは、鍵は /etc/key ノードの下のリポジトリに保存されます。

インスタンス全体で鍵を安全にレプリケーションするために推奨される方法は、このノードのみをレプリケーションすることです。CRXDE Lite によって、ノードを選択してレプリケーションできます。

  1. http://serrveraddress:4502/crx/de/index.jsp に移動して CRXDE Lite を開きます。

  2. /etc/key ノードを選択します。

  3. レプリケーション」タブに移動します。

  4. レプリケーション」ボタンを押します。

侵入テストの実施

実稼動に移行する前に、AEM インフラストラクチャの侵入テストを実施することを強くお勧めします。

開発のベストプラクティス

AEM 環境の安全を確保するには、新規開発においてセキュリティのベストプラクティスに従うことが重要です。

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー