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スタックのクイック作成ができます。
作成前にパラメーターとして、以下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の構築ができたので、KeycloakをDockerで動かします。こちらの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との連携あたりを検証したいと思います。