【AWS】IAMってなーに？

# IAMってなーに？

## 目次

- [IAMってなーに？](#iamってなーに)
  - [目次](#目次)
  - [はじめに](#はじめに)
  - [IAMとは](#iamとは)
  - [用語解説](#用語解説)
  - [IAMポリシー](#iamポリシー)
    - [管理ポリシー](#管理ポリシー)
    - [インラインポリシー](#インラインポリシー)
  - [IAMユーザー](#iamユーザー)
    - [ルートユーザ（IAMではない）](#ルートユーザiamではない)
    - [管理者権限](#管理者権限)
    - [パワーユーザー](#パワーユーザー)
  - [IAMユーザーグループ](#iamユーザーグループ)
  - [IAMロール](#iamロール)
  - [おわりに](#おわりに)
  - [参考文献](#参考文献)

## はじめに

現在、[AWS Certified Solutions Architect - Associate](https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/) の勉強をしているのですが、IAMロールとかIAMユーザーとかIAM何とかとか沢山あってよくわからなかったので、IAMで使われる用語についてまとめてみました。  
自分のためにまとめてるので雑でわかりずらいかもしれませんが、お役に立てれば幸いです。

## IAMとは

[IAM（AWS Identity and Access Management）](https://aws.amazon.com/jp/iam/) とは安全にAWS操作を実施するための**認証・認可**の仕組みです。  
AWS のサービスやリソースにアクセスできるユーザーやグループを指定し、きめ細かいアクセス許可を一元管理し、アクセスを分析して AWS 全体でアクセス許可を改善することができます。

## 用語解説

以下のトピックとそれに関連する用語をまとめます。

- **IAMポリシー**
- **IAMユーザー**
- **IAMユーザーグループ**
- **IAMロール**

## IAMポリシー

ユーザーなどへのアクセス権限を付与するための設定ドキュメントのことです。  
**Action（どのサービスの）**、  **Resource（どういう機能や範囲を）**、**Effect（許可/拒否）** という大きな3つのルールに基づいて、権限を記載します。
**IAMユーザー**、**IAMユーザーグループ**、**IAMロール**に付与することによって、権限を付与することができます。  
**JSON形式**でこんな感じ↓で記載します。  
難しそうですが、GUIでポチポチするだけで勝手にJSONが生成されます。

``` json
{
    "Version": "2012-10-17",
    "Statement": [
        {
        "Effect": "Allow",
        "Principal": { "AWS": "arn:aws:iam::123456789012:root" },
        "Action": "s3:*",
        "Resource": [
        "arn:aws:s3:::bucket1",
        "arn:aws:s3:::bucket2"
        ],
        "Condition": {
        "NotIpAddress": {
            "aws:SourceIp": [
                "192.0.2.0/24",
                "203.0.113.0/24"
                    ]
                }
            }
        }
    ]
}
```

IAMポリシーには3つのタイプがあります。

### 管理ポリシー

複数のIAMユーザやロールに対して権限を付与することができるポリシーです。
管理ポリシーには次の機能があります。

- **再利用可能性**
- **一元化された変更管理**
- **バージョニングとロールバック**
- **アクセス許可管理の委任**
- **より大きいポリシー文字制限**
- **AWS 管理ポリシーの自動更新**

よくわからないと思うので[こちら](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/access_policies-choosing-managed-or-inline.html)見てください。  
管理ポリシーでも、AWSが作成・管理している**AWS管理ポリシー**と、AWSアカウントで作成・管理する**カスタマー管理ポリシー**の2種類あります。

### インラインポリシー

IAMユーザ、IAMグループ、IAMロールに埋め込まれたポリシーです。  
複数のプリンシパルで使いまわすことができません。

## IAMユーザー

AWSアカウント内に追加されるユーザのことです。  
ユーザは人だけではなく、APIを呼び出したり、CLIを実行したりする主体も含まれます。
IAMユーザの認証方法は2種類で、

- **ユーザIDとパスワード**
  - コンソールにログインするときに利用する
  - MFAを組み合わせることが推奨される
- **アクセスキーとシークレットアクセスキー**
  - CLIやAPIからリソースにアクセスるるときに使用する

があります。  
以下はIAMで使われるユーザの基本的な種類です。

### ルートユーザ（IAMではない）

AWSアカウント作成時に作られるアカウントです。  
すべてのAWSサービスとリソースに対してアクセス可能な権限を持っています。  
権限が強すぎるため、**日常的なタスクには、ルートユーザを使用しないことが強く推奨されています。**  
AWSアカウント作成時に使用したメールアドレスとパスワードでサインインが可能です。

### 管理者権限

管理者権限の許可が付与されたIAMユーザです。  
IAMの操作など、ほとんどのAWSサービス、リソースへのアクセスが可能です。  
アカウントの削除などのルートユーザのみ許可されている操作はできません。

### パワーユーザー

IAM以外のすべてのAWSサービスにアクセスできるIAMユーザです。  
ほとんどのAWSサービスを使用する開発者などに付与する権限。

## IAMユーザーグループ

IAMユーザ個人ではなく、グループ単位で権限を設定するものです。  
IAMユーザグループにはIAMユーザを複数設定することができ、そのIAMユーザに対して**まとめて権限を付与**することができます。  
複数のユーザに同一の権限を個別で与えると、権限の付与漏れや過剰付与などのミスが発生する確率が高くなるため、IAMユーザグループを使用することで、権限を容易かつ正確に管理することが可能になります。

## IAMロール

一時的にAWSリソースへのアクセス権限を付与する際に、アクセス権限をロールとして付与することができます。  
例えば、EC2からS3にアクセスしてファイルを取得するサーバの処理を作りたい場合、EC2からS3へのアクセスを許可するIAMポリシーをIAMロールに付与して、そのロールをEC2に対して付与する必要があります。

## おわりに

**AWSって難しい。**

## 参考文献

- [AWS公式](https://aws.amazon.com/jp/iam/)
- [AWS認定資格試験テキスト　AWS認定ソリューションアーキテクト - アソシエイト　改訂第3版](https://www.amazon.co.jp/AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88-%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88-%E6%94%B9%E8%A8%82%E7%AC%AC3%E7%89%88-%EF%BC%A1%EF%BC%B7%EF%BC%B3%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88-%E4%BD%90%E3%80%85%E6%9C%A8-%E6%8B%93%E9%83%8E/dp/4815617945/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=C1LFO1A0MVKC&keywords=AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88+AWS%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88+-+%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88&qid=1697885402&s=books&sprefix=aws%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E8%A9%A6%E9%A8%93%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88+aws%E8%AA%8D%E5%AE%9A%E3%82%BD%E3%83%AA%E3%83%A5%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%88+-+%E3%82%A2%E3%82%BD%E3%82%B7%E3%82%A8%E3%82%A4%E3%83%88%2Cstripbooks%2C239&sr=1-1)
- [【SAA-C03版】これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座](https://www.udemy.com/course/aws-associate/)