【AWS】IAMユーザの作成


## IAMとは
**AWS Identity and Access Manegement** の略
AWSのサービスを利用するための権限を管理し、各サービスへのアクセスを制御する仕組み

IAMは「**誰**」が「**どのAWSのサービスやリソース**」に「**どのような条件**」でアクセスできるかを指定できるサービスです。
（AWS公式概念図では、"Who"(誰), "Can access"(アクセス条件), "What"(サービスやリソース)の3要件として提示）

IAMはAWSのセキュリティ確保において必要不可欠な仕組みであり、
**知らずに使っているとセキュリティリスクを増大させる**事も多いサービスのため、
AWSのクラウド利用において**最初に学ぶべき分野**の一つなのではないでしょうか。

※最近だと、アカウントの乗っ取りにより、
ビットコインのマイニング作業に使用されてしまって
知らぬ間に多額の請求があったなんて事例もあるみたいです。
もちろん被害総額はとんでもない金額......自分も気をつけます。

## はじめに
AWSのアカウントを作成するとルートユーザーが作成されるが、
ルートユーザは全権限を持つ最強のユーザーである。
アカウントの変更や解約なども操作可能のため、権限を制限したIAMユーザーを作成する。

> Identity and Access Management (IAM) では、AWS のサービスやリソースへのアクセスを安全に管理できます。IAM を使用すると、AWS のユーザーとグループを作成および管理し、アクセス権を使用して AWS リソースへのアクセスを許可および拒否できます。

>IAM は追加料金なしで AWS アカウントに提供されている機能です。料金は、お客様のユーザーが使用した他の AWS サービスに対してのみ発生します。(AWSより引用）


では早速作成していきましょう。

## IAMユーザーの作成



### AWSアカウントの開設

[AWSアカウント開設](https://aws.amazon.com/jp/register-flow/)

### IAMユーザー作成

- コンソール画面でIAMを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/52f0a1fb-89b2-b7fd-599d-a0902fa9c6a4.png)


- 左のメニューから『ユーザー』を選択し、『ユーザーを追加』
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/fe2ee665-e5dd-89a9-a077-d873180f262a.png)

- IAMユーザー名を入力、『パスワード - AWSマネジメントコンソールへのアクセス』にチェックし次のステップへ
（今回のユーザ名は、tese-user）

自分でないユーザーがアクセスすることを想定してのIAMユーザー作成のため
『自動生成パスワード』『ユーザは次回のサインインで新しいパスワードを作成する必要があります』を選択して、その人が自分でパスワードを設定できるようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/dfe4c380-b597-9350-f297-70315865c518.png)



- 既存のポリシーを直接アタッチ、AdministratorAccessにチェックし次のステップへ

今回はAWSが用意した既存のポリシーを直接アタッチを選択します。
その中でも今回は、アクセス権限の強いAdministratorAccessを選択します。


※ポリシーに関しても最後に説明を載せます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/eb0c03ec-6f83-f899-f125-553ccbd2d8b8.png)

- タグを追加し（任意）次へ

今回は特に何もいじりません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/f6baef70-1418-4fd5-276b-24e2828d5788.png)

- 内容を確認して『ユーザーの作成』

最後に確認画面が表示されます。
問題なければ『ユーザーの作成』をクリックします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/c5b84a7f-5c43-42d6-a71c-597da7f59a11.png)

- パスワードをコピーし、コンソールへサインイン
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/692472/2e9dd29f-3e3c-158e-3791-c0855b3af8b5.png)

パスワードの変更を求められるので、新しいパスワードに変更したら完了。
[MFAを使用した多要素認証（２段階認証）の設定手順](https://qiita.com/tarian/items/8d4d2f271406fa6a82c1)

<br>
<br>

### AWS管理ポリシー

AWS管理ポリシーですが、実際の選択画面は以下のようになっています。

大きく分けると、「タイプ」の列の内容に合わせて
- **ジョブ機能の管理ポリシー**
- **サービスごとの管理ポリシー**

の2種類に分類されます。

<img width=600 alt="AWS管理ポリシー" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/610167/e9cca9f2-badb-a2a8-99e3-4f0d12aa310b.png">

#### ・ジョブ機能の管理ポリシー
ジョブ機能の管理ポリシーは、**管理者ユーザー**用の`AdministratorAccess`や**パワーユーザー**用の`PowerUserAccess`を始めとし、複数のサービスをまとめた管理ポリシーが定められています。



#### ・サービスごとの管理ポリシー
サービスごとの管理ポリシーは、**AWSのサービスごとに書込、読取などの権限を個別設定できるポリシー**です。


### ポリシーの構造
上記3種類のポリシーはいずれも、JSONファイルで記述されています。

一例で、S3の読取のみが許可されるAWS管理ポリシー`AmazonS3ReadOnlyAccess`は、以下のように記述されています。

```json:AmazonS3ReadOnlyAccess
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*",
                "s3-object-lambda:Get*",
                "s3-object-lambda:List*"
            ],
            "Resource": "*"
        }
    ]
}
```

ポリシーが記述されたJSONの最上位は、以下のフィールドが記述されます

- `Version` → ポリシーの記述言語のバージョン（基本的には2012/10/17で固定）
- `id` → ポリシーの識別子（オプションのため、上記AmazonS3ReadOnlyAccessでは記述なし）
- `Statement` → ポリシーの詳細を記述するフィールド

**Statementフィールド**の下には、**具体的な条件**を記述する必要があります。

- `Effect` → アクセス権限の種類（基本的には"Allow"(許可)か"Deny"(拒否)）
- `Action` → 許可または拒否するアクション（アスタリスク*は以下の全アクションが対象となる）
- `Resource` → アクションの設定対象となるリソース一覧（S3の場合、バケット名等を指定）
- `Sid` → 複数Statementが存在する場合の識別子（上記AmazonS3ReadOnlyAccessでは記述なし）
- `Condition` → ポリシー適用対象を絞るための追加条件（上記AmazonS3ReadOnlyAccessでは記述なし）

カスタマー管理ポリシーやインラインポリシーを作成する際には、このJSONファイルの編集が必要です。




今まで解説した内容は

- IAMは「誰」(プリンシパル/アイデンティティ)が「どのAWSのサービスやリソース」に「どのような条件」(ポリシー)でアクセスできるかを管理
- 上記アクセス制御を、**ポリシーをプリンシパルに付与**する事で実現
- **アクセス主体が人なら「ユーザー」、アクセス主体がサービスやアプリケーションなら「ロール」**

が前提です。
**これらが成り立たない例外的なポリシー**も存在するのですが、それはまた理解が深まったら備忘録に記します。

お疲れさまでした。



> 参考サイト
[AWS](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/introduction.html)