Terraformでkeycloakの設定を色々投入する話
はじめに
この記事は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