はじめに
こんにちは。Instana Observability Advent Calendar 2023の4日目の投稿です。
Instana self-hosted on dockerは検証用に気軽に立てられますが、Instanaのユーザーを追加したい場合、ユーザーを招待して、届いたメールアドレスでアクションが必要となるため、SMTPサーバーの設定などなかなか面倒です。
今回は、dockerの環境にLDAPサーバーを立てることで簡単にユーザーを追加する方法をご紹介します。
本手順は以下の環境で実施しています。
- Instana Backend: Self-Hosted on docker (Single) Build 247-2
- Platform: IBM Cloud VSI
- OS: Ubuntu 20.04
- docker: 24.0.7 (Community Edition)
- docker-compose: v2.21.0
本手順の対象・流れ
- Instana Backend サーバー環境はdockerの環境なので、そこに相乗りしてLDAPサーバーを立てます。今回はサンプルファイルを用意したのでそれを使って構築します。
- Instana Web UIからLDAP認証に切り替える設定を行います。本手順では、グループ・マッピングの機能については言及しません。
- 最後に、LDAP認証でInstana Web UIにログインできることを確認します。
1. LDAPサーバーの構築
Instana Backend サーバーはインストール済みである前提とします。
dockerに加えて、docker-composeもインストール済みである前提とします。
必要なファイルをサーバーに置いて、docker compose up -d
を打つだけです。
サンプルファイルは個人のgithubに公開しておきましたので使ってみてください。
1.1 docker-compose.ymlファイル
LDAPはOpenLDAPとし、コンテナイメージは osixia/openldap を使用します。
適当なディレクトリにdocker-compose.yml
ファイルを配置または作成します。
mkdir -p /docker/openldap; cd /docker/openldap
vi docker-compose.yml
環境変数(environment)の定義については、必要に応じて変更して使ってください。
何が設定できるかが知りたい方は osixia/openldap のページをご覧ください。
LDAP_ORGANISATION: IBM
LDAP_DOMAIN: instana.local
LDAP_BASE_DN: dc=instana,dc=local
LDAP_ADMIN_PASSWORD: admin
LDAP_CONFIG_PASSWORD: config
LDAP_TLS: false
変更した場合は、ldapadd.ldif
の内容も合わせて変更が必要となります。
1.2 ldapadd.ldifファイル
必要な情報は全てLDIFファイルで定義します。
そうすることで、一度作ってしまえば何度でも同じ環境をサクッと作成できるようになります。
docker-compose.yml
と同じディレクトリに配置します。
サンプルファイルでは、admin
ユーザーとは別にinstanaut1
ユーザーを作成します。
ユーザーを追加する場合はブロック毎コピペして追記します。
# instanaut1, people, instana.local
dn: uid=instanaut1,ou=people,dc=instana,dc=local
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
uid: instanaut1
cn: instanaut1
sn: instanaut1
mail: instanaut1@instana.local
userPassword: {SSHA}j2NdJprA9opORImusfmNW9fJ4PoQPT4I
ユーザーを追加した場合は、instanaグループのmemberにも追記するようにします。
# instana, group, instana.local
dn: cn=instana,ou=group,dc=instana,dc=local
objectClass: top
objectClass: groupOfNames
cn: instana
member: uid=admin,ou=people,dc=instana,dc=local
member: uid=instanaut1,ou=people,dc=instana,dc=local
1.3 openldapコンテナの起動
docker-compose.yml
とldapadd.ldif
が用意できたらコンテナを起動します。
初めて起動するときはイメージプルがありますのでインターネット接続が必要です。
docker compose up -d
[+] Running 10/10
✔ openldap 9 layers [⣿⣿⣿⣿⣿⣿⣿⣿⣿] 0B/0B Pulled 17.1s
✔ 45b42c59be33 Pull complete 1.0s
✔ ae7fb8f59730 Pull complete 0.6s
✔ 55443d9da5d5 Pull complete 8.9s
✔ edbb56ba2f49 Pull complete 1.2s
✔ 8690d28b09a7 Pull complete 1.6s
✔ 7f3b6edb2b51 Pull complete 2.1s
✔ 176dedf70b8e Pull complete 1.7s
✔ 036fb52cada7 Pull complete 2.1s
✔ 94404c4ec0d9 Pull complete 2.6s
[+] Running 1/1
✔ Container openldap Started
1.4 ユーザーパスワードの変更
パスワードを変更します。
LDIFファイル内に記載するための暗号化されたパスワードを生成するにはslappasswd
コマンドを使用します。Linux OSにパッケージを追加しても良いのですが、最終的に不要なパッケージを極力入れたくないというのもあり、コンテナを活用します。
slappasswd
コマンドの結果{SSHA}
で始まる文字列が返ってくるので、
それを使ってldapadd.ldif
内の該当ユーザーのuserPassword
属性の値を置換します。
docker exec openldap slappasswd -s <"暗号化したいパスワード">
{SSHA}YWD+yD8F3k2hEYOlGMj2d8Nist/V/Kfx
vi ldapadd.ldif
1.5 openldapコンテナの再起動
コンテナを再起動することで、新しいLDIFファイルでLDAPサーバーが再構築されます。
docker compose down
[+] Running 1/1
✔ Container openldap Removed
docker compose up -d
[+] Running 1/1
✔ Container openldap Started
docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
openldap osixia/openldap:latest "/container/tool/run --copy-service" openldap 50 seconds ago Up 49 seconds 0.0.0.0:389->389/tcp, :::389->389/tcp, 636/tcp
以上でLDAPサーバーの準備は完了です。
2. InstanaのLDAP認証設定
Instana Web UIにログインし、OpenLDAP認証を使用するように設定を行います。
設定を変更した後は、それまで使用していたローカルユーザは使用できなくなります。
設定 > 認証 > LDAP にて、
以下のように必要な設定を入力します。
設定項目 | 設定値 | 備考 |
---|---|---|
URL | ldap://openldap:389 | openldapコンテナ名 |
ユーザー | cn=admin,dc=instana,dc=local | LDAP管理者なのでそのまま |
パスワード | LDAP管理者パスワード | デフォルトはadmin |
基本 | dc=instana,dc=local | Base DN |
グループ・クエリー | (cn=instana) | |
グループ・メンバー・フィールド | member | |
ユーザー・クエリー・テンプレート | (uid=%s) | |
Eメール・フィールド |
(つづき)
LDAPユーザー・アカウントの設定
LDAP内のAdminユーザーを指定し、構成のテストをクリックします。
"Test succeeded"と出ればOKです。
設定項目 | 設定値 | 備考 |
---|---|---|
ユーザー名 | admin | LDAP内のInstana Adminユーザー |
パスワード | Instana Adminパスワード | LDAP内のInstana Adminパスワード |
オプションの設定は割愛し、保存ボタンをクリックします。
画面上部に「構成が正常に保存されました。」と出ればOKです。
以上でInstanaのLDAP認証設定は完了です。
3. ログインの確認
Instana Web UIにLDAPに設定したユーザー/パスワードでログインします。
adminユーザーに関しては、Instana Adminユーザーに関連付けられており、設定も全て引き継がれています。
追加のinstanaut1ユーザーに関しては、初回ログイン時にユーザーが作成されます。
今回はグループマッピングを使用していないため、Defaultグループに割り当てられます。
おわりに
Instana Self-Hosted on dockerのLDAP認証環境を簡単に作成する方法をまとめました。
複数ユーザーを簡単に扱えるようになると、細かいRBAC設定による挙動確認やダッシュボードの共有などの挙動を試したりと検証の幅が広がるところが良いですね。
少しでも参考になれば幸いです。