GeekFactory

int128.hatenablog.com

KeycloakのSAML SSOでJIRAやConfluenceにログインする

KeycloakとJIRAやConfluenceでSAML SSOを設定する方法を説明します。KeycloakでID管理を行いながら、JIRAやConfluenceにSSOできるので便利です。

TL;DR

JIRA Software

Keycloakで新しいClientを追加します。認証連携したいユーザがいるRealmで作業してください。

  • クライアントID: https://jira.example.com:443/jiraSAML
  • クライアントプロトコル: saml
  • クライアント署名が必須: OFF
  • ルート URL: https://jira.example.com
  • 有効なリダイレクト URI: https://jira.example.com/*
  • マッパー
    • SAML属性 cn → User Property username
    • SAML属性 mail → User Property email

Atlassian Marketplaceでは多くのSAMLアドオンが公開されています。ここでは無償で公開されている下記のアドオンをインストールします。

なお、このアドオンは最新のJIRAをサポートしていないと表示されますが、アドオンのJARをダウンロードし、JIRAの管理画面からJARをインストールすると動くようです。

JIRAの管理画面から「SAML 2.0 Plugin Configuration」を開き、以下を設定します。

  • Login URL: https://keycloak.example.com/auth/realms/YOUR_REALM/protocol/saml
  • UID Attribute: NameID
    • NameID を指定すると、Keycloakのユーザ名をそのままJIRAのユーザ名に対応付けます。
  • X.509 Certificate:
    • インストレーションでSAML Metadata IDPSSODescriptorを選択するとXMLが表示されるので、<dsig:X509Certificate> 要素に入っているBASE64文字列を入力します。
    • -----BEGIN CERTIFICATE----------END CERTIFICATE----- で囲むのをお忘れなく。
  • Entity ID: https://keycloak.example.com/auth/realms/YOUR_REALM
  • Auto-create User: ON
    • JIRA側にユーザが存在しない場合は自動的に作成します。
  • Default Group for Auto-created Users: jira-software-users
    • ユーザを自動的に作成する場合のデフォルトグループを設定します。デフォルトは一般グループにしておき、必要に応じて管理者グループを割り当てるとよいでしょう。

シークレットウィンドウでJIRAを開いてみましょう。 Use Corporate Login というボタンが追加で表示されるはずです。Keycloakを経由してJIRAにログインできれば成功です。

f:id:int128:20180626102301p:plain

なお、JIRAのデフォルトでは一般権限から管理者権限に昇格する際にパスワードを確認されます。SSOでログインしたユーザはパスワードを持っていないため、このままでは管理者権限に昇格できない問題があります。一般権限から管理者権限に昇格する際のパスワード確認を無効化するため、JVM引数に -Djira.websudo.is.disabled=true を追加しておきます*1

        - name: JAVA_OPTS
          value: "-Djira.websudo.is.disabled=true"

Confluence

上記と同様に、Keycloakで新しいClientを追加します。

  • クライアントID: https://confluence.example.com:443/confluenceSAML
  • クライアントプロトコル: saml
  • クライアント署名が必須: OFF
  • ルート URL: https://confluence.example.com
  • 有効なリダイレクト URI: https://confluence.example.com/*
  • マッパー
    • SAML属性 cn → User Property username
    • SAML属性 mail → User Property email

Atlassian Marketplaceでは多くのSAMLアドオンが公開されています。ここでは無償で公開されている下記のアドオンをインストールします。

Confluenceの管理画面から「SAML 2.0 Plugin Configuration」を開き、以下を設定します。

  • Login URL: https://keycloak.example.com/auth/realms/YOUR_REALM/protocol/saml
  • Logout URL: https://keycloak.example.com/auth/realms/YOUR_REALM/protocol/saml
  • X.509 Certificate:
    • インストレーションでSAML Metadata IDPSSODescriptorを選択するとXMLが表示されるので、<dsig:X509Certificate> 要素に入っているBASE64文字列を入力します。
    • -----BEGIN CERTIFICATE----------END CERTIFICATE----- で囲むのをお忘れなく。
  • Entity ID: https://keycloak.example.com/auth/realms/YOUR_REALM
  • Redirect URL: https://confluence.example.com
  • Auto-create User: ON
    • Confluence側にユーザが存在しない場合は自動的に作成します。
  • Default Group for Auto-created Users: confluence-users
    • ユーザを自動的に作成する場合のデフォルトグループを設定します。デフォルトは一般グループにしておき、必要に応じて管理者グループを割り当てるとよいでしょう。

シークレットウィンドウでConfluenceを開いてみましょう。 Use Corporate Login というボタンが追加で表示されるはずです。Keycloakを経由してConfluenceにログインできれば成功です。

なお、Confluenceのデフォルトでは一般権限から管理者権限に昇格する際にパスワードを確認されます。JIRAと同様に一般権限から管理者権限に昇格する際のパスワード確認を無効化しておきます。Confluenceの管理画面を開き、Security ConfigurationでSecure administrator sessionsのチェックを外します*2

まとめ

  • KeycloakでSAML Clientsを作成する。
  • JIRA SoftwareにSAML 2.0 Single Sign-On for Jiraプラグインをインストールし、SAMLを設定する。
  • ConfluenceにSAML 2.0 Single Sign-On for Confluenceプラグインをインストールし、SAMLを設定する。

kubectl completionの遅延実行によるzshの起動時間短縮

kubectl にはシェルの補完機能が用意されています。 .zshrc で補完機能を有効化するとzshの起動に時間がかかるため、補完機能の有効化を遅延実行するようにしてみました。

具体的には、 kubectl コマンドの初回実行時のみ source <(kubectl completion zsh) を実行します。

function kubectl () {
  local kubectl="$(whence -p kubectl 2> /dev/null)"
  [ -z "$_lazy_kubectl_completion" ] && {
    echo "\e[31m$0 completion zsh\e[0m" > /dev/stderr
    source <("$kubectl" completion zsh)
    _lazy_kubectl_completion=1
  }
  "$kubectl" "$@"
}

初回実行時:

% time ( kubectl )
kubectl completion zsh
kubectl controls the Kubernetes cluster manager.
...
( kubectl; )  0.98s user 0.38s system 115% cpu 1.168 total

2回目以降:

% time ( _lazy_kubectl_completion=1 kubectl )
kubectl controls the Kubernetes cluster manager.
...
( _lazy_kubectl_completion=1 kubectl; )  0.13s user 0.02s system 111% cpu 0.141 total

zshの起動に1秒近くかかってしまう問題を解決できました。もっとスマートな解決法を知っていたら教えてください。


入門 Kubernetes

入門 Kubernetes

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤

コンテナ・ベース・オーケストレーション Docker/Kubernetesで作るクラウド時代のシステム基盤