AWSにOpenAMを使ってSAMLでSSOしてみた

AWSマネジメントコンソールへのSAML SSOを試してみたかったので、手元にあったOpenAMとSSOをIdPとして利用してSSOしてみました。
 

SAMLメタデータ取得

まずはSAML連携に欠かせないSAMLメタデータ交換からです。AWSとOpenAMそれぞれ以下のURLからSAMLメタデータXMLファイル)をダウンロードしておきます。

AWSメタデータ取得URL

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

 

OpenAMのメタデータ取得URL

http://[OpenAM FQDN]:[Port]/openam/saml2/jsp/exportmetadata.jsp

  
 
 

SAMLメタデータインポート

ダウンロードしたSAMLメタデータAWSとOpenAMにそれぞれインポートしていきます。

AWSにOpenAMのメタデータインポート

まずはOpenAMから取得したメタデータAWSにインポートします。
AWS IAMの画面から、「IDプロバイダ」>「プロバイダの作成」をクリックします。
f:id:yomon8:20150929181650p:plain
 
プロバイダーのタイプにはSAMLを選択します。
f:id:yomon8:20150929181655p:plain
 
プロバイダ名として任意の値を入力します。今回は「MyOpenAM」としました。ファイルの選択からOpenAMから取得したSAMLメタデータファイルを選択します。
f:id:yomon8:20150929181658p:plain
 
プロバイダが作成できます。
f:id:yomon8:20150929181706p:plain
 
プロバイダの一覧に作成したプロバイダ(OpenAM)が追加されているはずです。
f:id:yomon8:20150929181711p:plain
 
 
 

OpenAMにAWSメタデータインポート

次はAWSSAMLメタデータをOpenAMにインポートしていきます。
 
OpenAMの画面から「リモートサービスプロバイダを登録」を選択します。
f:id:yomon8:20150929181858p:plain
 
今回はトラストサークルはAWSとしてます、OpenAMのSAMLメタデータをアップロードして画面右上の「設定」ボタンをクリックします。
f:id:yomon8:20150929181903p:plain
 
以下のようなポップアップが出て登録が完了します。
f:id:yomon8:20150929181911p:plain
 
SP(サービスプロバイダ)として「urn:amazon:webservices」が登録されます。
f:id:yomon8:20150929181916p:plain





SSOテスト用ユーザ作成

AWS IAMとOpenAMに今回利用するユーザとして「samluser」ユーザを作成します。

AWSにIAMユーザ作成

特に設定無しです。パスワードも無効化でもOKです。
f:id:yomon8:20150929181954p:plain

OpenAMにユーザ作成

こちらも現時点では特に設定無しです。後で少し設定修正します。
f:id:yomon8:20150929182009p:plain


AWSSAML SSO用ロール作成

AWSにSSOするためのロールを作成します。名前は任意ですが、今回は「MySAMLRole」とします。
f:id:yomon8:20150929182027p:plain
 
ロールタイプとして、「IDプロバイダアクセス用のロール」>「SAMLプロバイダへのウェブシングルサインオン(WebSSO)アクセスを付与」を選択します。
f:id:yomon8:20150929182039p:plain
 
ドロップダウンリストより先ほど登録したOpenAMのIDプロバイダを選択します。
f:id:yomon8:20150929182046p:plain
 
ロールの内容が表示されます。
f:id:yomon8:20150929182049p:plain
 
ロールにポリシーをアタッチします。今回は「ReadOnlyAccess」をアタッチしました。
f:id:yomon8:20150929182053p:plain
 
設定の確認が表示されるので、ロールを作成します。
f:id:yomon8:20150929182100p:plain
 
ロールが作成されたらロールの中を確認します。
f:id:yomon8:20150929182114p:plain
 
ロールのARNの値をメモしておきます。
f:id:yomon8:20150929182119p:plain
 
画面下側にある信頼されたエンティティの値もメモしておきます。
f:id:yomon8:20150929182130p:plain
 
以下のようになると思います。作成したIDプロバイダの名前や、ロールの名前が含まれています。12桁の番号はAWSアカウントIDです。

ロールの ARN arn:aws:iam::012345678912:role/MySAMLRole
信頼されたエンティティ arn:aws:iam::012345678912:saml-provider/MyOpenAM


この「ロールのARN」と「信頼されたエンティティ」の情報を使って特定のアカウントとSAML認証が紐付けられます。





OpenAMユーザにカスタム属性追加

「ロールのARN」と「信頼されたエンティティ」は以下のように「,」で組み合わせて使います。この属性をOpenAMのユーザに付与して、SAML連携時に使えるようにします。

arn:aws:iam::012345678912:role/MySAMLRole,arn:aws:iam::012345678912:saml-provider/MyOpenAM


本当はユーザマスタの属性を拡張した方が良いのかもしれませんが、一旦ユーザ属性のEmployee Number(従業員番号)を利用することにします。先ほど作成したSSOテスト用ユーザである「samluser」のEmployee Numberに上記の値を入力します。 
f:id:yomon8:20150929182319p:plain
  

OpenAMのSPから「urn:amazon:webservices」の設定を開き、表明処理に以下の設定を追加します。

https://aws.amazon.com/SAML/Attributes/Role=employeeNumber
https://aws.amazon.com/SAML/Attributes/RoleSessionName=uid

f:id:yomon8:20150929182315p:plain

 

SSOテストしてみる

IdP-InitiatedでのSSOをしてみます。URLは以下の通りです。

http://[OpenAM FQDN]:[Port]/openam/idpssoinit?metaAlias=/idp&spEntityID=urn:amazon:webservices


OpenAMのログオン画面が表示されますので、OpenAMの「samluser」でログオンします。
f:id:yomon8:20150929182359p:plain
 
AWSマネジメントコンソールにリダイレクトされてSSOできます。ユーザとロールが指定した通りのものになっていることが確認できます。
f:id:yomon8:20150929182404p:plain