ブログ

Docker Composeで簡単にOpenAMとPolicy Agentを構築する

スタッフの五十島です。

OpenAMについて業務で触れる機会があり情報を集めたところ、古いものが多かったり日本語の情報が少なかったり、情報通りに構築してもうまく動かなかったり、手軽に学習できないような状況でした・・・

そこで、誰でも簡単にOpenAMと Policy Agentによるアクセス管理を試せる、Docker Composeを使った環境の構築手順を紹介したいと思います!

Dockerの動作環境であればホスト側のOSに制限はありませんが、動作の検証はRocky Linuxでしています。

また、主な設定値は以下のページを参考にしています。

OpenAMの設定値:Quick Start Guide · OpenIdentityPlatform/OpenAM Wiki · GitHub
docker-compose.yml:Compose Specification(仕様) — Docker-docs-ja 20.10 ドキュメント
Dockerfile:Dockerfile のベスト・プラクティス — Docker-docs-ja 20.10 ドキュメント


前提条件

  • DockerとDocker Composeがインストールされていること。
    • なるべく新しいバージョンを推奨します。
  • 使用するコンテナ名やポート番号は適宜被らないものにすること。
  • 使用するポート(80番や8080番など)がファイアウォールで解放されていて、アクセスできること。
  • OpenAMとPolicy AgentにFQDNでアクセスできること。
    • OpenAMはFQDNによるアクセスが必須なので、クライアント側のhostsやDNSサーバにFQDNとIPアドレスを登録してください。
    • ブラウザのCookieの仕様上、Policy Agentへのログイン情報の共有のため、少なくともそれぞれのドメイン名は同じものを使用してください。

手順

  1. ディレクトリを作成し、その中に.envファイルとdocker-compose.ymlファイルを作成します。
    .envファイルにそれぞれのFQDNとポート番号、エージェント名、Policy Agent用のパスワードを記載してください。後ほどPolicy Agentの作成時に使用します。
    172.17.0.1はDockerコンテナから見たデフォルトのホスト側のIPアドレスなので、相手のFQDNにこれを指定することでコンテナをまたいだ名前解決を可能にしています。
    ※Policy Agentはshmサイズを指定しないと動作しないため注意が必要です。
shell
$ mkdir ~/openam
$ cd ~/openam
$ vi .env
$ vi docker-compose.yml
.env(設定例)
OPENAM_FQDN=openam.example.com
OPENAM_PORT=8080
AGENT_FQDN=example.com
AGENT_PORT=80
AGENT_NAME=apache_agent
PA_PASSWORD=password
docker-compose.yml
version: "3.9"

services:
  openam:
    image: openidentityplatform/openam
    container_name: openam
    hostname: ${OPENAM_FQDN}
    ports:
      - "${OPENAM_PORT}:8080"
    extra_hosts:
      - "${AGENT_FQDN}:172.17.0.1"
    restart: always

  apache_agent:
    build: 
      context: ./apache
      args:
        OPENAM_URL: http://${OPENAM_FQDN}:${OPENAM_PORT}
        AGENT_URL: http:/${AGENT_FQDN}:${AGENT_PORT}
        AGENT_NAME: ${AGENT_NAME}
        PA_PASSWORD: ${PA_PASSWORD}
    container_name: apache_agent
    hostname: ${AGENT_FQDN}
    ports:
      - "${AGENT_PORT}:80"
    extra_hosts:
      - "${OPENAM_FQDN}:172.17.0.1"
    shm_size: 2gb
    restart: always
  1. apacheディレクトリを作成し、その中にDockerfileを作成します。
shell
$ mkdir apache
$ cd apache
$ vi Dockerfile
Dockerfile
FROM httpd:2.4

ARG OPENAM_URL
ARG AGENT_URL
ARG AGENT_NAME
ARG PA_PASSWORD

ENV INSTALL="/usr/web_agents/apache24_agent/bin/agentadmin --s \"/usr/local/apache2/conf/httpd.conf\" \"$OPENAM_URL/openam\" \"$AGENT_URL\" \"/\" \"$AGENT_NAME\" \"/tmp/pwd.txt\" --acceptLicence --changeOwner"

RUN apt-get update \
 && apt-get install -y wget unzip \
 && wget --show-progress --progress=bar:force:noscroll --quiet --output-document=/tmp/Apache_v24_Linux_64bit_4.1.1.zip https://github.com/OpenIdentityPlatform/OpenAM-Web-Agents/releases/download/4.1.1/Apache_v24_Linux_64bit_4.1.1.zip \
 && unzip /tmp/Apache_v24_Linux_64bit_4.1.1.zip -d /usr/ \
 && rm /tmp/Apache_v24_Linux_64bit_4.1.1.zip \
 && echo $PA_PASSWORD > /tmp/pwd.txt \
 && apt-get remove -y wget unzip \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/*
  1. docker-compose.ymlファイルがあるディレクトリ(今回は~/openam)で以下のコマンドを実行し、コンテナを起動します。
    ※Composeはプラグイン版とスタンドアロン版でコマンドが異なるため注意が必要です。
shell
$ cd ~/openam
//プラグイン版
$ docker compose up -d
//スタンドアロン版
$ docker-compose up -d
  1. ブラウザで http://openam.example.com:8080/openamにアクセスし、OpenAMの初期設定とPolicy Agentの作成をします。
    1. 今回はPolicy Agentの動作確認用なので、【デフォルト設定の作成】から構築します。
      ライセンスに同意すると以下のような画面になるので、それぞれパスワードを設定します。
      デフォルトポリシーエージェントのパスワードは、docker-compose.ymlで設定したものと別でも大丈夫です。
    2. 【設定の作成】を押すと、設定の生成と内蔵のOpenDJへデータの登録が始まります。
      以下のような画面になるまで待機します。
    3. 【ログインに進む】を押すと以下のようにログイン画面へ転送されます。
      4-1で設定したデフォルトユーザーのパスワードを使って、amAdminでログインします。
    4. ログインしたら左のリストから【Authorization→Policy Sets】を開き、【Default Policy Sets】を選択します。
      • 【Add a Policy】を押すとポリシー作成画面になります。ポリシー名は自由ですが、このポリシーに沿ってアクセス管理がなされるため、リソースにPolicy AgentのFQDNであるexample.comを指定しています。
      • 作成したポリシーに設定を追加していきます。
        • 【Add an Action】からGETとPOSTを追加して、【Save Changes】で設定の保存をします。
        • 【Type】をNever MatchからAuthenticated Usersに変更し、【チェックマーク】を押してから【Save Changes】で設定の保存をします。
    5. 左のリストから【Applications→Web Agents】を開き、【エージェント→新規】を選択し、Policy Agentの情報を登録します。
      ここでの入力値はdocker-compose.ymlに記載したものに合わせてください。
    6. トップページに戻り、ページ上部の【CONFIGURE→GLOBAL SERVICES】を開き、【プラットフォーム】を選択。Cookieドメインのデフォルト設定を消して、.example.comを追加します。
      これによってOpenAMのログイン情報をPolicy Agent側で読み出すことができるようになります。
  1. OpenAMで必要な設定が完了したので、以下のコマンドを実行してPolicy Agentを構築します。
    環境変数に登録されたコマンドを利用してagentadminにPolicy Agentの情報を渡すことで、エージェントの設定を自動で導入しています。またApacheにエージェントのモジュールを追加しているため、コンテナを再起動することで設定を反映させています。
shell
docker container exec apache_agent bash -c 'eval $INSTALL'
docker-compose restart apache_agent
(Policy Agentのインストールコマンドの一例)
/usr/web_agents/apache24_agent/bin/agentadmin --s "/usr/local/apache2/conf/httpd.conf" "http://openam:8080/openam" "http://example.com:80" "/" "apache_agent" "/tmp/pwd.txt" --acceptLicence –changeOwner
  1. ブラウザで http://example.com にアクセスし、OpenAMのログイン画面にリダイレクトされ、
    OpenAMでのログインの後に『It works』が表示されることを確認します。

    【Authorization→Policy Sets】でのアクセス許可ができていない場合や、Apacheがエージェントモジュールを上手く読み込めていない場合、以下のような画面になり、正しく表示されないことがあります。
    この場合、設定値の見直しやコンテナの再起動が必要になります。


以上でOpenAMとPolicy Agentの環境構築が完了になります。

もっとOpenAMを詳しく知りたい場合、以下のページから始めるのがおすすめです!

OpenAMの各種手順:【OpenAM】技術Tips | OpenAMコンソーシアム
Policy Agentのドキュメント:OpenAM Web Policy Agents 4.1.1 > Web Policy Agent Guide

関連記事

TOP