IAM Identity Centerを使って複数アカウント管理する。（その４：GHECへのSAML）

# はじめに
前回は`IAM Identity Center`に外部AWSアカウントへの`SAML`認証による接続を行いました。

今回は、`GitHub`へSAML認証による接続を行ってみようと思います。

- 【前】[IAM Identity Centerを使って複数アカウント管理する。（その３：外部AWSアカウントへのSAML）](https://qiita.com/sakai00kou/items/743837701d08b11cb840)
- 【次】[AWS Client VPNの認証をIAM Identity Centerと連携させる。](https://qiita.com/sakai00kou/items/4fe05331d5a04bcca772)

# 前提条件
`GitHub`で`SAML`認証を使用するためには、`GitHub Organization`を使用しており、かつ`GitHub Enterprise Cloud`（`GHEC`）を使用している必要があります。

つまり、`GitHub`の料金体系で言うと、最上位の`Enterprise`を使用しており、`Organization`を構成している必要があります。

そのため、残念ながら個人用途のフリープランや`Team`プランでは使用することができません。

もし導入前に検証等行いたい場合は、`Enterprise`のトライアルを利用することで`Enterprise`の機能を確認することも可能なため、`Enterprise`の契約前に無料のトライアルを申し込むことをおすすめします。
※今回の記事もトライアルを申し込んで検証しました。

また、`GitHub`で`SAML`を使用する場合、`Organization`（組織）と`Enterprise`（企業）の認証において`SAML`を利用することができますが、今回は`Organization`の認証に`SAML`を使用する前提で進めます。

- [Get the complete developer platform.](https://github.com/pricing)
- [SAML シングルサインオンを使うアイデンティティおよびアクセス管理について](https://docs.github.com/ja/enterprise-cloud@latest/organizations/managing-saml-single-sign-on-for-your-organization/about-identity-and-access-management-with-saml-single-sign-on)

# 接続構成
以下より設定手順を紹介していきますが、`GitHub`は`Enterprise`プランを利用してすでに`Organization`の構成ができている前提で進めます。

前回外部AWSアカウントに接続する際の設定では、自組織、外部組織と分けて設定していきましたが、今回は外部組織側が`GitHub`になります。

自組織側でやる設定の大まかな流れは変わらず、前回と同様、外部組織（今回は`GitHub`）接続用のアプリケーションを作成して接続するための設定を行う流れとなります。

構成のイメージがしやすいよう前回と内容を合わせるため、今回も自組織が`IAM Identity Center`、外部組織が`GitHub`として紹介していきます。

- [SAMLメタデータの取得（外部組織）](#samlメタデータの取得外部組織)
- [アプリケーションの追加（自組織）](#アプリケーションの追加自組織)
- [SAMLの有効化（外部組織）](#samlの有効化外部組織)
- [属性マッピングの設定（自組織）](#属性マッピングの設定自組織)
- [IAM Identity Centerからのログイン（自組織）](#iam-identity-centerからのログイン自組織)

## SAMLメタデータの取得（外部組織）
前回の内容で言うと、自組織側のアプリケーション追加時に設定した「**アプリケーションメタデータ**」の「**アプリケーションACS URL**」と「**アプリケーションSAML対象者**」にあたるSPメタデータを先にダウンロードしておきます。

メタデータのURLは「`https://github.com/orgs/ORGANIZATION/saml/metadata`」（`ORGANIZATION`は自分の`Organization`名）となるため、上記URLにアクセスし、表示されたXMLをページ保存等でダウンロードしておきます。

- [SAML configuration reference - Organizations](https://docs.github.com/en/enterprise-cloud@latest/admin/identity-and-access-management/using-saml-for-enterprise-iam/saml-configuration-reference#organizations)

## アプリケーションの追加（自組織）
`IAM Identity Center`に外部組織用のアプリケーションを追加するため、「**IAM Identity Center**」→「**アプリケーション割り当て**」→「**アプリケーション**」から「**アプリケーションを追加**」を選択して設定していきます。

![Monosnap_20230315_190110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/4d721975-29db-1d83-918b-2f9e19481a42.png)

「**カスタムアプリケーション**」と「**事前統合アプリケーション**」があるので、「**事前統合アプリケーション**」から「**GitHub**」を選択して「**次**」に進みます。
※執筆時、英語表記となってしまったため英語表記のまま進めます。実際に設定する場合は適宜読み替えてください。

![Monosnap_20230329_173913.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/aa81ce58-8919-34c8-df0e-bea054078b8d.png)

今回は`GitHub`側に登録するURL等確認する必要があるので、「**View step-by-step instructions**」を選択。

![Monosnap_20230329_191335.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/7614cf06-0963-dafc-4659-d0d09b8bd61c.png)

別ウィンドウでセットアップ手順が書かれた以下のようなページが開くため、開いたままにしておき、元のウィンドウの「**IAM Identity Center metadata**」より「**IAM Identity Center Certificate**」をダウンロードしておきます。（※別ウィンドウでも同じ**IAM Identity Center証明書**がダウンロードできます）

![Monosnap_20230329_174431.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/86517bab-c6f9-ad15-18ca-f0ead80c918a.png)

![Monosnap_20230329_180715.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/f4476b9c-2673-393f-cc90-7a7ab08ab3bc.png)

「**Configure application**」（ディスプレイ名等）は任意で入力、「**Application properties**」はそのまま空欄とし、「**Application metadata**」で「**Upload application SAML metadata file**」を選択し、先程事前にダウンロードした`GitHub`のSPメタデータを選択して「**Submit**」します。

![Monosnap_20230329_181146.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/78f2235b-18ca-93b5-6df3-18363f1ea1fa.png)

「**Assign Users**」を選択して、外部組織にアクセスさせたいユーザ・グループを選択します。

![Monosnap_20230329_181659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/1a9aafac-96d0-4ab7-03c5-4b1410c434fd.png)

![Monosnap_20230329_181805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/874eda46-42b1-8018-647f-75ec6c17062a.png)

## SAMLの有効化（外部組織）
`GitHub`で`Organization`の`SAML`設定が可能なユーザでログインし、右上のユーザアイコンから「**Your organizations**」より自組織の「**Settings**」を選択。

![Monosnap_20230329_182738.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/b8b5429a-5830-810d-e18b-074b20268ab6.png)

左メニューの「**Authentication security**」に「**SAML single sign-on**」の項目があり、「**Enable SAML authentication**」のチェックを付けると以下のような設定項目が表示されるため、先程の`IAM Identity Center`の設定時に別ウィンドウで開いたセットアップ手順に記載されている「**Single sign-on URL**」と「**Issuer**」を入力、「**Public certificate**」には、先程ダウンロードした「**IAM Identity Center Certificate**」の内容をコピペします。

また、鉛筆アイコンより「**RSA-SHA256**」、「**SHA256**」を指定しておきます。

|項目|設定|
|:--|:--|
|Sign on URL|ステップバイステップ手順のSingle sign-on URL|
|Issuer|ステップバイステップ手順のIssuer|
|Public certificate|IAM Identity Centerの証明書|
|Signature Method|RSA-SHA256|
|Digest Method|SHA256|

![Monosnap_20230329_183318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/53c65597-271a-bbc3-5a02-33e33d53a16e.png)

全て設定できたら「**Test SAML configuration**」を選択することで、接続テストが行われます。

初回は`IAM Identity Center`、`GitHub`のユーザ情報入力が求められるかと思うので、無事`IAM Identity Center`の`SAML`でログインできれば、以下のように無事テストが成功した画面となるため、最後に「**Save**」して終了です。

![Monosnap_20230329_184424.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/d87108ec-e21a-206f-acdf-2d43ec90a0b8.png)

## 属性マッピングの設定（自組織）
前回は属性マッピングの設定も手動で行いましたが、`GitHub`の場合は特に変更する必要が無いため、設定は行いません。

ちなみに、デフォルトでは以下のようなアトリビュートが設定されます。

|User attribute in the application|Maps to this string value or user attribute in IAM Identity Center|Format|
|:--|:--|:--|
|Subject|${user:email}|unspecified|
|Email|${user:email}|unspecified|

## IAM Identity Centerからのログイン（自組織）
上記までの手順を実施することで、`IAM Identity Center`のポータル画面に`GitHub`へログインするためのアプリケーションが表示されるようになっているため、表示されているアプリケーションを選択することで`GitHub`にログインできるようになります。

![Monosnap_20230329_185303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/569912/c21539fb-7511-e8b0-bedd-1f0f9572e9d5.png)

# おわりに
`GitHub`の場合、`Enterprise`でないといけなかったりする条件はありますが、基本的には`IAM Identity Center`の設定画面から確認できるステップバイステップの手順を見ればすんなり設定できるかと思います。

ただし、ステップバイステップの手順に書かれている「**IdP Initiated SSO**」の設定が`GitHub`の画面では見つからなかったり、手順通りに進めると`IAM Identity Center`と`GitHub`を行ったり来たりする必要があったりするため、今回紹介した流れで設定したほうが良いと思います。

また、`GitHub`側の認証を一度通せば`IAM Identity Center`から直接`GitHub`へ接続できるようになりますが、`GitHub`側でログアウトすると、再度`SAML`接続した際、`GitHub`側のユーザ、パスワードの入力は求められてしまうようです。（ドキュメントが見つけられませんでしたが、もしかしたら設定次第でどうにかなるかも？）

`GitHub`側の設定で`Organization`に所属のメンバー全員に`SAML`認証を要求することもできるため、`GitHub`の認証と`IAM Identity Center`の認証を`SAML`にまとめたいといった場合は今回の手順を参考にしてもらえればと思います。