【仕事メモ】OpenAM(Ver13) AWS管理コンソールへのSSOログイン

# 概要
前回までのOffice365へのSSOログインとは別にOpenAMを利用した、AWS管理コンソールへのSSOログインも実施してみます。

## トラストサークル(IdP)の作成
まずはOpenAM側での操作を実施します。
例のごとくトップ画面から「REALMS」-「Realm Overview」を表示します。
そして、画面から「Create SAMLv2 Providers 」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/3e1c3e3a-e716-388a-fbd1-1085c0af3f9c.png)

次に「Create Hosted Identity Provider」を選択します。
※ここまでの流れは今までと同じですね。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/5aae8a50-6936-eacb-f000-9adf1d580551.png)

表示された画面の「新しいトラストサークルに追加します」にチェックを入れ、「トラストサークル名」に"aws(名称は任意)"と入力し、「設定」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/c74250d0-2401-8432-f3b5-d0b07b780e33.png)

↓の画面が表示されればOKです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/692f3e46-5306-fe7a-a19f-53ee0feecbf4.png)

## AWSへのIdP登録
AWS側に信頼関係を結ぶために必要となるIdPのメタデータをダウンロードしてきます。
これも以前実施したOffice365へのSSO時と同じように以下のURLにアクセスしてコピペするか、もしくはcurlなどを使って作業端末のローカルにダウンロードします。
__※重要な注意事項としてアップロードする際のファイル形式はXMLですのでご注意を…__

```:メタデータダウンロードURL
http://【OpenAMサーバホスト名】:8080/openam/saml2/jsp/exportmetadata.jsp
```

次にAWS管理コンソールのIAMを表示してください。
※表示の仕方などは割愛します。

IAMのメニューから「IDプロバイダー」‐「プロバイダの作成」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/b734ef82-dccc-5429-bc60-6c92ea4889f1.png)

すると↓の画面が表示されるので、設定項目はそれぞれ以下の通り、設定を行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/dd902053-53dc-87cc-ad62-5b594542288f.png)

・プロバイダーのタイプ：SAML
・プロバイダ名：OpenAM(任意の名称)
・メタデータドキュメント：先ほどダウンロードしたOpenAMのメタデータ
※これは↓のような形でアップロードを実施してください。

<img width="699" alt="１.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/a8262001-aec3-411e-a6bb-7856c1a31749.png">

プロバイダの検証画面に遷移するので「作成」をクリックします。
検証が完了するとAWS管理コンソール上のプロバイダ一覧に「OpenAM」と表示されます。
__※私の場合ですが、画面遷移せず、一回画面を閉じて、もう一度表示したら、プロバイダが表示されるようになりました。__

「OpenAM」のプロバイダが表示されるようになればOKです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/63093e6d-7a52-ebc8-9bb7-6e1bc367e8f7.png)

## SP登録(OpenAM エンティティプロバイダの登録)
Office365の時と同様なのですが、トップ画面から「REALMS」-「Create SAMLv2 Providers」-「Register Remote Service Provider」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/f06c5047-b7e2-1ed9-91a1-ba1dc6177ec7.png)

表示された画面にて、各設定項目を以下の通り、設定します。

・メタデータファイルはどこに存在しますか？：「URL」
・メタデータが配置されているURL：「https://signin.aws.amazon.com/static/saml-metadata.xml」
・トラストサークル
　「既存のトラストサークルに追加します」：チェック
　「既存のトラストサークル」：aws

上記で示している通り、メタデータはURLからアクセスして取得できるようになっていますが、Curl等でダウンロードしたファイルをアップロードしても良いです。

```:AWS管理コンソール用のSAMLメタデータ保存先
https://signin.aws.amazon.com/static/saml-metadata.xml
```

各項目の設定が終わったら「設定」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/9cb8d390-1305-1393-6188-8960a7b59d43.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/40c60605-6da9-7fdb-269a-21be1b005eb9.png)

また、例のごとく、上記のように登録が完了した旨のポップアップが表示されればSPとして登録が完了します。

登録が完了すると↓のような形でトラストサークルに「aws」が表示されるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/71e9085e-61e6-8eee-9282-b87298b33af9.png)

また、エンティティプロバイダにも「aws」のURLが表示されるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/c85a42ae-81fe-7299-cc16-d1997a55be3b.png)

## IAMロールの作成
SAML認証でログインするユーザー専用のIAMロールを作成します。
AWS管理コンソールにログインしてIAMの画面を表示します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/ee66cf59-38cb-6f0c-16b3-d9309d9a9f00.png)

「ロールの作成」‐「信頼されたエンティティの種類を選択」‐「SAML2.0 フェデレーション」を選択します。
すると設定項目が表示されるので以下の通り、設定を行います。

・SAMLプロバイダー：「OpenAM」
　※プログラムによるアクセスのみを許可するなどの設定はポリシーに準じて設定をお願いいたします。
・属性：SAML:aud
　※プロバイダーを選択した時点で自動的に入力されます
・値：https://signin.aws.amazon.com/saml
　※プロバイダーを選択した時点で自動的に入力されます
・条件：ログイン時の属性値に条件を追加したい場合は値を追加します

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/e50291c0-dd52-7127-77e5-69431baf70c2.png)

次にIAMポリシーの適用になります。
ここではとりあえず「poweruseraccess」をアタッチします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/44f86b03-c50b-6c88-c8de-a794de4eee55.png)

また「アクセス権限の境界の設定」という項目がありますが、これはIAMのロールをもっと詳細に制御する場合に使用する機能になります。
今回は使用しないため、「アクセス権限の境界を設定せずにroleを作成する」にチェックを入れておきます。
設定が終わったら、「次へ」をクリックします。

ロール名、エンティティ、ポリシーがアタッチされていることを確認して「ロールの作成」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/c8d6efcc-db94-3dee-75ef-fb88b62b6774.png)

↓のように先ほど作成したロールが表示されていればOKです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/dfc8b96e-410d-049b-dcf3-90f2687bb201.png)

あとは属性のマッピングを設定します。
今回は社員番号属性(employeeNumber)をマッピングして、AWSのロールを取得する設定とします。

エンティティプロバイダの設定(表示の手順は前述しているため割愛)で「urn:amazon:webservices」を選択し、「新しい値」に以下の値を追加します。
追加したら「保存」をクリックします。

```:追加対象の属性
https://aws.amazon.com/SAML/Attributes/Role=employeeNumber
```

↓の画面が表示されればOKです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/da65e98a-0477-05e7-bae7-398788200cbf.png)


## ID連携ユーザーの作成(OpenAM)
OpenAMのローカルデータストアにAWS管理コンソールへSSO認証するためのユーザーアカウントを用意します。

トップ画面から「REALMS」-「Data Stores」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/db1802fe-de45-d1fd-c43d-ad73497da9f5.png)

メニューから「対象」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/5131c11f-4ba2-a147-aeab-746b04d455ca.png)

「新規」をクリックして、ユーザーを作成します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/dce741c1-b84d-040d-9d15-87790ce72d34.png)

あとで属性値を変更しますが、とりあえずユーザーを作成します。
この時点では任意の名称、パスワードで問題ないです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/48bdb20f-b081-69ee-502a-0e195f436e1d.png)

ユーザーが追加されたことを確認して、属性値を変更します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/d836710c-f09f-a59f-a80e-1274b9748dc0.png)

ポイントになるのはここです。
AWSとOpenAMのSAML属性値のマッピングはここで行います。
マッピングする属性値にはルールがあり、以下の形式となっている必要があります。

```:書式
<AWS IAMロールのARN>,<AWS IDプロバイダーのARN>
```
例を挙げると下記のような形式になります。

```:カスタム属性値の例
arn:aws:iam::xxxxxxx:role/saml-federation,arn:aws:iam::xxxxxxx:saml-provider/OpenAM
```
上記の値はAWS管理コンソールからそれぞれ確認することができます。

「IAM」-「ロール」から確認
<img width="476" alt="001.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/e012ca5b-7786-0111-9481-5f39363babb0.png">

「IAM」-「IDプロバイダー」から確認
<img width="427" alt="002.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/138274/9008e5eb-af45-abf6-abc4-91e143c3930f.png">

確認して「,」で結合し、作成した値をOpenAM上のユーザー属性値「社員番号」に設定します。設定できたら「保存」をクリックします。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/706711a3-26b8-eace-303e-b4979fe1b781.png)

先ほど作成したユーザーの「employeeNumber」に値が入力されていることを確認します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/138274/75734c95-bda6-6d2e-6212-5fcaa41d093b.png)