AEMの読み取り専用ファイルまたは不変ファイル
説明 description
環境
Adobe Experience Manager
問題/症状
AdobeManaged Services(AMS)がシステムをプロビジョニングする際に、すべてが機能し、安全になるベースライン設定を展開します。 これらは、AMS が確実に機能とセキュリティのベースラインとして保証したいと考えているものです。 これを実現するために、一部のファイルは読み取り専用かつ不変としてマークされ、変更が回避されます。
レイアウトを使用しても、動作を変更したり、必要な変更を上書きしたりすることはできません。 これらのファイルを変更する代わりに、元のファイルを置き換える独自のファイルをオーバーレイします。
これにより、AMS が最新の修正とセキュリティの強化で Dispatcher にパッチを適用しても、ファイルは変更されないことが保証されます。 その後も、改善点のメリットを活用し、必要な変更のみを採用できます。
上の図に示すように、不変ファイルは、ゲームの進行を止めるものではありません。 これらのファイルは、パフォーマンスが損なわれないように、レーン内にとどまらせる作用があります。 この方法では、次の重要な機能を利用できます。
- カスタマイズは、独自の安全なスペースで処理されます
- AEMのオーバーレイメソッドと同様のカスタム変更のオーバーレイ
- AMS 設定のパッチ適用は、カスタマイズを変更せずに実行できる
- 基本インストールとカスタマイズされた設定のテストを同時に実行して、カスタマイズやその他の原因(どのファイルか?)で問題が発生しているかどうかを判別する
次に、Dispatcherと共にデプロイされる一般的なファイルのリストを示します。
/etc/httpd/
├── conf
│ └── httpd.conf
├── conf.d
│ ├── available_vhosts
│ │ ├── 000_unhealthy_author.vhost
│ │ ├── 000_unhealthy_publish.vhost
│ │ ├── aem_author.vhost
│ │ ├── aem_flush.vhost
│ │ ├── aem_health.vhost
│ │ ├── aem_lc.vhost
│ │ └── aem_publish.vhost
│ ├── dispatcher_vhost.conf
│ ├── enabled_vhosts
│ │ ├── aem_author.vhost -> /etc/httpd/conf.d/available_vhosts/aem_author.vhost
│ │ ├── aem_flush.vhost -> /etc/httpd/conf.d/available_vhosts/aem_flush.vhost
│ │ ├── aem_health.vhost -> /etc/httpd/conf.d/available_vhosts/aem_health.vhost
│ │ └── aem_publish.vhost -> /etc/httpd/conf.d/available_vhosts/aem_publish.vhost
│ ├── logformat.conf
│ ├── remoteip.conf
│ ├── rewrites
│ │ ├── base_rewrite.rules
│ │ └── xforwarded_forcessl_rewrite.rules
│ ├── security.conf
│ ├── variables
│ │ └── ams_default.vars
│ └── whitelists
│ └── 000_base_whitelist.rules
├── conf.dispatcher.d
│ ├── available_farms
│ │ ├── 000_ams_author_farm.any
│ │ ├── 001_ams_lc_farm.any
│ │ └── 999_ams_publish_farm.any
│ ├── cache
│ │ ├── ams_author_cache.any
│ │ ├── ams_author_invalidate_allowed.any
│ │ ├── ams_publish_cache.any
│ │ └── ams_publish_invalidate_allowed.any
│ ├── clientheaders
│ │ ├── ams_author_clientheaders.any
│ │ ├── ams_common_clientheaders.any
│ │ ├── ams_lc_clientheaders.any
│ │ └── ams_publish_clientheaders.any
│ ├── dispatcher.any
│ ├── enabled_farms
│ │ ├── 000_ams_author_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any
│ │ └── 999_ams_publish_farm.any -> /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any
│ ├── filters
│ │ ├── ams_author_filters.any
│ │ ├── ams_lc_filters.any
│ │ └── ams_publish_filters.any
│ ├── renders
│ │ ├── ams_author_renders.any
│ │ ├── ams_lc_renders.any
│ │ └── ams_publish_renders.any
│ └── vhosts
│ ├── ams_author_vhosts.any
│ ├── ams_lc_vhosts.any
│ └── ams_publish_vhosts.any
├── conf.modules.d
│ ├── 01-cgi.conf
│ └── 02-dispatcher.conf
└── modules -> ../../usr/lib64/httpd/modules
└── mod_dispatcher.so
不変ファイルを特定するには、Dispatcherで次のコマンドを実行します。
$ lsattr -Rl /etc/httpd 2 > /dev/null | grep Immutable
不変ファイルに対する応答のサンプルは次のとおりです。
/etc/httpd/conf/httpd.conf Immutable
/etc/httpd/conf.d/available_vhosts/aem_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_publish.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_lc.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_flush.vhost Immutable
/etc/httpd/conf.d/available_vhosts/aem_health.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_author.vhost Immutable
/etc/httpd/conf.d/available_vhosts/000_unhealthy_publish.vhost Immutable
/etc/httpd/conf.d/rewrites/base_rewrite.rules Immutable
/etc/httpd/conf.d/rewrites/xforwarded_forcessl_rewrite.rules Immutable
/etc/httpd/conf.d/whitelists/000_base_whitelist.rules Immutable
/etc/httpd/conf.d/dispatcher_vhost.conf Immutable
/etc/httpd/conf.d/logformat.conf Immutable
/etc/httpd/conf.d/security.conf Immutable
/etc/httpd/conf.modules.d/02-dispatcher.conf Immutable
/etc/httpd/conf.dispatcher.d/available_farms/000_ams_author_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any Immutable
/etc/httpd/conf.dispatcher.d/available_farms/001_ams_lc_farm.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_author_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_cache.any Immutable
/etc/httpd/conf.dispatcher.d/cache/ams_publish_invalidate_allowed.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_author_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_publish_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_common_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/clientheaders/ams_lc_clientheaders.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_author_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_publish_filters.any Immutable
/etc/httpd/conf.dispatcher.d/filters/ams_lc_filters.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_author_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_publish_renders.any Immutable
/etc/httpd/conf.dispatcher.d/renders/ams_lc_renders.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_author_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/vhosts/ams_lc_vhosts.any Immutable
/etc/httpd/conf.dispatcher.d/dispatcher.any Immutable
解決策 resolution
変更を行う方法
変数
変数を使用すると、設定ファイル自体を変更せずに、機能を変更できます。 設定の特定の要素は、変数の値を調整して調整できます。 ファイル /etc/httpd/conf.d/dispatcher_vhost.conf ージからハイライト表示される例の一つを次に示します。
Include /etc/httpd/conf.d/variables/ams_default.vars
<IfModule disp_apache2.c>
DispatcherConfig conf.dispatcher.d/dispatcher.any
DispatcherLog logs/dispatcher.log
DispatcherLogLevel ${DISP_LOG_LEVEL}
DispatcherDeclineRoot 0
DispatcherUseProcessedURL 1
</IfModule>
表示される標準の値ではなく、DispatcherLogLevel ディレクティブに DISP_LOG_LEVEL の変数があるのがわかります。 コードのこのセクションの上には、変数ファイルに対する include ステートメントも表示されます。 次に、変数ファイル /etc/httpd/conf.d/variables/ams_default.vars を確認します。 その変数ファイルの内容は次のとおりです。
Define DISP_LOG_LEVEL info
Define AUTHOR_WHITELIST_ENABLED 0
Define PUBLISH_WHITELIST_ENABLED 0
Define LIVECYCLE_WHITELIST_ENABLED 0
Define AUTHOR_FORCE_SSL 1
Define PUBLISH_FORCE_SSL 0
Define LIVECYCLE_FORCE_SSL 1
上記のように、変数の現在の値 DISP_LOG_LEVEL 「info」です。 これを調整してトレースやデバッグを行ったり、数値やレベルを選択したりできます。 現在は、ログレベルを制御するすべての場所が自動的に調整されます。
オーバーレイメソッド
上位レベルのインクルードファイルについて理解しておいてください。カスタマイズを開始するには、これらを使用する必要があります。 簡単な例から始めるために、このDispatcherを指すように新しいドメイン名を追加するシナリオが使います。 ドメインの例として、まず既存の設定ファイル we-retail.adobe.com. 新しい設定ファイルにコピーし、そこで変更を追加します。
$ cp /etc/httpd/conf.d/available_vhosts/aem_publish.vhost /etc/httpd/conf.d/available_vhosts/weretail_publish.vhost
既存の aem_publish.vhost ファイルをコピーしたのは、動作させるために必要なファイルが既に含まれており、ここからすぐに開始できるためです。 次に、新しい weretail.vhost ファイルを編集し、必要な変更を加えます。
前:
<VirtualHost *:80>
ServerName publish
ServerAlias ${PUBLISH_DEFAULT_HOSTNAME}
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
After:
<VirtualHost *:80>
ServerName weretail-publish
ServerAlias we-retail.adobe.com
DocumentRoot ${PUBLISH_DOCROOT}
<IfModule mod_headers.c>
Header always add X-Dispatcher ${DISP_ID}
Header always add X-Vhost "werteail-publish"
Header merge X-Frame-Options SAMEORIGIN "expr=%{resp:X-Frame-Options}!='SAMEORIGIN'"
Header merge X-Content-Type-Options nosniff "expr=%{resp:X-Content-Type-Options}!='nosniff'"
Header append Vary User-Agent env=!dont-vary
</IfModule>
....... SNIP.......
</VirtualHost>
これで、新しいドメイン名に一致するように ServerName と ServerAlias を更新し、他のパンくずヘッダーも更新しました。 次に、新しいファイルを有効にして、Apache に新しいファイルを使用することを知らせます。
$ cd /etc/httpd/conf.d/enabled_vhosts/; ln -s ../available_vhosts/weretail_publish.vhost .
これで、ドメインがトラフィックの生成対象であることを Apache web サーバーが認識しますが、新しいドメイン名に従うべきことをDispatcher モジュールに通知する必要があります。 まず、新しい*_vhost.any ファイル /etc/httpd/conf.dispatcher.d/vhosts/weretail_vhosts.anyを作成し、そのファイル内で、受け入れたいドメイン名を指定します。
"we-retail.adobe.com"
次に、新しい vhost エントリファイルを使用する新しいファームファイルを作成する必要があります。まず、強力な開始ファイルを新しいファイルにコピーします。
$ cp /etc/httpd/conf.dispatcher.d/available_farms/999_ams_publish_farm.any /etc/httpd/conf.dispatcher.d/available_farms/400_weretail_publish_farm.any
このファームファイルに加える必要のある変更を示します
前:
/publishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/ams_publish_vhosts.any"
}
........SNIP.........
}
After:
/weretailpublishfarm {
/virtualhosts {
$include "/etc/httpd/conf.dispatcher.d/vhosts/weretail_publish_vhosts.any"
}
........SNIP.........
}
これで、ファーム名を更新し、ファーム設定の/virtualhosts セクションで使用するインクルード指示も更新しました。 この新しいファームファイルを有効にして、実行中の設定で使用できるようにする必要があります。
$ cd /etc/httpd/conf.dispatcher.d/enabled_farms/; ln -s ../available_farms/400_weretail_publish_farm.any .
次は、web サーバーサービスを再読み込みし、新しいドメインを使用します。
メモ:
変更したのは、ベースライン設定ファイルに付属の既存のインクルードとコードを変更して活用するために必要な部分だけです。 変更する必要がある要素を詳細に記述するだけです。 作業がはるかに容易になり、メンテナンス対象のコードを減らすことができるようになりました。