概要
MinIO にはデフォルトでOpenIDConnectに接続するための機能が実装されています
今回は Onelogin を使って OpenIDConnect 認証できるようにしてみました
環境
- Ubuntu 18.04
- docker 20.10.7
- minio RELEASE.2022-10-24T18-35-07Z
注意事項
gateway モードでは使えません
流れ
- MinIO 起動
- MinIO にグループのポリシーを追加
- Onelogin 側の設定
- ログイン
MinIO の起動
まずは MinIO を起動します
今回は docker を使います
ポイントは MINIO_IDENTITY_OPENID_
で始まる環境変数でここに Onelogin の認証情報を登録します
MINIO_IDENTITY_OPENID_CLAIM_NAME は groups という値にしています
これは Onelogin から送られてきたトークンに含まれる groups というフィールドをもとに MinIO 内で使用するポリシーを選択するために使用されます
特定のグループに対するポリシー情報の登録は後ほど行います
リダイレクトURLは http://localhost:9100/oauth_callback
を設定します
MinIO には oauth_callback
というリダイレクト用の URI が用意されいます
Onelogin の場合 localhost 以外のコールバック URL を指定する場合は https 化が必須なので注意しましょう
docker run --rm -p 9100:9100 -p 9000:9000 --name minio-s3 \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=xxx" \
-v ~/minio/data:/data \
-e "MINIO_IDENTITY_OPENID_CLAIM_NAME=groups" \
-e "MINIO_IDENTITY_OPENID_CONFIG_URL=https://xxxxxx.onelogin.com/oidc/2/.well-known/openid-configuration" \
-e "MINIO_IDENTITY_OPENID_CLIENT_ID=xxxx" \
-e "MINIO_IDENTITY_OPENID_CLIENT_SECRET=xxxx" \
-e "MINIO_IDENTITY_OPENID_SCOPES=groups email openid profile" \
-e "MINIO_IDENTITY_OPENID_REDIRECT_URI=http://localhost:9100/oauth_callback" \
quay.io/minio/minio:RELEASE.2022-10-24T18-35-07Z server /data --console-address ":9100"
MinIO にグループのポリシーを追加
MinIO が起動できたらグループに対する MinIO 上で割り当てるポリシーを作成します
ポリシーの割り当てには MinIO 用の mc という CLI ツールを使います
先にポリシー用のファイルを作成します
- vim allaccess.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::*"
]
}
]
}
あとはこれと mc コマンドを使って起動した MinIO にポリシーを登録します
-
docker run --name mc -it --entrypoint=/bin/sh minio/mc
mc コマンドコール用のコンテナが起動したらファイルを送ります
-
docker cp allaccess.json mc:/
そしてポリシーを登録します
-
mc alias set myminio http://172.17.0.1:9000 admin password
- mc admin policy add myminio admin allaccess.json
上記の場合 1. 先程起動した MinIO を myminio という名前で登録 2. myminio の admin グループに allaccess.json のポリシーを登録という流れになります
なのでもし Onelogin から送られてくる groups 情報に admin ではなく別のグループ名が含まれている場合は admin の部分を適当なグループ名に変更してポリシー登録してください
Onelogin 側の設定
Onelogin 側ではコールバック用の URL を追加するくらいかなと思います
詳しい設定方法や認証情報の確認方法は過去に紹介しているのでそちらを参照してください
動作確認ログイン
localhost:9100 にアクセスするとログインボタンが表示されます
クリックすると Onelogin のログイン画面に遷移するのでログインしましょう
トラブルシューティング
おそらく一番目にするのは Policy claim missing from the JWT token, credentials will not be generated
というエラーかなと思います
これは Onelogin から送られてきたトークン情報に policy
というフィールドがないから MinIO 内で使用するポリシー情報を割り当てられませんというエラーになります
この policy という値をコントロールするのが MINIO_IDENTITY_OPENID_CLAIM_NAME になります
Onelogin では policy フィールドはトークンに含まれていません
なので groups フィールドを使うために MINIO_IDENTITY_OPENID_CLAIM_NAME=gropus にしています
IdP から送られてくるトークン情報をデバッグする方法は以下のコマンドで実行することで確認できます
- mc admin trace -v -a myminio
WebIdentityToken というフィールドがJSONトークン情報になります
トークン情報はエンコードされているのでデコードして確認してください
最後に
MinIO で OpenIDConnect に接続する方法を紹介しました
IdP 側が送信するトークン情報に応じて対応が少し異なるので注意が必要です
IdP 側から直接ポリシー情報を送信することもできるようです
0 件のコメント:
コメントを投稿