AWSセキュリティの要!「AWS IAM」とは?初心者向けに概念から設定方法まで図解でわかりやすく解説
「AWSを勉強し始めたけれど、最初に触る『IAM(アイアム)』がよくわからない…」 「ユーザーやロール、ポリシーなど、似たような言葉が多くて混乱してしまう…」
AWSを利用する上で、避けて通れない最重要サービスが**AWS IAM(Identity and Access Management)**です。 IAMは、AWSリソースへのアクセスを安全に管理するための仕組みですが、その概念や設定方法は初心者にとって少し難解に感じられるかもしれません。
そこでこの記事では、AWS IAMの概要からメリット・デメリット、4つの重要構成要素、そして具体的なポリシーの書き方まで、図解を交えてわかりやすく解説します。
この記事を読めば、IAMの全体像がすっきりと理解でき、安全にAWSを操作するための第一歩を踏み出せるようになります。
AWS IAM(アイアム)とは?
AWS IAM(Identity and Access Management)とは、**「誰が(何が)」「どのAWSサービス(リソース)に」「どのような操作を行えるか」**を安全に制御するための認証・認可システムです。
AWSアカウントを作成した直後は、すべての権限を持つ「ルートユーザー」しか存在しません。しかし、複数人で開発を行う場合や、システムが自動でAWSを操作する場合に、全員がルートユーザーを使っていると、誤操作や情報漏洩のリスクが非常に高くなります。
そこでIAMを使い、「AさんはS3のファイルを見るだけ」「BさんはEC2インスタンスを起動・停止できる」「プログラムCは特定のデータベースにデータを書き込める」といった、個別の権限管理を行います。
認証(Authentication)と認可(Authorization)
IAMを理解する上で重要なのが、「認証」と「認可」の違いです。
graph TD
A[ユーザー / システム] -->|① 認証: 私は〇〇です| B("AWS IAM")
B -->|パスワードやMFAで確認| C{認証成功}
C -->|② 認可: 〇〇の操作をリクエスト| D("AWSリソース (S3, EC2など)")
D -->|ポリシーに基づき可否を判断| E[操作実行 / 拒否]
- 認証(Authentication):「あなたは何者ですか?」を確認すること(ログインID、パスワード、MFAなど)。
- 認可(Authorization):「あなたにはこの操作をする権限がありますか?」を判断すること(ポリシーによる制御)。
IAMはこの両方を強力にサポートしています。
IAMのメリット・デメリット
IAMを利用するメリットと、導入時に直面しやすい課題(デメリット)を整理しました。
メリット
- きめ細かな権限管理(最小特権の原則) 「特定のS3バケット内の、特定のフォルダにあるファイルだけ読み取りを許可する」といった、非常に細かいアクセス制御が可能です。
- 無料で利用可能 IAMはAWSの基本機能であるため、追加料金は一切かかりません。どれだけユーザーやポリシーを作成しても無料です。
- 強力なセキュリティ機能(MFAなど) 多要素認証(MFA)の導入や、一時的なアクセスキーの発行など、セキュリティを高める仕組みが標準で用意されています。
- IDフェデレーション(外部連携)のサポート GoogleやActive Directoryなど、企業の既存のIDシステムと連携してAWSにサインインすることができます。
デメリット・注意点
- 設定の学習コストが高い セキュリティを強固にできる反面、ルール(ポリシー)の書き方が複雑で、最初は理解するのに時間がかかります。
- 誤設定による「アクセス不能」や「セキュリティホール」のリスク 権限を絞りすぎると開発がストップし、逆に緩くしすぎると不正アクセスの原因になります。適切なバランス感覚が必要です。
IAMを構成する「4つの基本要素」
IAMを理解するための最大の鍵は、**「ユーザー」「グループ」「ロール」「ポリシー」**という4つの構成要素の関係性をマスターすることです。
それぞれの関係を図に表すと以下のようになります。
graph TD
subgraph Group1["IAMグループ: 開発者グループ"]
User1["IAMユーザー: Aさん"]
User2["IAMユーザー: Bさん"]
end
User3["IAMユーザー: Cさん"]
Role["IAMロール: EC2用ロール"] -->|一時的に権限を付与| EC2["EC2インスタンス"]
Policy1["IAMポリシー: S3読み込み権限"] -->|アタッチ| Group1
Policy2["IAMポリシー: AdministratorAccess"] -->|アタッチ| User3
Policy3["IAMポリシー: S3書き込み権限"] -->|アタッチ| Role
それでは、各要素について詳しく見ていきましょう。
1. IAMユーザー(User)
AWSを利用する**「特定の個人」または「1つのアプリケーション」**に対応するアカウントです。 固有のログインID、パスワード、およびAPIを実行するための「アクセスキー」を持ちます。
- 用途:開発者一人ひとりに個別のアカウントを割り当てる場合。
2. IAMグループ(Group)
IAMユーザーの集まりです。グループ自体に権限(ポリシー)を設定することで、そこに所属するユーザー全員に同じ権限を一括で適用できます。
- 用途:「開発者グループ」「インフラ管理者グループ」などを作成して権限管理を効率化する場合。ユーザーの異動時も、所属グループを変更するだけで対応できます。
3. IAMロール(Role)
人ではなく、「サービスや一時的なユーザー」に権限を貸し出すための仕組みです。 パスワードや永続的なアクセスキーを持たず、必要なときに「一時的なセキュリティ資格情報」を発行します。
- 用途:「EC2インスタンス(プログラム)からS3にデータを保存したいとき」や、「別のAWSアカウントのユーザーに、自アカウントの操作を一時的に許可したいとき」。
4. IAMポリシー(Policy)
**「どのような操作を許可(または拒否)するか」を定義したルール(ドキュメント)**です。JSONというテキスト形式で記述されます。 このポリシーを、ユーザー、グループ、またはロールに「アタッチ(紐付け)」することで、初めて権限が有効になります。
【実践】IAMポリシーの書き方を見てみよう
IAMポリシーは、JSON形式で記述します。難しそうに見えますが、構成ルール(文法)は決まっているため、一度パターンを覚えれば簡単です。
以下は、**「S3バケット(サンプルバケット)内のファイルを読み込むことだけを許可する」**ポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::my-sample-bucket",
"arn:aws:s3:::my-sample-bucket/*"
]
}
]
}
ポリシーを紐解く4つのキーワード
JSON内の Statement(ステートメント)の中身は、主に以下の要素で構成されています。これを**「4つの重要要素」**と覚えると理解しやすいです。
| キーワード | 意味 | 具体的な記述例 |
|---|---|---|
| Effect | 許可するか、拒否するか | Allow(許可) または Deny(拒否) |
| Action | どのような操作か(何をするか) | s3:GetObject(S3からファイルを取得する) |
| Resource | どのAWSリソースが対象か | arn:aws:s3:::my-sample-bucket/*(指定したS3バケットの中身) |
| Principal | 誰に適用するか(※主に「信頼ポリシー」で使用) | AWSアカウントIDやサービス名など |
上記のコード例では、「my-sample-bucket」という特定のS3バケットに対して、データの取得(GetObject)とバケット内の一覧表示(ListBucket)を「許可(Allow)」する、という意味になります。
AWS IAM 安全運用のためのベストプラクティス
AWSのセキュリティ事故の多くは、IAMの設定ミスや管理不足が原因で発生しています。初心者が必ず守るべき4つのルールを紹介します。
1. ルートユーザーは日常的に使わない
AWSアカウント作成時に作成した「ルートユーザー」は、あらゆる操作ができる究極の権限を持っています。万が一情報が漏洩すると、アカウントを乗っ取られ、高額な請求が発生する原因になります。 ルートユーザーは、IAMユーザーを作成した後は日常の作業では絶対に使用せず、厳重に保管してください。
2. MFA(多要素認証)を必ず有効にする
ルートユーザーはもちろん、個人のIAMユーザーにも必ず**MFA(スマホアプリによるワンタイムパスワードなど)**を設定しましょう。パスワードが流出しても、二段階認証によって不正ログインを防げます。
3. 「最小特権の原則」を徹底する
ユーザーやロールには、業務に必要な「最小限の権限」だけを付与しましょう。 「管理が面倒だから全員AdministratorAccess(管理者権限)」にするのは非常に危険です。まずは読み取り専用(ReadOnlyAccess)から始め、必要に応じて権限を追加していきましょう。
4. アクセスキーは慎重に管理する(GitHubへの誤公開に注意!)
プログラムからAWSを操作するための「アクセスキーID」と「シークレットアクセスキー」を、GitHubなどの公開リポジトリに絶対にコミットしないでください。 クローラー(自動巡回プログラム)によって数分以内に検知され、勝手に高火力な仮想マシンを起動されて、数百万円の請求が届くケースが後を絶ちません。
まとめ:AWSの基本はIAMにあり!
AWS IAMの重要ポイントを振り返りましょう。
- IAMは「認証(ログイン)」と「認可(権限確認)」を行うセキュリティの要
- 基本は「ユーザー」「グループ」「ロール」「ポリシー」の4つ
- ルールはJSON形式の「ポリシー」で記述し、最小権限でアタッチする
- ルートユーザーは使用せず、MFAとアクセスキーの管理を徹底する
AWSを学ぶ上で、IAMを正しく理解することは、安全で快適なクラウドライフを送るための「免許証」のようなものです。
次のステップとして、実際にAWSコンソールにログインし、**「開発用のIAMユーザーを1つ作成し、そのユーザーにMFAを設定してログインしてみる」**という作業にぜひ挑戦してみてください。身をもって体験することで、理解がぐっと深まります。