AWS Single Sign-Onを試してみる

#はじめに

>
AWS Single Sign-On (SSO) は、複数の AWS アカウントおよびビジネスアプリケーションへの SSO アクセスの一元管理を簡単にするクラウド SSO サービスです。
https://aws.amazon.com/jp/single-sign-on/

AWS SSOを使用するメリットはとしては、今までSSOを組む場合は、例えばActive Directoryを使う場合は、Active Directoryのユーザに対して、AWSの権限を付与するためのマッピングルール(Claim rule)
を記述する必要があり、記述内容がが複雑でした。AWS SSOは、このマッピングを直接記述する必要がなく、AWS SSO側でよろしくやってくれるといったメリットがあります。

###Claim ruleの例
Vcenterと連携するパターン
https://docs.aws.amazon.com/ja_jp/amp/latest/userguide/configure-trust-with-aws.html

```
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"] => 
issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", 
Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, 
Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = 
"urn:oasis:names:tc:SAML:2.0:nameid-format:persistent");
```

###AWS SSO
準備している既存ルールを選択する or  カスタムで定義することが可能です。
準備してある既存のルールの一覧は以下になります。

- AdministratorAccess:
Provides full access to AWS services and resources.
- Billing:
Grants permissions for billing and cost management. This includes viewing account usage and viewing and modifying budgets and payment methods.
- DataScientist:
Grants permissions to AWS data analytics services.
- DatabaseAdministrator:
Grants full access permissions to AWS services and actions required to set up and configure AWS database services.
- NetworkAdministrator:
Grants full access permissions to AWS services and actions required to set up and configure AWS network resources.
- PowerUserAccess:
Provides full access to AWS services and resources, but does not allow management of Users and groups.
- SecurityAudit:
The security audit template grants access to read security configuration metadata. It is useful for software that audits the configuration of an AWS account.
- SupportUser:
This policy grants permissions to troubleshoot and resolve issues in an AWS account. This policy also enables the user to contact AWS support to create and manage cases.
- SystemAdministrator:
Grants full access permissions necessary for resources required for application and development operations.
- ViewOnlyAccess:
This policy grants permissions to view resources and basic metadata across all AWS services.

カスタムパーミッションについては、AWSの管理IAMポリシーか個別にカスマイズしたIAMポリシーをアタッチすることができます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/d48617bf-4b24-153c-2a93-75c3a459c732.png)

#セットアップの流れ

##前提
AWS OrganizationsでALL FEATURESを有効にする必要があります。
Active Directoryを準備するか、AWS SSOが保持するユーザ管理用の機能を使用する必要ああります。Active Directoryは、AWS MS ADをご使用いただく方法と、オンプレミスのADをご使用いただく方法があります。オンプレミスのADは、AD Connector経由で接続するか、AWS MS ADを別途構築し信頼関係を結ぶ必要があります。

###ディレクトリの設定
バージニアリージョンでAWS SSOの管理コンソールにログインします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/b9dc78f2-8e36-a808-bcae-cfa5baab8c6c.png)

DirectoryからConnect directoryをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/87d98994-eece-69a4-f36f-858add594b8d.png)

今回はAWS SSOが提供するユーザデータベースを使用します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/fca0045a-cb8f-a868-f350-e3760c49e54a.png)

確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/c9084c49-c63e-fac5-6812-7c5391947669.png)

これで事前準備完了です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/61b4f815-b4bb-b87a-c34d-5b8d07050f6e.png)

###ユーザの追加
Add Userをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/88372711-eb7b-e988-78b6-b5c7a6c65e74.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/868faadd-6e41-b87e-3d80-9a08ea1b924d.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/a4e8f4c6-a63b-3ba4-029a-5fe8ec5a0bf8.png)

メールが届く
no-reply@login.awsapps.com <no-reply@login.awsapps.com>
Invitation to join AWS Single Sign-On

パーミッション設定を実施していないので、このまま放置します。

###ユーザにOrgnization配下のAWSアカウントに対するアクセス権限を付与する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/10e3e138-9c4d-76d1-43e3-db8204771b7d.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/c1a16481-6a03-8255-5387-dc58b14ea5d0.png)

パーミッションセットが無いので作成します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/4138532e-db48-d459-62d5-1118b2e7baf3.png)

準備してあるセキュリティセットかカスタムのセキュリティセットを選択します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/8a7b00f5-7b4c-dac2-aa50-75690644cec0.png)

今回は、準備してるAdministratorAccessを指定する
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/c9bdc303-6b90-d20e-908f-db2164dba1b9.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/0b1e38fc-aaba-686b-cfff-20712acdb18a.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/a44e0bd4-708b-4e32-2df8-496b363d802f.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/1da27ce3-1e5d-e3cd-23cf-ee68399e01d2.png)

###ログインしてみる
InvitationメールにあったAccept Invitationをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/6890f7ba-e25b-adf5-d47a-f304725bc332.png)

パスワードを入力します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/2226818e-1b27-7b3a-4135-96a497d97112.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/80e64a97-9230-e84d-45fb-dcd5e49c74de.png)

任意のAWSアカウントをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/dc87fa83-8445-e563-69d7-66e6211658c0.png)

Management Consoleをクリックします。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/0da38cca-6367-1b4a-53ac-6f74d5eb446e.png)

Federated loginされます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/e555bc63-a1e0-a154-0753-4afaec66eec1.png)

##CLI/APIでのアクセス
Command line or programatic accessをクリックする。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/0da38cca-6367-1b4a-53ac-6f74d5eb446e.png)

アクセスキー、シークレットアクセスキー、セッショントークンが払い出されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/88dbdb20-b8db-7fe6-538c-9236bb7b70bd.png)

環境変数をコピーしてターミナルに貼り付けします。
SSMで接続するとセッションIDにメールアドレスが含まれるため、ログ上でどのユーザがログインしたか確認することが可能です。

```
38f9d34e90ab:~ atsum$ aws ssm start-session --target i-*************


Starting session with SessionId: ******@*******.co.jp-0a44213c1cd30b80f
```

##複数のAWSアカウントを紐づけた状態
以下のように一覧表示されます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/78184/9980433a-062c-ffbf-f07c-0fa0b644d3d9.png)

###お約束
投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。