🐙

Terraformでkeycloakの設定を色々投入する話

2021/12/13に公開

はじめに

この記事はterraform Advent Calendar 2021の14日目です。
AWSやGCPなどのクラウドへ利用されることが多いTerraformですが、この記事ではkeycloakの設定について書いていきます。
蛇足ですが、KeycloakとはOSSのアイデンティティ・アクセス管理ソフトウェアです。

keycloak providerについて

導入方法などは、keycloak providerのページをご覧ください。
一ヶ月ほど前に更新がなされているので、古いので使えないということはないかなと思います(2021年12月現在)

いくつか情報を登録してみる

ベース部分の設定を投入する

このコードを実行すると、管理者権限ユーザの作成(パスワード認証)とMaster realmが作成されます。
また、internationalizationのsupported_localesを利用することで言語設定ができます。

terraform {
  required_version = "~> 0.13"

  required_providers {
    keycloak = {
      source  = "mrparkers/keycloak"
      version = "~> 2.0"
    }
  }
}

provider "keycloak" {
  url       = "http://keycloak:8080"
  client_id = "admin-cli"
  username  = "admin"
  password  = "admin"
}

resource "keycloak_realm" "master" {
  realm = "master"

  internationalization {
    supported_locales = [
      "ja",
      "en",
    ]
    default_locale = "ja"
  }
}

realm作成とユーザ登録

試しにテスト用realmとユーザの登録を行なってみます。

resource "keycloak_realm" "test_realm" {
  realm = "test_realm"
}

resource "keycloak_user" "test_user" {
  realm_id = keycloak_realm.test_realm.id
  username = "mendako"
  enabled = true

  email = "Mendako@sample.email.address.io"
  first_name = "Opisthoteuthis"
  last_name = "Depressa"

}

OIDCプロバイダーを作成する

keycloakでは、OIDCを利用して認証を行うことができます。
ここではlocalhost:8000で動作しているアプリケーションにて、OIDCでの認証をシークレットを利用して行う場合の設定を例にします。
なお、シークレットを利用しない認証方法もaccess_typeを変更することで設定可能です(詳細はドキュメントをご覧ください)

resource "keycloak_openid_client" "openid_client" {
  realm_id            = keycloak_realm.master.id
  client_id           = "testapp"
  name                = "test_client"
  enabled             = true
  access_type         = "CONFIDENTIAL"
  standard_flow_enabled = "true"
  implicit_flow_enabled = "true"

  root_url = "http://localhost:8000"
  admin_url = "http://localhost:8000"
  web_origins = ["http://localhost:8000"]
  valid_redirect_uris = [
    "http://localhost:8000/*"
  ]

  login_theme = "keycloak"
}

ローカル環境で動かしてみる

別の記事で軽く紹介しましたが、keycloak&terraformをローカルで動かす環境をdocker-composeで作成しました。
terraform/main.tfで色々な設定変更を行うことができます。

おわりに

ざっくりとですがいくつかの情報を投入するサンプルコードを示しました。
ちなみにですが、keycloakではrealm.jsonを利用してコードベースで設定を投入することが可能です。
ですが、Terraformを利用した方が人間が管理しやすい&可読性が高く保てるのではないかなと感じています。
Terraformには他にも色々なProviderがあるので、試してみたいなと思うのと同時に、一度はProviderを作ってみたいなと思っています。

Discussion