KeycloakをALB+EC2構成で構築してみた

先日、Keycloakの環境を検証する機会があったので、構築手順をまとめました。

本ブログはその備忘録です。

Keycloakとは

KeycloakはOIDC認証等を利用してシングル・サインオンを実現するOSSです。

より詳細に知りたい方は、@ITの記事がわかりやすいので、こちらを御覧ください。

構成図

こんな感じの構成をCloudFormationで作ります。Keycloakは、EC2上のDockerで動かします。

HTTPS接続できるようにするため、ALBをSSL終端にしたいです。
証明書にはACMを利用します。
ACMを作成する場合、DNSにRoute53を利用した方が楽なので、Route53も利用します。

Route53のホストゾーンとACMだけは、マネジメントコンソールから作ります。

構築手順

Route53ホストゾーンの構築

Route53を利用するには、何かしらのドメインを所有している必要があります。 弊社ブログを参考に、無料のドメインを利用してみるのもよいと思います。

作成したホストゾーンのドメイン名はメモしておいてください。のちほどCloudFormationテンプレートで使用します。

ACMの構築

ALBで利用するためのACMを作成します。

ACM構築の詳細は、弊社ブログを御覧ください。

作成したACMのARNはメモしておいてください。のちほどCloudFormationテンプレートで使用します。

CloudFormationでALB+EC2の構築

CloudFormationで残りのAWSリソースを作成します。

以下のボタンをクリックすると、CloudFormationスタックのクイック作成ができます。

launch stack button

作成前にパラメーターとして、以下3つの項目を入力してください。

  • HostedZoneName: Route53で登録したドメイン名。末尾のピリオドは省いてください。
    (例:example.com)
  • CertificateArn: 作成したACMのARN。
    (例:arn:aws:acm:ap-northeast-1:123456789012:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  • AllowedCidr: ALBに対して接続を許可するネットワークCIDR。
    (例:192.0.2.2/32)

パラメーターを入力したら、一番下までスクロールしてIAMのチェックを入れてスタックを作成します。

CloudFormationのスタックが作成できたら、AWSリソースの構築は完了です。

セッションマネージャーでDockerを動かす

EC2の構築ができたので、KeycloakDockerで動かします。こちらのDockerイメージを利用します。

Dockerを動かすためにEC2へ接続する必要がありますが、今回はセッションマネージャーを利用します。
セッションマネージャーはざっくりいうと、ブラウザ上のシェルでEC2のCLI操作ができる機能です。詳細は弊社ブログを御覧ください。

まずはマネジメントコンソールで、Systems Managerのセッションマネージャーを開いて、セッションの開始をクリックします。

そうすると、接続可能なインスタンスが表示されるので、接続したいインスタンスを選択して、セッションを開始します。

そうすると、ブラウザでEC2インスタンスのシェルを動かすことができます。SSHクライアントいらずです。

セッションマネージャーを利用してEC2へ接続する場合、ログインユーザーは ssm-user になります。ですので、ssm-user ユーザーでDockerが使えるようにコマンドを実行して設定します。

1
$ sudo usermod -a -G docker ssm-user

コマンドを実行したら、設定を反映させるためにセッションを張り直す必要があります。
1回終了して、もう一度セッションマネージャーで新しいセッションを開始します。

新しいセッションが開始できたら、次のコマンドのパスワードを適当に変更して、Dockerでkeycloakを動かします。

1
2
3
4
5
6
7
$ PASSWORD="Password@01"
$ docker run -d \
  -p 8080:8080 \
  -e PROXY_ADDRESS_FORWARDING=true \
  -e KEYCLOAK_USER=admin \
  -e KEYCLOAK_PASSWORD=${PASSWORD} \
  jboss/keycloak:7.0.0

しばらくすると、Dockerが起動してKeycloakにログインできるようになります。

Keycloakにログインする

Route53でALBに対して、keycloak. + ドメイン名のエイリアスを作成しているので、そのURLでアクセスすることが可能です。
(ドメイン名がexample.comなら、https://keycloak.example.com/でアクセスできます。)

Docker実行時に設定したパスワードでログインすることができます。

これでKeycloakの検証環境を構築することができました。

終わりに

ALB+EC2(Docker)を使って、HTTPS接続できるKeycloakの検証環境を構築してみました。
今回はKeycloak環境を構築しましたが、セッションマネージャーで実行していたDockerイメージを変えれば別の環境にさっとすげ替えることもできます。
Dockerは検証環境の構築にも便利です。

Keycloakの方は、Cognitoとの連携あたりを検証したいと思います。

PR11月1日にオフラインイベント・Developers.IO 東京開催します
PRAWSの技術支援ならクラスメソッド