AzureAD→AWS SSOへのSSO、プロビジョニング、プロビジョニング解除

# これは
AzureADからAWS SSOへのSSO、プロビジョニング、プロビジョニング解除についての技術的な記事です。
プロジェクト全体の話はこちら

# 目次
1. やりたいこと
2. SSO設定
3. プロビジョニング設定
4. SSOテスト
5. プロビジョニングテスト
6. 参考
7. 運用を考えてみる

# 1. やりたいこと
- AzureADからAWS SSOへSSO、プロビジョニング、プロビジョニング解除を行う
- AWSの権限設定はAWS SSOから行うことを想定

# 2. SSO設定
## AzureADサイド
1. Azure ADで`エンタープライズアプリケーション登録`を作成する
ギャラリー以外のアプリケーションを選択する

2. `シングルサインオン` > `SAML`を選択する
3. `フェデレーション メタデータ XML`をダウンロードしておく
<img width="382" alt="スクリーンショット 2020-07-14 14.35.26.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/dc064da2-d0ae-d84a-ff74-1ea8342ff917.png">

## AWS SSOサイド
1. AWS SSOを有効化する
2. `設定`-`IDソース`からIDソースをAADに変更する
3. `AWS SSO SAML メタデータ`をダウンロードしつつ、`IdP SAML メタデータ`にAADでダウンロードしたメタデータXMLをアップロードする
<img width="500" alt="スクリーンショット 2020-07-14 14.37.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/546fa1bc-8ce0-b8b5-50a6-4c76d01494c7.png">

## AzureADサイド
1. `シングルサインオン` > `SAML`を選択する
2. `メタデータファイルをアップロードする`から、AWS SSOでダウンロードしたSAMLメタデータをアップロードする

<img width="285" alt="スクリーンショット 2020-07-14 14.41.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/eebfff1a-2a74-0189-72c2-4d748cb46060.png">

3. `テスト`をクリックして問題なければ終了

# 3. プロビジョニング設定
## AWS SSOサイド
1. 自動プロビジョニングを有効化して、`SCIMエンドポイント`と`アクセストークン`を取得する

## AzureADサイド
1. `プロビジョニング`を選択して、前の手順で取得した情報を`テナントURL`や`シークレットトークン`に入力する 
<img width="500" alt="スクリーンショット 2020-07-14 14.48.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/29422964-3f43-2cda-0818-6284f1df3518.png">

2. `テスト接続`して問題ないことを確認する
3. `マッピング` > `AADユーザプロビジョニング`を選択
4. 下記2つの属性は使用しないため、削除する 
facsimileTelephoneNumber属性 
mobile属性

5. `mailNickname属性`を編集して、ソースを`ObjectID`に変更
<img width="500" alt="スクリーンショット 2020-07-14 14.54.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/c7614ba7-969e-f8cd-b680-d67505515a20.png">

6. ユーザ、もしくはグループを割り当てて同期を開始する
<img width="350" alt="スクリーンショット 2020-07-14 16.41.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/7b0b2e7f-697c-e003-6a8e-b194c843e9f8.png">

# 4. SSOテスト
1. `AWS SSOポータル`にアクセスして、Microsoftの認証画面にリダイレクトされることを確認する

<img width="300" alt="スクリーンショット 2020-07-15 11.54.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/990858cd-255c-5e62-48b8-cc43da12e8bb.png">

2. 認証完了したらSSOポータルにログイン完了
<img width="500" alt="スクリーンショット 2020-07-15 11.56.49.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155456/b8929a1f-115d-311c-968c-4e03458a0020.png">

3. AWS CLI SSOの初期設定

```terminal
~# aws configure sso                                   
SSO start URL [None]: https://XXXXXXXX.awsapps.com/start                    
SSO Region [None]: ap-southeast-1                                               
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-southeast-1.amazonaws.com/

Then enter the code:

GDRN-CPLB
The only AWS account available to you is: XXXXXXXX
Using the account ID XXXXXXXX
The only role available to you is: AdministratorAccess
Using the role name "AdministratorAccess"
CLI default client Region [ap-southeast-1]:                                     
CLI default output format [text]:                                               
CLI profile name [AdministratorAccess-XXXXXXXX]:                            

To use this profile, specify the profile name using --profile, as shown:

aws s3 ls --profile AdministratorAccess-XXXXXXXX
~# 
```

例としてS3一覧を表示してみる & SSOプロファイルを確認(IAMユーザ13banを使用）

```
~# aws2 s3 ls --profile AdministratorAccess-XXXXXXXX
2020-05-25 14:13:25 cf-templates-85l05w5jl33g-ap-southeast-1
~#
~# aws2 sts get-caller-identity
XXXXXXXX    arn:aws:iam::XXXXXXXX:user/13ban    AIDA53625ATMJMVMYDQJW
~# 
```

# 5. プロビジョニングテスト

1. グループ参加させたらプロビジョニングできた
2. グループから削除したらAWS SSOユーザは無効化された

# 6. 参考
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html
https://aws.amazon.com/jp/blogs/developer/aws-cli-v2-now-supports-aws-single-sign-on/

# 7. 運用を考えてみる
## 新規
* 入社時にAzureADでエンジニアグループに入れる
    * アカウントの属性値を設定するとこで、自動でグループ参加させる
* 自動でAWS SSOユーザが作成される
    * 現在、AWSユーザ持っていない人も作成されるが権限設定しなければ問題なし
* AWS SSOサイドで権限を設定

## 利用
* AWS SSOポータル使用
* AWS CLIから使用

## 変更
* 権限の変更
    * AWS SSOから権限を変更
* ID棚卸し
    * AzureAD
    * SSOユーザ

## 停止
* AzureADでグループからメンバー削除

## 廃止
* AzureADでアカウント削除