Okta→AWS-SSOのSSO（SAML）とプロビジョニング

# AWSのAWS-SSOのSSOとプロビジョニングについて
OktaでAWS-SSOにSSOとプロビジョニングする方法を記述します。
以前Qiitaに書いたAWSコンソールへのSSO（ [Okta→AWSコンソールのSSO（SAML）とプロビジョニング](https://qiita.com/urushibata/items/b125dbed229227a08395) ）と同様プロビジョニングでIAMユーザーが作成されることはありません。OktaのプロビジョニングでAWS-SSOのユーザーが作成されます。そのユーザーにAWS-SSOが権限セットを一時的に付けAWSコンソールにアクセスさせます。
AWS-SSOは初めて触りましたが会社のような組織では複数アカウントあるなしに関わらず必須だと思いました。OktaなどのIDaaSを使っていなくても便利だと思います。IDaaSを使うことでより便利になります。
あと、AWS-SSOは無料です。

# 前提
- AWSアカウント作成済み
- AWS-SSO作成済み
- Oktaアカウント作成済み

# Oktaにアプリケーションを追加
Oktaの管理画面から「Applications」>「Applications」>「Browse App Catalog」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/09341d59-4082-c5c8-9d6b-29ca711dd4b2.png)
検索ボックスに「aws」などと入力し「AWS Single Sign-on」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/396b8b21-0fbe-8c57-fd79-6f9a1600df4f.png)
「Add」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/9d5cfb55-d664-535d-d86a-b759f972c36f.png)
デフォルトのまま「Done」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c4390fd1-6905-5d17-ca5c-e09b7dade36a.png)
これでOktaにアプリケーションが作成されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/2b745ab3-a12b-3fdd-b77a-4511e5ded16c.png)
「Sign On」タブの「Identity Provider metadata」リンクで表示されるXMLを保存しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/75cfc2f0-ebfb-5020-5e35-6fa1a6ef5c9c.png)

# AWS-SSOにOktaを登録
「設定」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/49dfc456-0312-5c57-3079-2b6fb80392fb.png)
IDソースの「変更」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/37cb0ff9-52bd-fd5e-b8f6-9bba5b53d331.png)
「外部IDプロバイダー」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/f92ac24b-244e-4d19-6704-eccfdc73ae89.png)
「AWS SSO ACS URL」と「AWS SSO 発行者 URL」をコピーしておきます。
IdP SAML メタデータにOktaで保存したXMLをアップロードし、「次：確認」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/f1f30da5-c0d6-8be6-17f8-12dc292f2b0d.png)
文章を確認し、「ACCEPT」と入力、「IDソースを変更」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/512a7250-79cf-e53f-979f-8bedd07c1ac1.png)
設定が完了しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/d48592ab-d3f4-aca9-c8da-fe77c8442263.png)
設定画面の「自動プロビジョニングを有効化」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/6c2b400f-41dd-80e6-c135-096369dbe679.png)
ダイアログが表示されるので「SCIM エンドポイント」と「アクセストークン」をコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/d921badf-48a6-d6d5-dd5d-da75ff208f29.png)

# Oktaのプロビジョニングの有効化
Provisioningタブの「Configure API Integration」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/e3c3cfcd-4d5c-c4af-36b8-530ccf0b4a97.png)
「Enable API integration」にチェック
BASE URLに先ほどコピーした「SCIM エンドポイント」<font color="Red">（URLの最後のスラッシュは削除してください。エラーになります。）</font>
API Tokenにも先ほどコピーした「アクセストークン」をセットし「Test API Credentials」をクリックします。テストに成功すると「AWS Single Sign-on was verified successfully!」と表示されます。
テストに成功したら「Save」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/ef9a7efd-a79b-7819-195e-d6d66ada520d.png)
「Eidt」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/117379da-4e68-70b1-0530-b56d01536c27.png)
「Create Users」「Update User Attributes」「Deactivate Users」にチェックを入れ「Save」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/0214ad9c-a81a-8f55-7103-d9a362524a9e.png)
これでプロビジョニングの設定は完了したので、ユーザー、グループをアサインしてください。
アサインするとプロビジョニングが開始されます。
プロビジョニングされたユーザーはAWS SSOのユーザー画面で確認できます。ここまでの設定でOktaからAWS-SSOにSSOできるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/d1590514-a33e-10bd-fefa-9d168bed28e2.png)
## グループをプロビジョニングする
グループのプロビジョニングは指定してプロビジョニングする必要があります。
Oktaの「Push Groups」タブで「Push Groups」をクリックし、「Find groups by name」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/6251e69c-4659-89dd-eee8-9f8032cd3d85.png)
プロビジョニングしたいグループ名をテキストエリアに入力すると検索されるので、選択します。「Save」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c3a7ac81-57f9-edd8-f8a6-9d3d6f3a74fd.png)
AWS-SSOのグループ一覧に追加されていることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/85fad51a-3d64-3b08-14f8-1dd266a3a857.png)
メンバーもプロビジョニングされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/ca92b95f-c10f-7748-0899-9b430be2725a.png)
## グループにアクセス権をセット
AWSアカウント > 「アクセス権限セット」タブ > 「アクセス権限セットを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/561ce522-b71e-efcb-c3e1-f9a2d7248c10.png)
「既存の職務機能ポリシーを使用」を選択し「次：詳細」をクリックします。
（「カスタムアクセス権限セットを作成」は任意のポリシーを設定できる権限セットを作成できます。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/189f44ba-3942-f421-3e3c-5b729233de89.png)
「PowerUserAccess」を選択し「次：タグ」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c7a3a09a-7f92-5990-7271-e1751a0e84f9.png)
「次：確認」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/4a907205-6ccc-3e33-3181-7deb07d0b6b7.png)
「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/aeea6b41-2ef7-4c51-fbc3-ed931850a792.png)
AWS-SSOの「AWS アカウント」 > 「AWS 組織」タブ > 「AWS account」を選択 > 「ユーザーの割り当て」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/d55b45b5-0860-9b72-843f-05a68abd0ad8.png)
「グループ」タブでグループを選択し、「次：アクセス権限セット」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/f750ebdd-2d41-dbdb-7915-cf657adf0ab7.png)
先ほど作成した権限セットを選択し「完了」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/8766cc3d-9d7a-9402-7201-d8588d850ff4.png)
権限セットの付与に成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/a14c0044-da7a-1618-58e4-3b7153f2654c.png)

# 接続テスト
## GUI
OktaからAWS-SSOにログインすると以下のように表示されます。「AWS Account (1)」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/612603dc-615e-86f2-df96-4efbbc541a52.png)
「Management console」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/bf72d86b-7ca9-d8a3-98aa-861026d47d69.png)
マネージメントコンソールにログインできました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/7e80fc10-659d-8ba3-3c1b-248f8123eafe.png)
## AWS CLI
AWS-SSOがすごいのはCLIからもSSOできることです。
[AWS Single Sign-On を使用するための AWS CLI の設定](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html)
コンソールで`aws configure sso`と打ちます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/6d5fb90a-8b81-3c0b-57ab-b7b212776201.png)
SSO Start URLにはユーザーポータルURL
SSO RegionにはSSOを作成したリージョン（ここでは東京（ap-northeast-1））
を入力します。ユーザーポータルURLはAWS-SSOの設定画面で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/a01937ba-d1b0-56b5-b59f-04b7665c55af.png)
コンソールに表示されたURL（ https://device.sso.ap-northeast-1.amazonaws.com/ ）をブラウザで開きます。Codeにはコンソールに表示された`Then enter the code:`の値を入力します。この場合は「GFNT-KSPW」になります。入力し「Next」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/f75b6644-38e0-987a-2d40-8facb6be41d3.png)
「Allow」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c593e4ef-f437-0d4d-3214-5e4e37303cba.png)
承認されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/c0ba2e9c-35c6-6401-f4d3-91870f3a4ddc.png)
承認後デフォルトリージョン、アウトプットフォーマット、プロファイル名が聞かれるので入力します。

```powershell
Using the role name "PowerUserAccess"
CLI default client Region [ap-northeast-1]:
CLI default output format [json]:
CLI profile name [PowerUserAccess-XXXXXXXXXXXX]:
```

これでAWS CLIが使えるようになりました。

```powershell
PS C:\Users\urushibata> aws s3 ls --profile PowerUserAccess-XXXXXXXXXXXX
2021-11-07 09:07:13 aws-cloudtrail-logs-xxxxxxxxxxxxxx-xxxxxxx
2021-04-18 02:11:50 codepipeline-ap-northeast-1-xxxxxxxxxxx
...
```

# トラブルシューティング
:::note alert
無効な MFA 認証情報
MFA 認証情報が正しくありません。デバイスを確認して、もう一度お試しください。
:::
![無効なMFA認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29324/41a99660-0f86-3a6a-9e80-d7bf47320107.png)
このエラーの場合、プロビジョニングが失敗しています。
私の場合プロビジョニングの設定前にユーザーやグループをアサインしてしまっていたので、一度外してから再アサインすると直りました。