OpenShift v4の認証(web/oc login
)に、GitLab CEの認証情報を使うための設定手順。
前提
GitLab CEはhttpsで構築してあり、証明書も(オレオレ認証局で良いので)設定してあること。(手元にcrtファイルがあること)
平たく言うと、以下の記事で構築したGitLab CEを前提にしている。
httpsで通信しつつ証明書の検証も行う必要がある。(この設定ができてないとx509エラーになる/insecure設定があるのかはわからなかった)
OpenShift側は、記事中はOKD4.4で確認。
ドキュメントはこちら。
v3編はこちら
決めごと
OCPクラスタ+GitLabの設定に使うアイデンティティープロバイダのアイデンティティ名を決める。
この記事ではgitlabauth
としている。
設定内のgitlabauth
は全てこのアイデンティティープロバイダのアイデンティティ名を当てはめる。
複数の認証方式を併用する場合はここで決めた名前を選択することになるのでprivate-gitlab-ce-auth
とかの方が分かりやすいかもしれない。
GitLab CEのアプリケーション設定
ログインしてこのSettingsから、
Applicationsを開く。
Add new applicationで次のように入力。
項目 | 内容 |
---|---|
Name | OCP v4 auth (など、見てわかる文言で) |
Redirect URI | 下記参照 |
Scopes | openid にチェック(他は不要) |
Redirect URIは、oc get route -n openshift-authentication
で得られる認証用のrouteドメインをベースに、以下を入力する。
末尾のgitlabauth
が最初に決めたアイデンティティープロバイダのアイデンティティ名。
https://oauth-openshift.apps.<cluster-name>.<cluster-domain>/oauth2callback/gitlabauth
作成されたApplication ID
とSecret
をOpenShfit側で使用する。
OpenShiftの設定
secret作成
GitLab CEで作成したSecret値を持つsecretリソースをclientSecret
というキーでopenshift-configネームスペースに作成する。(表現紛らわしいけど)
$ secret=<GitLab CE上で作成したSecretの値> $ secret_name=gitlab-oauth-secret $ oc create secret generic ${secret_name} --from-literal=clientSecret=${secret} -n openshift-config
ここではgitlab-oauth-secret
という名前のsecretリソースを作成しているが、後述のoauthカスタムリソースの設定と合っていれば名称は何でも良い。
認証局のconfigmap作成
secretと同じ要領で、HTTPSアクセス用の認証局のファイルの内容を持つconfigmapリソースを作成する。
GitLab CEの証明書のcrtファイルがcert/gitlab-ce.example.org.crt
にあれば、--from-file
でパスを指定し、ca.crt
というキーでデータをセットする。
$ cert_path=~/gitlab-cert/gitlab-ce.example.org.crt $ cm_name=gitlab-oauth-config $ oc create configmap ${cm_name} --from-file=ca.crt=${cert_path} -n openshift-config
ここではgitlab-oauth-config
という名前のconfigmapリソースを作成しているが、後述のoauthカスタムリソースの設定と合っていれば名称は何でも良い。
カスタムリソースマニフェスト
Secret値と認証局のデータを持つsecretリソースとconfigmapリソースを作成したら、GitLabアイデンティティープロバイダ用のカスタムリソースを作成する。
apiVersion: config.openshift.io/v1 kind: OAuth metadata: name: cluster spec: identityProviders: - name: gitlabauth # アイデンティティ名 mappingMethod: claim type: GitLab gitlab: clientID: ............................ # GitLab CEのApplication IDの値 clientSecret: name: gitlab-oauth-secret # Secret値のsecretリソース名 url: https://gitlab-ce.example.org:8443/ # 認証に使用するGitLab CEのURL ca: name: gitlab-oauth-config # 認証局のconfigmapリソース名
ファイルができたらapply
する
[zaki@okd4-manager gitlab-auth]$ oc apply -f oauth-custom-resource.yaml Warning: oc apply should be used on resource created by either oc create --save-config or oc apply oauth.config.openshift.io/cluster configured
web認証
認証されてない状態でwebコンソールにアクセスすると、(既存の認証方式があれば、それに追加する形で)このようにアイデンティティ名が表示されて認証方式を選択する画面になる。
(認証済みの場合は一度ログアウトする)
GitLab CEを使った認証であるgitlabauth
をクリックすると、GitLab CEの認証画面に遷移し、そこで認証するとOpenShiftの認証との連携許可を求める画面になるのでAuthorizeする。
そうすればOpenShiftにログインできる。
なお、ロールは何も与えられてないので、管理権限が必要であれば別途oc adm policy add-role-to-user
などで設定する。
一度認証すると、OpenShift上でもuserとidentitiesが作成される。
[zaki@okd4-manager gitlab-auth]$ oc get user NAME UID FULL NAME IDENTITIES zaki ********-f761-4d7e-a561-************ zaki gitlabauth:2 [zaki@okd4-manager gitlab-auth]$ oc get identities NAME IDP NAME IDP USER NAME USER NAME USER UID gitlabauth:2 gitlabauth 2 zaki ********-f761-4d7e-a561-************
(IDを伏せる必要あるかわからんけどとりあえず…)
クローズドな開発環境でプライベートネットワーク上にGitLab CEがあるなら、htpasswdよりもこれを使うとユーザ管理は楽かなーと。
(それを運用するようなチームにいないけど…)
identityProviders
はリストなので、認証方式はhtpasswdやGitHubなど複数のものを併用可能。
上のwebコンソールの画面のように、ログイン時に選択するUIとなる。
CLI認証
CLIだとクラスタに設定した証明書が無視されて認証できない…
[zaki@okd4-manager ~]$ oc login -u zaki error: x509: certificate signed by unknown authority
crtファイルを指定すれば行けた
[zaki@okd4-manager ~]$ oc login -u zaki --certificate-authority=/home/zaki/gitlab-cert/gitlab-ce.example.org.crt The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): y Authentication required for https://api.okd4.naru.jp-z.jp:6443 (openshift) Username: zaki Password: Login successful. You don't have any projects. You can try to create a new project, by running oc new-project <projectname> [zaki@okd4-manager ~]$
次回以降は省略可能。
[zaki@okd4-manager ~]$ oc whoami zaki [zaki@okd4-manager ~]$ oc login -u system:admin Logged into "https://api.okd4.naru.jp-z.jp:6443" as "system:admin" using existing credentials. You have access to 58 projects, the list has been suppressed. You can list all projects with 'oc projects' Using project "default". [zaki@okd4-manager ~]$ [zaki@okd4-manager ~]$ [zaki@okd4-manager ~]$ oc login -u zaki Logged into "https://api.okd4.naru.jp-z.jp:6443" as "zaki" using existing credentials. You don't have any projects. You can try to create a new project, by running oc new-project <projectname> [zaki@okd4-manager ~]$
クラスタでなくOSの証明書情報を見ていたのかな。
参考図書にKindle Unlimitedだと現在0円のGitLab実践ガイドもどうぞ