構築した経緯
セキュリティのためAzureでアカウント一元管理したい&Azureにログインを任せたいっていう要望が来たため
検証環境
- Azure(ActiveDirectoryの管理)
- Vagrant+VirtualBoxで作ったCentOS7環境でGitLab
前提
GitLabに関してはVagrant+VirtualBoxで作成(CentOS7 ホストが192.168.10.210 443を22443にポートフォワード)
Azure側
Azureポータルサイト 表示をクリック
サイドバーのエンタープライズアプリケーションをクリック
新しいアプリケーションをクリックして管理用アプリケーション作成する(ここは会社の管理アカウントでないとできないため私作ってないので割愛)
作ったアプリケーションをクリック後 シングルサインオンをクリック
(なんか初期アクセス時UI違った気がする…SAMLをクリックした気がする)
基本的なSAML構成を下記のとおりにする(※識別子は白で塗りつぶしてますが入力はしてます)&識別子はメモっておく
SAML署名証明書の証明書(Base64)をDLしておく&拇印はメモっておく
ログインURLとログアウトURLをメモっておく
ユーザーとグループの割当でログインするユーザーを登録しておく(詳細割愛)
GitLab側
インストールに関しては割愛
※セルフマネージドGitLabをインストールを参考にしたらよいかと
前提
Azureでログインする際のメールアドレス(今回のサンプルではhoge@example.jp)をGitLab側のユーザー作成において登録してることを前提にしてます(GitLab側のユーザーパスワードは覚えておく必要はないです)
SAML設定
SAML OmniAuth Providerを参考にする
/etc/gitlab/gitlab.rb(一部抜粋)
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = true
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
{
name: 'saml',
args: {
assertion_consumer_service_url: 'https://192.168.10.210:22443/users/auth/saml/callback',
idp_cert_fingerprint: '拇印を2文字単位で:を入れたやつ',
idp_sso_target_url: 'メモったログインURL',
idp_slo_target_url: 'メモったログアウトURL',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent'
},
label: 'Company Login' # optional label for SAML login button, defaults to "Saml"
}
]
ログインしてみる
ログイン画面にCompany Login
があるので押すとAzure認証ページに飛ぶ
これだけだと
ChromeのSAML-trace拡張機能で調べると
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>hoge@example.jp</AttributeValue>
</Attribute>
</AttributeStatement>
ってなってたので
/etc/gitlab/gitlab.rb(一部抜粋)
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml']
gitlab_rails['omniauth_block_auto_created_users'] = true
gitlab_rails['omniauth_auto_link_saml_user'] = true
gitlab_rails['omniauth_providers'] = [
{
name: 'saml',
args: {
assertion_consumer_service_url: 'https://192.168.10.210:22443/users/auth/saml/callback',
idp_cert_fingerprint: '拇印を2文字単位で:を入れたやつ',
idp_sso_target_url: 'メモったログインURL',
idp_slo_target_url: 'メモったログアウトURL',
idp_cert: 'DLした証明書(Base64)の中身をコピペ',
issuer: 'メモった識別子',
name_identifier_format: 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
attribute_statements: { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name'] }
},
label: 'Company Login' # optional label for SAML login button, defaults to "Saml"
}
]
でログインできた