Keystone Keycloak Entegrasyonu
Erenalp Tekşen

Erenalp Tekşen @erenalpteksen

About: Junior Backend Developer

Joined:
Mar 15, 2024

Keystone Keycloak Entegrasyonu

Publish Date: Jul 4
1 0

Giriş

Bu doküman, bir kimlik sağlayıcı olan Keycloak ile bulut yönetim platformu OpenStack Keystone arasında OpenID Connect (OIDC) protokolü kullanılarak federated authentication (federasyon tabanlı kimlik doğrulama) entegrasyonunu anlatır.

Temel Kavramlar:

  • Keycloak: Açık kaynaklı bir kimlik ve erişim yönetimi çözümüdür. Kullanıcı kimlik doğrulama, yetkilendirme, kullanıcı profili yönetimi gibi işlemleri sağlar.
  • OpenStack Keystone: OpenStack’in kimlik yönetimi servisidir. Kullanıcıların, projelerin ve rollerin doğrulanmasından sorumludur.
  • OpenID Connect (OIDC): OAuth 2.0 protokolünün kimlik doğrulama katmanıdır. Keycloak gibi OIDC sağlayıcıları, OpenStack gibi uygulamalara kullanıcı kimlik doğrulama imkanı sunar.

Keycloak – OpenStack Keystone OpenID Connect Entegrasyonu Rehberi

Genel Bilgilendirme

Bu dökümanda geçen örnek domain adresleri:

  • auth.keycloak.local: Keycloak sunucusunun HTTPS üzerinden erişilebilir alan adıdır. Gerçek ortamda bu adres, sizin Keycloak kurulumunuzun erişilebilir FQDN (tam nitelikli alan adı) olmalıdır.
  • dlp.srv.world: OpenStack Keystone ve Horizon servislerinin HTTPS ile sunulduğu alan adıdır. Bu da sizin ortamınıza uygun bir şekilde DNS ile çözülmelidir. Eğer DNS yoksa /etc/hosts ile eşleştirme yapılabilir.

Her iki servis de HTTPS ile çalışmalı ve geçerli sertifikalarla (self-signed ya da CA imzalı) yapılandırılmış olmalıdır.

Bu döküman, Keycloak kimlik sağlayıcısını kullanarak OpenStack Keystone ile OpenID Connect (OIDC) tabanlı federated authentication yapılandırmasını anlatır. Bu sayede kullanıcılar, Horizon arayüzü veya CLI üzerinden Keycloak ile OpenStack'e giriş yapabilir.


Ön Gereksinimler

  • HTTPS yapılandırılmış bir Keycloak sunucusu

    (Self-signed veya geçerli bir SSL sertifikası ile)

  • HTTPS yapılandırılmış bir OpenStack Horizon servisi

    (Sadece CLI kullanılacaksa Horizon gerekmez)


1. Adım: Keycloak Yapılandırması

Client Oluşturma

Keycloak arayüzünde aşağıdaki şekilde keystone adlı bir client oluşturulmalıdır:

Image description

Client Yapılandırması

PKCE Ayarı

  • Code Challenge Method: S256

PKCE

User Attribute Tanımları

Keycloak > Realm Settings > User Profile alanından aşağıdaki attribute'lar eklenmelidir:

  • openstack-user-domain
  • openstack-default-project

User Attributes

Client Scope ve Mapper

  • keystone adlı bir Client Scope oluşturun
  • Mapper olarak aşağıdaki iki alan tanımlanmalı:
    • openstack-user-domain
    • openstack-default-project

Mapper

Kullanıcı Attribute'leri

Her kullanıcı için yukarıdaki attribütler manuel olarak doldurulmalıdır:

User Attributes


2. Adım: Keystone Yapılandırması

Identity Provider Tanımı

openstack identity provider create --remote-id https://auth.keycloak.local/realms/master keycloak
Enter fullscreen mode Exit fullscreen mode

Mapping Tanımı (mapping.json)

[
  {
    "local": [
      {
        "user": {
          "name": "{0}",
          "email": "{1}",
          "domain": {
            "name": "{2}"
          }
        },
        "domain": {
          "name": "{2}"
        },
        "projects": [
          {
            "name": "{3}",
            "roles": [
              {
                "name": "member"
              }
            ]
          }
        ]
      }
    ],
    "remote": [
      { "type": "OIDC-preferred_username" },
      { "type": "OIDC-email" },
      { "type": "OIDC-openstack-user-domain" },
      { "type": "OIDC-openstack-default-project" }
    ]
  }
]
Enter fullscreen mode Exit fullscreen mode

Mapping Oluşturma

openstack mapping create --rules mapping.json mymapping
Enter fullscreen mode Exit fullscreen mode

Protocol Oluşturma

openstack federation protocol create openid --mapping mymapping --identity-provider keycloak
Enter fullscreen mode Exit fullscreen mode

3. Adım: Apache OIDC Konfigürasyonu

Apache sunucusundaki uygun .conf dosyasına aşağıdaki satırlar eklenmelidir:

OIDCSSLValidateServer Off
OIDCOAuthSSLValidateServer Off
OIDCCookieSameSite Off
WSGIPassAuthorization On

OIDCStateTimeout 300
OIDCClaimPrefix "OIDC-"
OIDCResponseType "id_token token"
OIDCScope "openid email profile"
OIDCProviderMetadataURL "https://auth.keycloak.local/realms/master/.well-known/openid-configuration"
OIDCClientID "keystone"
OIDCClientSecret "<KEYCLOAK_CLIENT_SECRET>"

OIDCPKCEMethod "S256"
OIDCCryptoPassphrase "openstack"
OIDCRedirectURI "https://dlp.srv.world:5000/v3/auth/OS-FEDERATION/websso/openid"
OIDCOAuthVerifyJwksUri "https://auth.keycloak.local/realms/master/protocol/openid-connect/certs"

<Location "/v3/auth/OS-FEDERATION/websso/openid">
    AuthType "openid-connect"
    Require valid-user
</Location>

<Location "/v3/auth/OS-FEDERATION/identity_providers/keycloak/protocols/openid/websso">
    AuthType "openid-connect"
    Require claim preferred_username
</Location>

<Location "/v3/auth/OS-FEDERATION/identity_providers/keycloak/protocols/openid/auth">
    AuthType "openid-connect"
    Require valid-user
</Location>

LogLevel auth_openidc:debug
Enter fullscreen mode Exit fullscreen mode

4. Adım: Keystone Konfigürasyonu

/etc/keystone/keystone.conf içerisine aşağıdakiler eklenmelidir:

[auth]
methods = password,token,openid

[federation]
remote_id_attribute = HTTP_OIDC_ISS
trusted_dashboard = https://dlp.srv.world/horizon/auth/websso/
Enter fullscreen mode Exit fullscreen mode
systemctl restart apache2
Enter fullscreen mode Exit fullscreen mode

5. Adım: Horizon Entegrasyonu

/etc/openstack-dashboard/local_settings.py dosyasının sonuna ekleyin:

WEBSSO_ENABLED = True
WEBSSO_INITIAL_CHOICE = "OIDC"

WEBSSO_CHOICES = (
    ("OIDC", "Login with Keycloak"),
    ("credentials", "Keystone Credentials"),
)

WEBSSO_IDP_MAPPING = {
    "OIDC": ("keycloak", "openid")
}

OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"

OPENSTACK_API_VERSIONS = {
    "identity": 3,
}

REMOTE_USER_CLAIM = "OIDC-preferred_username"
Enter fullscreen mode Exit fullscreen mode
systemctl restart apache2
Enter fullscreen mode Exit fullscreen mode

Horizon arayüzünde "Login with Keycloak" ile giriş yapılabilir.

Image description


Sonuç

Bu yapılandırma sayesinde kullanıcılar, OpenStack Horizon arayüzünden Keycloak hesabı ile giriş yapabilir. Aynı zamanda CLI üzerinden federated token kullanarak OpenStack kaynaklarına erişim sağlanabilir.


Resource Owner Password Credentials Grant (CLI Üzerinden Erişim)

Eğer Horizon yerine CLI ile erişim tercih edilecekse v3oidcpassword yöntemi kullanılabilir. Bunun için aşağıdaki örnekteki gibi bir clouds.yaml dosyası oluşturulmalıdır:

clouds:
  federated:
    auth_type: v3oidcpassword
    auth:
      auth_url: https://dlp.srv.world:5000
      username: admin
      password: admin
      identity_provider: keycloak
      protocol: openid
      client_id: keystone
      client_secret: cbFMos3ehMrxvOg0MYEA8gomVdCWj5wR
      discovery_endpoint: https://auth.keycloak.local/realms/master/.well-known/openid-configuration
      project_name: demo
      project_domain_name: Default
    verify: false
Enter fullscreen mode Exit fullscreen mode

CLI Komutu ile Giriş:

openstack --os-cloud federated token issue
Enter fullscreen mode Exit fullscreen mode

Bu komut başarılı olursa Keycloak üzerinden federated kullanıcı ile kimlik doğrulama sağlanmış olacaktır.

Comments 0 total

    Add comment