【勉強会メモ】IAM(アイデンティティとアクセス管理)の基本
AWSを使う上で避けては通れないのが IAM(AWS Identity and Access Management) です。
AWS初学者の私が社外勉強会で学んできた知識を共有します。
1. なぜIAMが必要なのか?
チームでAWSを使う場合、全員が同じ権限で操作すると「誰かが誤って重要なサーバーを削除してしまう」「セキュリティリスクが高まる」といった問題が発生します。
IAM運用における鉄則は 「最小権限の原則(PoLP : Principle of Least Privilege)」 です。
業務に必要な「最小限の権限」だけを付与し、「誰に」「どのリソースに対して」「何の権限(操作)」を与えるかを適切にコントロールします。
[ 誰に ] ──( ポリシー )──> [ どのリソースに対して ] ──> [ 何の権限を行使できるか ]
(Who) (Resource) (Action)
2. 「ルートユーザー」のルール
- ルートユーザー:AWSアカウント作成時に作られる、すべての権限を持った最強のアカウント。
-
運用上の基本ルール:
-
日常作業でルートユーザーを使ってはいけない。
- ルートユーザーはIAMユーザーの作成や支払い情報の確認など、最小限の利用にとどめる。
- 多要素認証(MFA)の設定が強く推奨される(パスワードが漏洩しても安全性を保つため)。
-
日常作業でルートユーザーを使ってはいけない。
3. IAMアイデンティティ(操作する主体)
IAMで操作を行う主体をまとめてアイデンティティと呼びます。主に以下の3つがあります。
| アイデンティティ | 説明 | 利用イメージ |
|---|---|---|
| IAMユーザー | AWSを利用する「人やアプリケーション」ごとのアカウント | 開発者A用アカウント |
| IAMグループ | 複数のIAMユーザーをまとめたグループ | 「DevOpsチーム」「インフラチーム」 |
| IAMロール | 一時的に権限を貸し出すための仕組み | EC2からS3へアクセスする際や、外部連携 |
💡 ポイント(ロールを経由)
リソース(EC2など)が他のAWSサービスにアクセスする際は、ポリシーをアタッチした IAMロールをリソースに付与(経由) して安全にアクセスさせます。また、リソース自体に認可情報を直接付与する(リソースベースポリシー)仕組みもあります。
4. ポリシー(権限の定義)
権限の中身を定義した設定シートのようなものをIAMポリシーと呼びます。
ポリシーの3つの種類
-
AWS管理ポリシー
- AWSが最初から用意してくれている標準ポリシー(例:
ReadOnlyAccess,AdministratorAccess)。
- AWSが最初から用意してくれている標準ポリシー(例:
-
カスタマー管理ポリシー
- 自分で独自に作成して再利用できるポリシー。複数のユーザーやグループに使い回しが可能。
-
インラインポリシー
- 単一のユーザーやロールに直接埋め込むポリシー。
-
特徴:対象のユーザー等と一元管理され、取り外しができない(ユーザーとともに存在する)。
- ユーザーの刺青のようなもの。
5. JSONポリシーの読み方
ポリシーはJSON形式で記述します。基本構造を押さえれば簡単に読めるようになります。
コツは下から読むことです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": "arn:aws:s3:::my-bucket-name/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "203.0.113.0/24"
}
}
}
]
}
主要要素の意味
-
Effect:許可(Allow)するか、拒否(Deny)するか。 -
Action:どんな操作を許可/拒否するか(例:S3のファイル取得s3:GetObject)。 -
Resource:どのリソースに対して適用するか。 -
Condition:適用される条件(例:特定のIPアドレスからのアクセスのみ許可するなど)。
6. 矛盾した条件(Deny / Allow)の優先順位
複数のポリシーが設定され、条件が矛盾・バッティングした場合は以下のルールで判定されます。
[明示的な拒否 (Explicit Deny)] ──(最優先)──> 絶対拒否!
│
▼(ない場合)
[明示的な許可 (Explicit Allow)] ──> 許可!
│
▼(どちらもない場合)
[指定なし (Implicit Deny)] ──(デフォルト)──> 拒否扱い!
-
最優先は「明示拒否(Explicit Deny)」
- たとえ
Allow(許可)があっても、どこかに1つでもDeny(拒否)があれば拒否が優先されます。
- たとえ
-
デフォルトは「指定なし=拒否扱い(Implicit Deny)」
- 明示的に
Allowされていない操作は、すべて拒否されます(最小権限の原則)。
- 明示的に
まとめ
- AWSはルートユーザーのMFA設定と日常利用の禁止からスタートする。
- ユーザー・グループ・ロール(アイデンティティ)に、JSON形式のポリシーを適用して権限をコントロールする。
- 評価ロジックは 「明示拒否が最優先」 で、 「指定がなければ原則拒否」 。
これらを意識して、セキュリティの保たれたAWS環境を構築しましょう!