[CentOS6][OpenAM10] AWSコンソールにSSOする


Create: 2015/05/09
LastUpdate: 2015/05/10
≪ メニューに戻る

OpenAMを使用してAWSコンソールにSSOしてみます。以下のページを参考にしました。
AWSコンソールは、URLとアカウントを知られると、インターネットにアクセスできる環境なら、どこからでもログインできます。
SSOを利用すると、AWSコンソールのパスワードを知られないので、社内からSSOしないとAWSコンソールにログインできないように制限することができます。
環境は以下のとおりです。
OpenAM10.0.0の場合、OpenJDKを使用するとSAML認証がエラーになります。必ず、OracleJDKを使用してください。
[環境]
  • OS: CentOS6.6
  • M/W: Tomcat6(OS付属) / OracleJDK1.6 / OpenAM10.0.0
  • OpenAMサーバFQDN: exam01.example.com

1.OpenAMでIdP作成


[共通タスク]タブをクリックすると下図の画面が表示されます。
[ホストアイデンティティプロバイダの作成] をクリックします。



[レルム]は 最上位のレルム(/) を選択します。
[署名鍵]は、"test" を選択します。 "test" は OpenAM付属のテスト用の署名鍵なので本番運用には適していません。
[新しいトラストサークル] に "aws" を入力します。
[設定]ボタンをクリックします。



下図の画面が表示されたら IdPの作成完了です。
[終了]ボタンをクリックします。



2.OpenAM(IdP)のメタデータ取得


ブラウザで下記URLにアクセスすると、上記1で作成した IdPのメタデータが表示されるので、ファイルに保存します。
"realm=" は、レルム名を指定します。
"entityid=" は、 IdPの名前を指定します。
http://exam01.example.com:8080/openam/saml2/jsp/exportmetadata.jsp?realm=/&entityid=http://exam01.example.com:8080/openam
私は Windows に、"Sjis+CRLF" でファイルを保存しました。
最初、"UTF8+LF" で保存したのですが、下記3のIDプロバイダ作成時に parse error になりました。また、先頭行に不要な空白行があっても parse error になります。

3.AWSでIDプロバイダの作成


[IAM]サービスを開き、[IDプロバイダ]をクリックすると下図の画面が表示されます。
[プロバイダの作成]ボタンをクリックします。



[プロバイダのタイプ] は、 "SAML" を選択します。
[プロバイダ名] は、 "OpenAM" を入力します。
[ファイルの選択] をクリックして、上記2で作成したOpenAM(IdP)のメタデータを保存したファイルを設定します。



[作成] をクリックします。



作成に成功すると下図のように表示されます。
"OpenAM" をクリックします。



下図の赤枠で示した値は、後で OpenAMの設定時に使用します。



4.AWSでロールの作成


[ロール]をクリックすると下図の画面が表示されます。
[新しいロールの作成]をクリックします。



[ロール名]を入力します。
[次のステップ]をクリックします。



[IDプロバイダアクセス用のロール]をクリックすると、下図のように表示されます。
"SAML プロバイダへのウェブシングルサインオン(WebSSO)アクセスを付与"の [選択] をクリックします。



[するには] は、上記3で作成した IDプロバイダを選択します。
[次のステップ]をクリックします。



[次のステップ]をクリックします。



今回は、EC2のフルアクセス権限だけのロールを作成したいので、"AmazonEC2FullAccess" だけチェックします。
[次のステップ]をクリックします。



[ロールの作成]をクリックします。



作成に成功すると、下図のように表示されます。
作成した "EC2FULL" をクリックします。



赤枠で示した値は、あとでOpenAMの設定に使用します。


5.AWSでIAMユーザの作成


[ユーザ]をクリックすると下図の画面が表示されます。
[新規ユーザの作成]をクリックします。



[ユーザ名の入力]にユーザ名を入力します。今回は、 "ssouser1" と入力しました。
[作成]をクリックします。



[閉じる]をクリックします。
認証情報は使用しません。また、ssouser1 にはパスワードを設定する必要はありません。



6.OpenAMでSP登録


AWSをサービスプロバイダとして登録します。
[共通タスク]タブをクリックすると下図の画面が表示されます。
[リモートサービスプロバイダの登録]をクリックします。



[レルム]は、最上位のレルム(/)を選択します。
[メタデータが設置されているURL]は、"https://signin.aws.amazon.com/static/saml-metadata.xml" を入力します。
[既存のトラストサークル] は、上記1で作成した "aws" を選択します。
[設定]をクリックします。



[了解]をクリックします。



7.OpenAMでIdPの設定


OpenAMユーザとAWSユーザの連携を設定します。
[連携]タブをクリックすると下図の画面が表示されます。
"http://exam01.example.com:8080/openam" をクリックします



[表明コンテンツ]タブをクリックすると下図の画面が表示されます。
[NameIDの書式]は、"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" だけ設定します。
[NameID値マップは、"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent=employeeNumber" を設定します。
employeeNumber は、OpenAMに登録するユーザの社員番号です。 ユーザ固有の値を設定するようなので uid でもいいと思います。
[保存]をクリックします。



[表明処理]タブをクリックすると下図の画面が表示されます。
[属性マッパー]を以下のように設定します。
・https://aws.amazon.com/SAML/Attributes/Role=mail
・https://aws.amazon.com/SAML/Attributes/RoleSessionName=employeeNumber
mail は、OpenAMに登録するユーザのメールアドレスですが、今回は、メールアドレスから「ロールのARN」と「IDプロバイダのARN」の情報を取得することにします。
employeeNumber は、OpenAMに登録するユーザの社員員番号ですが、今回は、社員番号から 「AWSのIAMユーザ名」を取得することにします。
[保存]をクリックします。



8.OpenAMでユーザ登録


今回は、"demo" ユーザを使用します。demoユーザで SSOすると、AWSコンソールには ssouser1 でログインし、EC2FULL の権限を持つように設定します。
[アクセス制御]タブ > 最上位のレルム(/) > [対象] > "demo" をクリックすると下図の画面が表示されます。
今回は、[電子メールアドレス]に、ロールARNとIDプロバイダARNをカンマ区切りで入力します。
ex.) arn:aws:iam::<アカウントID>:role/EC2FULL,arn:aws:iam::<アカウントID>:saml-provider/OpenAM
今回は、社員番号に、AWSのIAMユーザ名を入力します
ex.) ssouser1
[保存]をクリックします。



9.動作確認


SP Initiated SSO はできないので、Idp Initiated SSO を行います。
ブラウザで下記URLにアクセスします。"metaAlias=" には、"[レルム名]idp" を設定します。
  • http://exam01.example.com:8080/openam/saml2/jsp/idpSSOInit.jsp?metaAlias=/idp&spEntityID=urn:amazon:webservices
下図のように OpenAMのログイン画面が表示されるので demo ユーザでログインします。



SSOに成功すると、下図のようにAWSコンソールが表示されます。
画面右上のアカウント表示を見ると、EC2FULL/ssouser1 と表示されているので、 ssouser1 でログインしていることがわかります。



ちなみに、firefox のアドオンで 「SAMLトレーサ」というのがあり、下図のように、OpenAMからAWSに渡しているSAMLの内容を見ることができます。
SSOに失敗する場合の調査に便利です。