概要
Admiral はデフォルトでは認証機能がありません
ユーザ認証を追加したい場合は別途自分でユーザを追加する必要があります
今回はその方法を紹介したいと思います
環境
- macOS 10.13.2
- docker 17.12.0-ce
- Admiral v1.3.0
※ Ubunt 16.04.3 + docker 17.05.0-ce だとうまく動作しない機能がありました
local-users.json を作成する
- cd /root/work/admiral
- vim local-users.json
{
"users": [{
"email": "admin@admiral.local",
"password": "Password1!"
}, {
"email": "user1@admiral.local",
"password": "secret1"
}, {
"email": "user2@admiral.local",
"password": "secret2"
}]
}
users プロパティに email と password プロパティを持つオブジェクトを配列で追加していきます
ファイルを指定して admiral を起動する
docker run -d -p 8282:8282 --name admiral -e XENON_OPTS="--localUsers=/tmp/local-users.json" -v /root/work/admiral/local-users.json:/tmp/local-users.json vmware/admiral
作成した JSON ファイルをコンテナにマウントします
そして XENON_OPTS の --localUsers
オプショションでコンテナ上に配置した JSON ファイルを指定することで認証を有効にすることができます
ログインする
http://localhost:8282
にアクセスするとログイン画面が表示されるようになるので local-users.json に記載されたユーザ情報でログインできるか確認してみましょう
ユーザの管理者権限を制御する
デフォルトだと JSON に定義されたユーザはみな管理者権限を持っています
このままだと全員がすべてのプロジェクトにアクセスすることができ、かつプロジェクトの追加やユーザコントロールができてしまいます
なのでまずは管理者権限が不要なユーザから権限を削除しましょう
管理 -> ID 管理 -> ユーザおよびグループ
で検索ボックスで何でもいいので検索するとユーザが出てきます
ユーザが表示されたらチェックボックスをチェックし「管理者ロールの割り当てを解除」を選択することで権限を削除できます
こんな感じで他のユーザにも権限の解除 or 付与を行います
プロジェクトにユーザ情報を紐付ける
では、実際に ACL が効いているか確認してみましょう
default-project に触れるユーザを設定します
管理 -> プロジェクト -> default-project -> メンバー -> 追加
でユーザを追加しましょう
追加する際にロールを決められるので必要なロールを設定してください
コンテナやテンプレートの作成ができるようにするには「開発者」ロールを選択しましょう
プロジェクトの内容だけ確認させたい場合は「閲覧者」ロールを選択すると Read only なユーザを作成することができます
ACL の動作確認
admin, user1, user2 でそれぞれログインしてみましょう
admin の場合は default-project も見え管理のタブも表示されていると思います
user1 の場合は default-project が見えテンプレートの追加やコンテナの操作はできるものの管理のタグが非表示になっています
user2 の場合はそもそもログインがうまくいかずに何もできないと思います
こんな感じでプロジェクトに対して ACL を設定することができます
おまけ 認証を有効にした場合の API を実行する方法
POST /core/authn/basic
に JSON に記載したメールアドレスとパスワードをベーシック認証として送信します
その際に Body に requestType を付与します
curl -u 'admin@admiral.local:Password1!' -v -X POST -d'{"requestType":"LOGIN"}' http://localhost:8282/core/authn/basic -H "Content-Type: application/json"
そしてレスポンスに含まれる x-xenon-auth-token
を付与して API をコールすることで各種 API をコールすることができるようになります
以下はログインしたユーザでプロジェクトの一覧を取得する方法です
curl -v -H "x-xenon-auth-token: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJ4biIsInN1YiI6Ii9jb3JlL2F1dGh6L3VzZXJzL1lXUnRhVzVBWVdSdGFYSmhiQzVzYjJOaGJBXHUwMDNkXHUwMDNkIiwiZXhwIjoxNTE1NTkxNjg1fQ.xb0X5SLb-pYplnYOXFjdKUscFt4mQT8-E8XXCZcW5Dw" -X GET http://localhost:8282/projects
最後に
VMware Admiral でユーザ認証を使ってみました
平文の JSON ファイルベースの認証なので少し不安な感じはします
またユーザを追加する場合はファイルを更新してコンテナを再起動する必要があるので少し面倒です (コンテナを削除する必要はありませんが、認証なしからありにする場合は削除しないとダメです)
デフォルトでは管理者権限が付与されてしまっているのでユーザの登録や更新をしたら必ず ID 管理から権限のコントロールをするようにしましょう
一応これを使えばプロジェクトベースの ACL 的なことはできるようになります
個人的にはファイル管理も良いですが LDAP 連携など外部のユーザ管理システムと連携してほしいかなと思います
また JSON ファイルで管理者権限の設定もできると嬉しいかなと思います
0 件のコメント:
コメントを投稿