[JAWS-UG CLI]Directory Service:#32-4 Management ConsoleへのSSO設定

# このハンズオンについて

- このハンズオンでは、Directory Serviceで作成したディレクトリのユーザでManagement Consoleにログインするまでの作業を実施します。
- 今回のハンズオンでは、AD-Connectorは対象外とします。
- 一部の操作はManagement Consoleで実施します。
- Macをお使いの方は、Windows Serverでリモートデスクトップ接続が出来るアプリをご用意ください。
- Windows Serverをドメインに参加させるため、SSMを使用します。SSMが利用可能なリージョンを利用してください。この手順ではオレゴンを利用します。

# 前提条件

- この手順は、全部で5つの投稿から構成されており、本投稿は以下の投稿の内容を実施していることが前提となります。途中から実施した場合、変数が空欄のためにコマンドの実行に失敗する場合があります。

  - [[JAWS-UG CLI]Directory Service:#32-1 VPCおよびユーザ管理用インスタンスの作成](http://qiita.com/domokun70cm/items/38ffd040b805e2928d62)
  - [[JAWS-UG CLI]Directory Service:#32-2 ディレクトリの作成（Simple-AD）、スナップショットの取得](http://qiita.com/domokun70cm/items/5de88fa85c6099f9621e)
  - [[JAWS-UG CLI]Directory Service:#32-3 ユーザの作成、ドメインへの参加](http://qiita.com/domokun70cm/items/32f903ad0f653cb5b278)

## バージョン確認

このハンズオンは以下のバージョンで動作確認を行いました。

```bash:コマンド
aws --version
```

```text:結果
aws-cli/1.9.5 Python/2.7.10 Linux/4.1.10-17.31.amzn1.x86_64 botocore/1.3.5
```

## 必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

- EC2に対するフルコントロール権限
- Directory Serviceに関するフルコントロール権限
- IAMに関するフルコントロール権限
- SSMに関するフルコントロール権限


# 0. 準備

## リージョンを指定

```bash:コマンド
export AWS_DEFAULT_REGION='us-west-2'
```

## 資格情報を確認

```bash:コマンド
aws configure list
```

```text:結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************PZ4A         iam-role
secret_key     ****************AZ55         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION
```

## 変数の確認

```bash:コマンド
cat << ETX

    DS_ID: "${DS_ID}"

ETX
```

```text:結果
    DS_ID: "ds-**********"
```

# 1. SSOの有効化

## エイリアスの変更

**エイリアスはグローバルでユニークである必要があります。
他の方と重複しないように修正してください。**

```bash:コマンド
ALIAS='jawsug-20151109-1'
```

パラメータを確認

```bash:コマンド
cat << ETX

    DS_ID: "${DS_ID}"
    ALIAS: "${ALIAS}"

ETX
```

```text:結果
    DS_ID: "d-**********"
    ALIAS: "jawsug-20151109-1"
```

エイリアスの作成

```bash:コマンド
aws ds create-alias --directory-id ${DS_ID} --alias ${ALIAS}
```

```json:結果
{
    "DirectoryId": "d-**********",
    "Alias": "jawsug-20151109-1"
}
```

## SSOの有効化

```bash:コマンド
aws ds enable-sso --directory-id ${DS_ID}
```

```text:結果
（返値無し）
```

## IAMロールの作成

ロールがないことを確認

```bash:コマンド
ROLE_NAME='ds-role'
aws iam get-role --role-name ${ROLE_NAME}
```

```text:結果
A client error (NoSuchEntity) occurred when calling the GetRole operation: The role with name ds-role cannot be found.
```

Direcroty ServiceにAssume Roleさせる権限を定義します。

```bash:コマンド
TRUST_POLICY_FILE='Trust-Policy.json'
AWS_ID=<AWS_IDを代入してください>
```

```bash:コマンド
cat << EOF > ${TRUST_POLICY_FILE}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ds.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:externalid": "${AWS_ID}"
        }
      }
    }
  ]
}
EOF

cat ${TRUST_POLICY_FILE}
```

```json:結果
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ds.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:externalid": "************"
        }
      }
    }
  ]
}
```

JSONファイルを検証

```bash:コマンド
jsonlint -q ${TRUST_POLICY_FILE}
```

## IAMロールの作成

```bash:コマンド
aws iam create-role --role-name ${ROLE_NAME} --assume-role-policy-document file://${TRUST_POLICY_FILE}
```

```json:結果
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Principal": {
                        "Service": "ds.amazonaws.com"
                    },
                    "Effect": "Allow",
                    "Condition": {
                        "StringEquals": {
                            "sts:externalid": "********"
                        }
                    },
                    "Sid": ""
                }
            ]
        },
        "RoleId": "A********************",
        "CreateDate": "2015-10-12T02:51:12.964Z",
        "RoleName": "ds-role",
        "Path": "/",
        "Arn": "arn:aws:iam::************:role/ds-role"
    }
}
```

## ディレクトリ上のユーザがAssumeRoleできるようになるための設定

Management Consoleにログインして実施します。
（CLIで実行することが出来ないようです。。。）

「Apps & Services」　→　「AWS Management Console」の「Manage Access」のリンクをクリック

![AWS Directory Service Console.png](https://qiita-image-store.s3.amazonaws.com/0/36230/22ef287e-b42b-5b17-969d-4b00f8490c66.png)

「Enable Access」をクリック

![AWS Directory Service Console (1).png](https://qiita-image-store.s3.amazonaws.com/0/36230/cb1b257d-1f5b-1acb-1e2d-044d8c4d76d7.png)

「New Role」をクリック

![AWS Directory Service Console (2).png](https://qiita-image-store.s3.amazonaws.com/0/36230/ef330987-38bd-864c-4298-77101f91539c.png)

「Use Existing Role」をクリック

![AWS Directory Service Console (4).png](https://qiita-image-store.s3.amazonaws.com/0/36230/6ac87e45-d69b-986a-7cea-f3a90c26f25a.png)

作成したRoleを選択し、「Next Step」をクリック

![AWS Directory Service Console (5).png](https://qiita-image-store.s3.amazonaws.com/0/36230/5e85f172-ea6a-08c0-6b88-89fa9ffd841b.png)

ユーザ名で検索し、権限を付与したいユーザを選択し、「Next Step」をクリック

![AWS Directory Service Console (6).png](https://qiita-image-store.s3.amazonaws.com/0/36230/c1ff9635-b204-5c2c-9955-c170fcc0c456.png)

内容を確認し、「Create Role Assignments」をクリック

![AWS Directory Service Console (7).png](https://qiita-image-store.s3.amazonaws.com/0/36230/c5434932-1c99-41de-7ef3-77127f40b47d.png)

ユーザにロールを割り当てることが出来たことを確認

![AWS Directory Service Console (8).png](https://qiita-image-store.s3.amazonaws.com/0/36230/06c4ded0-68d9-418e-bd8f-8f8412c2c951.png)

![AWS Directory Service Console (9).png](https://qiita-image-store.s3.amazonaws.com/0/36230/57cf3ea9-5513-6728-daa5-260b2c01ef40.png)



## 動作確認

Management Consoleにディレクトリ上のユーザでアクセスできることを確認します。

ブラウザで以下のURLにアクセスします。
（出来れば、他のブラウザで確認を行うといいと思います。）

アクセス出来るまで、時間がかかる場合があります。（5～10分くらい）

https://<設定したALIAS>.awsapps.com/console/

```bash:コマンド
echo https://${ALIAS}.awsapps.com/console/
```

```text:結果
https://jawsug-20151109-1.awsapps.com/console/
```

ログインする際には、#32-3で作成したユーザのユーザ名とパスワードを入力してください。

![jawsug-20151109 - AWS Apps Authentication.png](https://qiita-image-store.s3.amazonaws.com/0/36230/14436b2c-4083-dd9c-f3db-e41aea88e5ae.png)

**最後に、Management Consoleからサインアウトします。**

## 補足

ディレクトリ上のユーザには複数のIAMロールを割り当てることができ、その場合にはどのロールの権限でログインするか選択することが可能です。

![jawsug-20151109 - AWS Apps Authentication (1).png](https://qiita-image-store.s3.amazonaws.com/0/36230/935eb0d3-02a8-653a-b952-78d6884a9f19.png)