AWS IAMとは？（基礎編）

# はじめに

AWSを使うときに避けて通れないのが「IAM（Identity and Access Management）」です。しかし、「IAMって何？」と聞かれると、初心者にとっては少し難しく感じるかもしれません。そこで今回は、IT初心者の方でも理解しやすいように、IAMの基礎部分を分かりやすく解説していきます。

---

## 1. AWS IAMとは？

IAM（Identity and Access Management）とは、AWSの「ユーザーの管理と権限の制御をするサービス」です。

たとえば、マンションにはたくさんの部屋があります。マンションの鍵（＝AWSのアカウント）を持っているからといって、すべての部屋に自由に入れるわけではありませんよね？  
たとえば、管理人は共用スペースや設備の部屋に入れるけれど、各住人の部屋には入れません。  
AWSでも同じように、誰がどのサービスを使えるのか？何ができるのか？を管理するのがIAMです。

---

## 2. AWS IAMの主な要素

IAMには、大きく分けて以下の3つの要素があります。

### ① IAMユーザー

AWSを使う人（アカウント）です。たとえば、会社でAWSを使うときは、社員ごとにIAMユーザーを作成します。

### ② IAMグループ

複数のIAMユーザーをまとめたグループです。たとえば、開発チームや運用チームごとにグループを作成し、それぞれに適切な権限を設定できます。

### ③ IAMロール

一時的に権限を付与できる仕組みです。たとえば、EC2（仮想サーバー）やLambda（サーバーレス関数）がS3（ストレージ）にアクセスするときに、IAMロールを使って適切な権限を与えます。

### ④ IAMポリシー

IAMポリシーは、特定のユーザーやグループ、ロールにどのアクションを許可するか、または拒否するかを定義したルールです。ポリシーはJSON形式で記述されます。

たとえば、開発者にはEC2インスタンスを起動する権限のみを与え、S3にアクセスできる権限を与えないという設定ができます。ポリシーを使って、より詳細なアクセス管理が可能です。

ポリシーの例としては、以下のようなものがあります：

- **Allow（許可）ポリシー**：特定のアクションを許可するポリシー
- **Deny（拒否）ポリシー**：特定のアクションを拒否するポリシー

また、IAMポリシーは、以下の3種類に分類されます。

- **マネージドポリシー**：AWSがあらかじめ提供しているポリシー
- **インラインポリシー**：ユーザーやロールに個別に設定するポリシー
- **カスタマー管理ポリシー**：ユーザーが独自に作成し、管理するポリシー。組織のセキュリティ要件に応じた細かいアクセス制御が可能で、複数のIAMユーザーやロールに適用できる。

---

## 【補足】AllowとDenyポリシーの重要な違い

IAMポリシーには、「Allow（許可）」と「Deny（拒否）」という2つの主要なタイプがあります。この2つは、ユーザーがAWSリソースにアクセスする際の制御方法において非常に重要な役割を果たします。それぞれの違いを、具体的な例を交えて見ていきましょう。

### **Allowポリシー**
- **意味**：ユーザーに特定の操作を許可するポリシーです。
- **使い方**：特定のサービスやリソースに対して「何を許可するか」を指定します。

#### 例1: EC2インスタンスの起動を許可

開発者がEC2インスタンスを起動できるようにするため、以下のようなポリシーを設定します。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:RunInstances",
            "Resource": "*"
        }
    ]
}
```

このポリシーは、ユーザーがEC2インスタンスを起動できるように許可します。この場合、EC2の「インスタンス起動」に関する操作のみが許可され、他の操作（例えば、インスタンスの停止や削除）は含まれていません。

#### 例2: S3バケットへのアクセスを許可

例えば、開発者がS3バケットからファイルを読み取ることを許可するポリシーは次のようになります。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}
```

このポリシーにより、指定されたS3バケット（`my-bucket`）内のオブジェクトにアクセスすることが許可されます。ただし、書き込み（`s3:PutObject`）は許可されていません。

### **Denyポリシー**
- **意味**：ユーザーに特定の操作を拒否するポリシーです。
- **使い方**：特定の操作を完全に拒否することで、許可されているアクションに対する誤操作や悪用を防ぎます。

#### 例1: EC2インスタンスの削除を拒否

あるIAMユーザーがEC2インスタンスを削除することを防ぐために、以下のようにDenyポリシーを設定します。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "ec2:TerminateInstances",
            "Resource": "*"
        }
    ]
}
```

このポリシーは、ユーザーがEC2インスタンスを削除する操作（`TerminateInstances`）を拒否します。たとえ他のポリシーでインスタンスの削除が許可されていても、このDenyポリシーが優先されます。

#### 例2: S3バケットの書き込み操作を拒否

もし、ユーザーがS3バケットにファイルをアップロードすることを防ぎたい場合、以下のようにDenyポリシーを設定します。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::my-bucket/*"
        }
    ]
}
```

このポリシーは、ユーザーが`my-bucket`にファイルをアップロードする（書き込み）ことを拒否します。

---

### **AllowとDenyの優先順位**

AWSでは、ポリシーの優先順位が非常に重要です。ポリシーの評価において、以下のルールが適用されます。

1. **明示的なDenyは最優先される**  
   明示的に拒否された操作は、許可されている場合でも拒否されます。
   
2. **Allowはデフォルトで許可される**  
   特にDenyポリシーが適用されていない限り、Allowポリシーで許可された操作は許可されます。

#### 例3: AllowとDenyが組み合わさる場合

もし、以下のようにポリシーが設定されていたとします：

- Allowポリシー：EC2インスタンスの削除を許可
- Denyポリシー：EC2インスタンスの削除を拒否

この場合、ユーザーはEC2インスタンスの削除を行えません。Denyポリシーは明示的に設定されているため、削除操作は拒否されます。

---

## 3. IAMの主な使用用途

IAMは「セキュリティの強化」と「アクセス管理の簡素化」のために使われます。

### ✅ 1. AWSアカウントのセキュリティを守る

AWSには、すべての権限を持つ「ルートユーザー」がありますが、セキュリティ上の理由で日常的に使うのは危険です。そのため、IAMユーザーを作成し、必要な権限だけを付与することで、安全にAWSを使えます。

### ✅ 2. 必要な人に、必要な権限だけを与える

AWSでは、「最小権限の原則（Least Privilege）」という考え方が重要です。たとえば、開発者には「EC2を起動・停止する権限」だけを与え、経理担当には「請求情報を確認する権限」だけを与える、といった設定ができます。

### ✅ 3. AWSのサービス同士を安全に連携させる

IAMロールを使うと、あるサービス（例えば、Lambda）が別のサービス（例えば、S3）にアクセスする権限を一時的に付与できます。これにより、サービス間のセキュリティを保ちながら連携を実現できます。

---
## 4. IAMの基本的な使い方

### ① IAMユーザーの作成

1. AWSマネジメントコンソールにログイン
2. 「IAM」を検索し、IAMダッシュボードを開く
3. 左メニューの「ユーザー」→「ユーザーを追加」
4. ユーザー名を入力し、アクセス権を設定
5. 必要に応じてポリシー（権限）を割り当てる

### ② IAMポリシーの割り当て

IAMユーザーやロールには、「IAMポリシー」と呼ばれるルールを適用して、権限を設定します。  
たとえば、S3にアクセスできる権限を与えたい場合、以下のようなポリシーを設定します。

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

これは、「S3に関するすべての操作を許可する」という意味です。ただし、セキュリティ上、必要最低限の権限を与えるように注意しましょう。

---
## 5. IAMを使うときの注意点

### ✅ 1. ルートユーザーは使わない

ルートユーザーは、すべての権限を持っています。そのため、普段の運用では使わず、IAMユーザーを作成して使いましょう。

### ✅ 2. 必要最小限の権限を設定する

過剰な権限を与えると、誤操作や不正アクセスのリスクが高まります。たとえば、S3の読み取りだけが必要なら、「読み取り専用」のポリシーを適用しましょう。

### ✅ 3. IAMアクセスキーを管理する

IAMユーザーがAWSのAPIを使うときに必要な「アクセスキー」は、適切に管理しましょう。誤って公開しないように、環境変数やSecrets Managerを使うのが安全です。

---

## 6. まとめ

AWS IAMは、ユーザー管理や権限の設定をするための重要なサービスです。  
初心者の方は、まず「IAMユーザーを作る」「必要な権限だけを付与する」という基本から学ぶのがおすすめです。

最初は「なんだか難しそう…」と思うかもしれませんが、IAMを理解するとAWSのセキュリティをしっかり管理できるようになり、安心してサービスを運用できるようになります。  
特に「最小権限の原則」は、AWSに限らずセキュリティを考えるうえで非常に重要な考え方です。

実際、私も最初は「とりあえずAdministratorAccessを付けちゃえ！」と思っていましたが、それがどれだけ危険かを知ってからは、ポリシーの設定に慎重になりました。  
権限管理が適当になっていると、不要な操作ミスやセキュリティ事故につながる可能性があるため、適切な設定を心がけたいですね。

より実践的なものは、次回の「AWS IAMとは？（実践編）」で解説します！