電話番号 電話番号 お問い合わせ

受付時間 平日10:00~18:00

TOP

資料ダウンロードはこちら >>

ロゴ

AWSやシステム・アプリ開発の最新情報|クロスパワーブログ

AWS SSO

KEYCLOAKを利用したAWSへのSSO接続

デバイスと鍵

こんにちは。katoです。

 

今回はKeycloakを利用した、AWSマネジメントコンソールへのSSO接続の設定方法についてご紹介させていただきます。

 

概要

 

Keycloakは、OneLoginやShibbolethのようにSSOを実現する認証ソフトウェアとなっております。

 

https://www.keycloak.org/

 

KeycloakはRed Hatにより開発が進められているOSSとなっており、2014年リリースの新しいソリューションになっております。

 

今回はこのKeycloakを利用して、AWSへのSSO接続を行っていきたいと思います。

 

インストール

 

今回はAWS上のAmazon LinuxにKeycloakをインストールして利用してきます。

 

利用するインスタンスはEIPを付与し、Route 53で名前解決可能なよう設定しておきます。

 

上記設定が完了したらインスタンスにSSHし、Keycloakのインストールを行っていきます。

 

インストールに関しては、通常のインストールと方法は変わりません。

必要パッケージをインストールしてスクリプトを叩くだけです。

 

# yum install unzip git wget
# wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
# rpm -ihv jdk-8u131-linux-x64.rpm
# cd /opt
# wget http://ftp.riken.jp/net/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
# tar xzvf apache-maven-3.5.2-bin.tar.gz
# mv apache-maven{-3.5.2,}
# cat << "EOF" >> ~/.bash_profile
export JAVA_HOME=/usr/java/default/
export PATH=$PATH:/opt/apache-maven/bin
EOF
# . ~/.bash_profile
# wget https://downloads.jboss.org/keycloak/3.3.0.Final/keycloak-3.3.0.Final.zip
# unzip keycloak-3.3.0.Final.zip
# cd keycloak-3.3.0.Final
# sed -i.bk '{s/127.0.0.1/<your-public-ip>/g}' standalone/configuration/standalone.xml
# bin/add-user-keycloak.sh -u admin -p <password>
# bin/standalone.sh -b 0.0.0.0 -bmanagement=<your-private-ip>

 

最後のコマンド実行後、下記のような一文が表示されればKeycloakの起動が完了です。

 

INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 3.3.0.Final (WildFly Core 3.0.8.Final) started in 27980ms – Started 534 of 856 services (570 services are lazy, passive or on-demand)

 

SSO設定

 

インストールが完了したので、WEBブラウザでアクセスしてみましょう。

 

今回はRoute53で名前解決できるようにしているので、URLは下記の様になります。

 

http://<FQDN>:8080

 

アクセスすると以下の様な画面が表示されるので、「Administration Console」をクリックします。

 

 

上記操作を行うとKeycloakのログインページに飛ぶのですが、おそらく下記のような画面が表示されると思います。

 

 

Keycloakはデフォルトで、パブリックIPでのアクセスにSSLを強制しているようなのです。

 

プライベートIPでのアクセスは許可されているので、今回はAWS上にアクセス用のWindowsサーバを一時的に立てて、そこからアクセスしてみます。

 

URLは下記の様になります。

 

http://<your-private-ip>:8080

 

 

無事ログイン画面が表示されました。

 

インストール時に指定したadminのアクセス情報でログインします。

 

ログインができたら、「Login」タブを開き、「Require SSL」を「none」に設定します。

 

 

上記設定によりパブリックIPでのアクセスが可能になります。

 

 

ここから実際にSSOの設定を行っていきます。

 

まず、サイドメニューから「Clients」を選択し、「Create」をクリックします。

 

「Select file」をクリックし、下記リンクのxmlファイルをインポートします。

 

https://signin.aws.amazon.com/static/saml-metadata.xml

 

上記はAWSの提供しているsaml-metadataのテンプレートになります。

 

上記ファイルをインポートし、「Save」をクリックすると、「Urn:amazon:webservices」という名のクライアントが作成されます。

 

クライアントの作成後、「Settings」タブを開き、下記3箇所の設定を行います。

 

・RootURL: http://<FQDN>:8080

・BaseURL: /auth/realms/master/protocol/saml/clients/amazon-aws

・IDP Initiated SSO URL Name: amazon-aws

 

 

次に、「Installation」タブを開き、「SAML Metadata IDPSSODescriptor」を選択します。

xmlが表示されるので、「Download」をクリックし、ファイルをダウンロードします。

 

 

ファイルのダウンロードが完了したら、AWS側でIAMの設定を行います。

 

IAMのサービスページを開き、IDプロバイダーの作成を行います。

 

プロバイダーのタイプに「SAML」を選択し、先ほどダウンロードしたxmlファイルをメタデータドキュメントとして指定します。

 

 

IDプロバイダーの作成後、下記の様にロールの作成を行います。

 

 

ここで作成したロールが、KeycloakからSSO接続した後に割り当てられるロールになります。

 

今回はEC2とS3のそれぞれの権限を付与したロールを作成しました。

 

 

以上で、AWS側の設定は完了になります。

 

続いて、作成したroleとKeycloakの関連付けを行います。

 

クライアントの「Roles」タブを開き、「Add Role」をクリックします。

「Role Name」に下記を指定し、「Save」をクリックします。

 

<IAM-Role-ARN>,<saml-provider-ARN>

例) arn:aws:iam::12345678912345:role/keycloak-ec2,arn:aws:iam::12345678912345:saml-provider/keycloak

 

 

今回はEC2とS3のIAM Roleを作成したので、下記の様にRoleを作成します。

 

 

次に、「Mappers」タブを開き、下記3つのMapperを作成します。

 

①Session Role

・Name: Session Role

・Mapper Type: Role list

・Role attribute name: https://aws.amazon.com/SAML/Attributes/Role

・Friendly Name: Session Role

・SAML Attribute Name Format: Basic

・Single Role Attribute: ON

 

 

 

②Session Name

・Name: Session Name

・Mapper Type: User Property

・Property: username

・Friendly Name: Session Name

・SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/RoleSessionName

・SAML Attribute Name Format: Basic

 

 

③Session Duration

・Name: Session Duration

・Mapper Type: Hardcoded attribute

・Friendly Name: Session Duration

・SAML Attribute Name: https://aws.amazon.com/SAML/Attributes/SessionDuration

・SAML Attribute Name Format: Basic

・Attribute value: 28800

 

 

3つのmapperを作成したら、最初から存在していた「role list」という名前のmapperを削除します。

このmapperが残っていると、AWSへのsamlレスポンスが正しく行われないので注意して下さい。

 

次に、「Scope」タブを開き、「Full Scope Allowwd」を「OFF」に設定します。

 

 

最後に、Keycloakのユーザを作成し、Roleの割り当てを行います。

ユーザ作成はサイドメニューの「Users」を選択し、「Add  user」をクリックすることで行えます。

 

 

ユーザ作成後、「Credentials」タブからパスワードの設定を行います。

 

 

「Role Mapping」タブから割当てるRoleをassignすれば完了です。

 

今回は、EC2ユーザとS3ユーザを作成したので、下記のようにそれぞれ設定します。

 

 

 

 

以上でKeycloakのSSO接続設定は完了になります。

 

動作確認

 

それでは実際にKeycloakからAWSにSSO接続してみましょう。

 

adminをlogoutして下記のURLにアクセスします。

 

http://http://<FQDN>:8080/auth/realms/master/protocol/saml/clients/amazon-aws

 

上記URLにアクセスすると、Keycloakのログイン画面が表示されます。

ここで、Roleを付与したKeycloakのユーザ名とパスワードを指定します。

 

 

無事AWSマネジメントコンソールにログインすることが出来ました。

roleも正しく割り当てられています。

 

 

 

また、以下のように複数のRoleをKeycloakユーザに割り当てることで、ログイン時にRoleの選択が可能になります。

 

 

まとめ

 

今回Keycloakを扱ってみて、設定には苦労しましたが、AWSへのSSO接続をOSSで実現できる点には魅力を感じました。

また、Keycloakは新しい製品であるため、開発やコミュニティの活動も活発に行われているようで、将来性に期待が持てます。

 

現在はドキュメントや記事が少し不足しているので、導入時の設定で躓く箇所がいくつかあると思いますが、設定さえ完了すればGUI操作で簡単にSSOを実現できる優れた製品です。

 

SSOの導入や他の製品からの乗り換えを行う場合には、Keycloakの導入をご検討してみてはいかがでしょうか。