はじめに
AAP 2.4 のインストーラーを利用インストールした EDA Controller のうち、特定の環境だけが、ログインしようとすると HTTP 400 のエラーが発生しました。
現象と原因、対策をまとめます。
[2023/08/01 追記]
本記事投稿後、Red Hat カスタマーポータルのナレッジベースに、本事象の記事があがっていました(更新日時 2023年7月12日)。アクセスできる方はナレッジベースをご覧ください。
現象
正しいはずのログイン情報を入力してログインしようとしても以下のようなメッセージが表示されました。
Request failed with status code 400 Bad Request
調べたこと・原因
直接的な原因
たまたまなのですが、とあるAPI の画面を開こうと https://<EDA Controller のグローバルIPアドレス>/api/eda/v1/docs
を開こうととしたら、以下の表示になりました。
肝のエラーメッセージは以下の箇所です。
Invalid HTTP_HOST header: '<EDA Controller のグローバルIPアドレス>'. You may need to add '<EDA Controller のグローバルIPアドレス>' to ALLOWED_HOSTS.
おやおやと思ってこのページの方を見ると ALLOWED_HOSTS
が以下の設定になっていました。
ALLOWED_HOSTS ['localhost', '<EDA Controller のプライベートIPアドレス>', 'fe80::x:x:x:x']
これでは、HOST ヘッダーが制限されているため、EDA Controller にアクセスするには、EDA Controller 自身から https://localhost
と指定するか、 プライベートIPでアクセスできるところから、https://<<EDA Controller のプライベートIPアドレス>
と指定するしかありません。
そのため、https://<EDA Controller のグローバルIPアドレス>/
は 400 Bad Request
となってしまったということです。
原因の原因
ALLOWED_HOSTS
は、複数のアドレス要素から形成されます。以下に例を上げます。(AAP のインストーラーの処理を追いました)
- インストール時の
inventory
の[automationedacontroller]
内に指定した EDA Controller のansible_host
- ファクト
ansible_all_ipv4_addresses
、ansible_all_ipv6_addresses
inventory
の[all:vars]
配下で指定したautomationedacontroller_allowed_hostnames
(デフォルトは空リスト)
ところが、今回利用したのは EC2 インスタンスなので インスタンス自体はグローバルIPアドレスを直接持ちません。そのため、上記のアドレス要素たちの中にグローバルIPアドレスが登場しないことがありえます。結果として、グローバルIPアドレスでアクセスできない、ということになります。
対策
対策は主に2つ考えられます。
対策1: インストーラーの再実行
AAP のインストーラーの inventory
の [all:vars]
の automationedacontroller_allowed_hostnames
変数(ドキュメントにも掲載あり)を指定します。
例:
[all:vars] # 略 automationedacontroller_allowed_hostnames='EDA ControllerのグローバルIPアドレス'
ここで指定したアドレスが、設定 ALLOWED_HOSTS
に「追加」されます。
この状態で、再度 AAP のインストーラーを実行します。
対策2: 設定変更
AAP のインストーラーを追って分かった方法ですが、/etc/ansible-automation-platform/eda/environment
の EDA_ALLOWED_HOSTS
に、許可したいアドレスをカンマ区切りで追加して、以下のコマンドで EDA のサービスを再起動します。
sudo systemctl restart automation-eda-controller
なお、/etc/ansible-automation-platform/eda/environment
は、ユニットファイル /usr/lib/systemd/system/automation-eda-controller.target
内の EnvironmentFile
で指定されていました。
これでログインを再度試すとログインできます。
おわりに
この制限は Automation Controller よりもきついように感じます。EDA Controller の IP アドレスを変更した場合でも起こりうる現象です。そのため、セキュリティの考えや、構成、運用方法にもよりますが、利便性と天秤にかけて *
を許可することも検討してもいいかもしれません。