【AWS】任意の権限を付与したユーザーを作成する（Identity Centerで管理）

## 概要
AWS Quicksightだけを利用できるユーザーを作成する事例を通して、任意の権限を持つIAMユーザーの作成方法をメモしておきます。AWSの画面上で直接操作するため、Identity Centerで管理するユーザーとして追加します。

| 項目             | 内容                                                                                                                                                                        |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **取り扱う内容** | • AWSのユーザー/グループ/許可セットの作成と割り当て<br> • 作成したユーザーによるサインインと、権限の検証                                                                    |
| **想定読者**     | • AWSのユーザー作成・管理を行う人                                                                                                                                           |
| **ゴール**       | • QuickSightの利用権限付与を事例に、あるユーザー/グループがサービスを利用するための設定手順を理解する<br> • AWSのユーザー/グループ/許可セットの関係と構成イメージを把握する |
|                  |                                                                                                                                                                             |

以下、東京リージョンでの設定・URL貼付しているので、必要に応じてリージョンは読み換えてください。

## マネジメントコンソールへのサインイン
ルートユーザー（またはIAM作成権限を持つユーザー）で、[マネジメントコンソール](https://console.aws.amazon.com/)にてサインインする。

## （有効化していない場合）Identity Centerを有効化する
[IAM Identity Center](https://ap-northeast-1.console.aws.amazon.com/singlesignon/home?region=ap-northeast-1#!/)にて、Identity Centerを有効化します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/2a4244b6-b90b-e7b1-ce58-5b7ab285da8e.png)

有効化する範囲を選択します。基本的に左で良いですが、要件次第で特定のAWSアカウントのみ有効化する場合は右を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/6d2075b0-4251-a004-e734-9f5221fa9b89.png)

有効化された！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/2117755a-4cd1-43d7-2fed-2e75549d41d0.png)

## カスタムパーミッションセット（許可セット）の作成
Identity Center上で、対象AWSサービスの利用が可能な権限の定義を作成します。
### 許可セットの新規作成を開始する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/a17b8942-21aa-7585-60fd-203f6a976668.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/dc3ee64e-f05d-519e-b90d-6b9098b60a35.png)

### ポリシーを定義する
ポリシーの定義を行います。マネージドポリシーからチェックボックスで選択してもよいし、今回のようにインラインポリシーからJSON形式で指定してもよいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/80148096-cef8-fa1c-f722-f70dd5dc419a.png)

今回の例ではAWS QuickSightを有効化するので、以下の通り定義します。
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "quicksight:*"
            ],
            "Resource": "*"
        }
    ]
}
```

後続の画面で名称やタグ付けなど必要な情報を付与して、許可セットを保存します。

## 参考：ユーザーとグループ、許可セットの構成イメージ
グループ単位で権限を管理する場合、別途グループも作成しておきます。ユーザー/グループ/許可セットの組合せは少々複雑ですが、簡単に整理すると、、

実現したい構成：
* 仮に、AWSを利用するユーザーを「管理者」「開発者」の2名とする
* いずれも、QuickSightおよび開発データのS3バケットを利用できる
* 管理者のみ、契約関連のS3バケットを利用できる

作成/構成イメージ：
ポイントは、各サービス/リソースへのアクセス可否は許可セットにて定義し、それをユーザーまたはグループに割り当てることで、最終的にユーザーがアクセスできるものが決まる点。
```mermaid
graph TB
    subgraph "AWS Identity Center"
        Manager["管理者"]
        Developer["開発者"]
        QSAdmin["QuickSight Admin Group"]
        ManagerPS["管理者向け許可セット"]
        DevPS["開発者向け許可セット"]
        QuickSightPS["QuickSight向け許可セット"]
    end

    subgraph "AWS Account"
        QS["QuickSight"]
        S3A["S3バケット（契約関連）"]
        S3B["S3バケット（開発データ）"]
    end

    subgraph "凡例"
        U[ユーザー]
        G[グループ]
        P[許可セット]
        R[AWSサービス/リソース]
    end

    Manager -->|所属| QSAdmin
    Developer -->|所属| QSAdmin
    QSAdmin -->|割当| QuickSightPS
    QuickSightPS -->|アクセスできる| QS

    Manager -->|割当| ManagerPS
    Developer -->|割当| DevPS

    ManagerPS -->|アクセスできる| S3A
    ManagerPS -->|アクセスできる| S3B
    
    DevPS -->|アクセスできる| S3B

    classDef user fill:#98FB98,stroke:#006400
    classDef group fill:#87CEEB,stroke:#4682B4
    classDef permission fill:#FFA07A,stroke:#FF4500
    classDef resource fill:#DDA0DD,stroke:#9400D3

    class Manager,Developer,U user
    class QSAdmin,G group
    class ManagerPS,DevPS,QuickSightPS,P permission
    class QS,S3A,S3B,R resource
```

後述の設定手順では内容をシンプルにするためにQuickSightの権限付与のみ扱いますが、複数のサービスに対してユーザー別にアクセス権の制御を行いたい場合、上図を参考に設定していきます。（何か不足あれば追記していきます）

## ユーザー/グループ作成
グループの作成を行う際、メールアドレスの登録を行う部分がユーザーの割り当てに変わる以外は、ユーザー作成時と同様の手順になります。以下、グループ作成を行う場合は、ユーザーと表記している部分をグループに読み換えてください。

### ユーザー/グループの新規作成
IAM Identity Center > ユーザー > ユーザーを追加　から、ユーザーを追加します。Eメールアドレスやユーザー名など記載する欄があるので、入力して追加します。ユーザーの検証方法はメールアドレスへの仮登録メール送信、もしくはワンタイムパスワード生成から選択できます。

追加が完了した状態。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/8d8e3770-2d96-d56e-2b14-db6ad031c0ce.png)

### ユーザー/グループをAWSアカウントへ割り当て
作成したユーザーを、AWSアカウントへ割り当てます。 IAM Identity Center > AWSアカウント > アカウント名 > ユーザーとグループの割り当て から、前項で作成したユーザーをAWSアカウントへ割り当てます。もしグループ単位で権限管理を行うのであれば、ユーザーはAWSアカウントに割り当てず、代わりに該当ユーザーをAWSアカウント割当済みのグループに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/048403bc-cb0a-2942-cc67-dc519374b0d0.png)

作成済の許可セットがある場合リストアップされるので、これも割り当てます。もしグループ単位で権限管理を行うのであれば、ユーザーには許可セットを割り当てず、代わりに該当ユーザーを許可セット割当済みのグループに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/5b1410e5-854c-be2d-a9df-aadaee8d0a6d.png)

完了後の画面。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/a097988e-0e3a-3388-d0f9-24ee84b0bdcd.png)

## 作成したユーザーによるサインイン
前項の作業終了後、IAM Identity Centerダッシュボードに表示された、AWSアクセスポータルを作成したユーザーに共有し、クリックしてもらいます。

IAM Identity Centerダッシュボード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/cfe32935-c5dd-c1ff-52df-21361bdaee31.png)

アクセスポータル　サインイン画面
以降、すべての操作は作成されたユーザーにて行います。サインイン画面には、ユーザー名を入力います。続く画面で、パスワードの設定・入力を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/e06307c9-30fe-0357-a155-76fafe2de4cd.png)

アクセスポータル
AWSアカウントを開き、許可セット名に張られたリンクをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/f98060f0-a2ec-aa11-571f-03770980487c.png)

ホーム画面が表示されます。権限がないサービスはアクセス拒否となっていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/c005ed36-daef-76df-d826-10028d831205.png)

## アクセス権のないサービスを利用できないことを確認
試しにS3バケットを新規作成しようと試みると、権限が無いためエラーになることが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3906608/7a30d6c5-c506-cb91-1541-78ae07ebed12.png)

## アクセス権のあるサービスを利用できることを確認
今回の事例ではQuickSightの権限を付与されているので、画面上部の検索バーからQuickSightを検索・遷移します。

QuickSightのダッシュボードが利用できれば、設定作業完了です。