IAMとは?認証と認可の違いから学ぶアクセス管理の基本

クラウドセキュリティ

IAMとは、ユーザーの認証やアクセス権限を管理する仕組みです。

クラウドやオンプレミスに関わらず、システムを運用する上で必ず出てくるのが「アクセス管理」です。しかし実際の現場では、とりあえずユーザーを作成して権限を付与する、認証と認可の違いを意識せずに設定している、誰がどこまでアクセスできるのか把握できていない——といった状態になっていることも少なくありません。

このような状態では、アカウントが侵害された場合にその権限の範囲でシステムが操作されてしまう可能性があります。つまり、アクセス管理の設計ミスが、そのままセキュリティリスクになるということです。

そこで重要になるのが IAM(Identity and Access Management) です。

IAM(Identity and Access Management) ユーザーの管理・認証・アクセス権限の制御を含むアクセス管理の仕組み全体。

【参考】Identity and access management – Glossary | CSRC

この記事では、IAMとは何か、認証と認可の違い、なぜIAMが重要なのか、実務で意識すべき設計ポイントについて解説します。

IAMとは何か——アクセス管理の全体像

IAMとは、「誰が」「どのようにログインし」「何ができるか」を管理する仕組みです。

具体的には、ユーザーやグループの管理、ログインの仕組み(認証)、アクセス権限の制御(認可)、操作ログや監査の管理——といった複数の仕組みが組み合わさってIAMが構成されています。つまりIAMはアクセス管理に関するすべてをまとめた概念です。

社内システムにログインする場面で整理すると、「正しいID・パスワードか、多要素認証を通過しているか」を確認するのが**認証(Authentication)の役割で、「ファイルを閲覧できるか、サーバを操作できるか」を決めるのが認可(Authorization)**の役割です。この2つをまとめて管理しているのがIAMです。

IAMでは、人だけでなくシステムを利用するさまざまな主体を管理します。一般社員・部長のアカウントは「ユーザー」、開発チーム・営業チームは「グループ」、CI/CDツールは「アプリケーション」、バッチ処理用IDは「サービスアカウント」に相当します。

サービスアカウント アプリケーションや自動処理がシステムへアクセスするための専用アカウント。クラウド環境ではシステム同士が自動連携するケースが多く、人以外の主体も管理対象になる。

IAMは1つの機能ではなく仕組みの集合体です。そして、すべての操作は「誰か」が行うため、認証が弱ければ不正ログインされ、権限が広ければ被害が拡大します。IAMは**セキュリティの”入口”であり”土台”**です。

【参考】IAM でのセキュリティのベストプラクティス – AWS Identity and Access Management

認証と認可の違い

IAMを理解する上で最も重要なのが、認証(Authentication)と認可(Authorization)の違いです。この2つは似ているようで、役割がまったく異なります。

認証(Authentication)とは

認証とは、「あなたは誰ですか?」を確認することです。IDとパスワードの入力、多要素認証(MFA)、ワンタイムパスワード、生体認証(指紋・顔認証)などがその例です。IDとパスワードが一致すれば「このユーザーは正しい本人である」と判断され、ログインが許可されます。

MFA(多要素認証) 複数の認証要素(知識・所持・生体)を組み合わせて本人確認を行う仕組み。

認可(Authorization)とは

認可とは、「あなたは何ができますか?」を決めることです。認証によって「誰か」が確認された後に、そのユーザーがどの操作を行えるかを制御します。ファイルの閲覧のみ可能、仮想マシンの起動・停止が可能、管理者設定の変更が可能——といった制御がその例です。同じシステムにログインしていても、一般ユーザーは閲覧のみ、管理者は設定変更可能、のようにできることは異なります。

認証と認可の関係

認証 → 認可の順で処理されます。ログインできるか(認証)、次に何ができるか(認可)という流れです。

よくある誤解として「ログインできる=何でもできる」と考えてしまうケースがあります。しかし実際には、ログインはできる(認証OK)が何も操作できない(認可で制限)という状態も普通に存在します。

認証=入れるか、認可=入った後に何ができるか——この違いを正しく理解することが、IAM設計の第一歩になります。

なぜIAMがセキュリティの土台になるのか

IAMが重要な理由は一言で言うと、IAMの設計がそのままセキュリティの強さになるからです。

従来のオンプレミス環境では、ネットワーク境界による防御(境界型防御)が中心でした。社内ネットワークの内側は安全、外部からのアクセスは制限——という考え方です。

しかしクラウドではインターネット経由でアクセスされるため、「社内だから安全」という前提が成り立ちません。その結果、アカウントそのものがセキュリティ境界になります。

ここで重要な視点があります。権限=攻撃者が操作できる範囲です。つまり権限が広いほど被害が広がり、権限が狭いほど被害を限定できます。

IAMはこのリスクをコントロールする仕組みです。認証を強化することで不正ログインを防ぎ、権限を制御することで被害範囲を限定し、操作を記録することで監査・追跡を可能にします。

IAMはアクセス管理の全体像を扱う概念ですが、その中でも特に重要な3つの要素(Identity / Authentication / Authorization)があります。

**Identity(誰が)**は、システムを利用する主体です。ユーザー・グループ・アプリケーション・サービスアカウントなどが含まれます。

**Authentication(認証)**は、Identityが正しいかを確認する仕組みです。なりすましを防ぐことが目的で、認証が弱いと誰でも”その人になれてしまい”、IAMの入口が突破されます。

**Authorization(認可)**は、Identityに対して何ができるかを決める仕組みです。認可が甘いと”できすぎる状態”になり、攻撃者にとってやりたい放題の環境になります。

この3つはバラバラではなく必ずセットで機能します。「誰かがログインし、許可された範囲で操作する」——これがIAMの本質です。また、IAMは後から修正するのが難しい領域のため、最初の設計が非常に重要です。

RBACとIAMの関係

IAMを学んでいると必ず出てくるのが RBAC(Role Based Access Control) です。

RBACとは、役割(ロール)をベースにアクセス権限を管理する仕組みです。管理者ロール、開発者ロール、閲覧専用ロールのように「役割ごとにできること」をまとめて管理します。

IAMとRBACの関係は、IAMは全体の仕組み、RBACは認可を実現する方法の1つです。つまりRBACはIAMの一部といえます。社員(Identity)が社員証で入館(Authentication)し、部署ごとの権限(Authorization)で行動できる範囲が決まる——その「部署ごとの権限」を決めているのがRBACです。

認可を直接ユーザーごとに設定すると、誰がどの権限を持っているか分からない、異動・退職時に権限が残る、管理コストが増えるといった問題が起きます。RBACを使うことでユーザー単位ではなく役割単位でまとめて管理でき、権限管理のシンプル化、過剰権限の防止、可視性の向上が実現できます。

RBACの仕組みと具体的な設計方法については「RBACとは?クラウド権限管理の基本とAzure RBACの仕組みをわかりやすく解説」で詳しく解説しています。

IAM設計でよくある失敗と実務での基本

よくある失敗パターン

IAMは設計を誤るとセキュリティリスクを大きく高める原因になります。実務でよく見られる失敗は次の5つです。

過剰権限の付与:「とりあえず管理者権限を付与する」「一時的な対応のつもりで広い権限を付けたまま」——権限が強いということは、侵害されたときの被害も最大化します。管理者権限を取得した攻撃者は、新しいアカウントの作成、セキュリティ設定の変更、データの持ち出し、リソースの削除まで可能になります。

個人単位での権限管理:ユーザーごとに直接権限を付与すると、誰がどの権限を持っているか分からなくなり、異動・退職時に権限が残り続ける権限のスプロール(肥大化)が発生します。

認証の弱さ:パスワードのみ、MFA未導入の状態では簡単に不正ログインされます。どれだけ権限設計が良くても、認証が突破されれば意味がありません。

フィッシング 偽サイトやメールを使って認証情報を盗み取る攻撃手法。パスワードは漏れることを前提に設計する必要があります。

権限の放置:異動後も旧権限が残る、退職者アカウントが無効化されていない、一時的な管理者権限が残る——”見えないリスク”が蓄積され、どこに危険があるのか分からない状態になります。

スコープが広すぎる:サブスクリプション単位で権限を付与するなど、本来関係ないリソースにもアクセス可能な状態は、1つのアカウント侵害が環境全体への影響につながります。

スコープ 権限が適用される範囲(どこまで操作できるか)を定義する単位。

実務で意識すべき設計の基本

これらの失敗を防ぐための基本的な考え方は次の通りです。

最小権限の原則——必要最小限の権限だけを付与します。できることを減らすことはリスクを減らすことです。詳しくは「最小権限の原則とは?実務での考え方と設計例」を参照してください。

グループベースで管理する——個人ではなくグループに権限を付与します。「人」ではなく「役割」で管理することで、管理がシンプルになり、異動対応も楽になります。

強い認証を前提にする——MFAは必須です。パスワードは漏れる前提で、認証は”破られる前提”で設計します。

権限は”期間”で管理する——特権は常に持つものではなく、必要なときだけ使うものです。Just-In-Time(JIT)権限の考え方で、常時強い権限を持たせません。

スコープを最小化する——権限の適用範囲をできるだけ狭くします。サブスクリプション全体への付与よりリソースグループ、さらに個別リソースへの付与が理想です。範囲を絞ることは被害を限定することです。

定期的に見直す——権限は一度作って終わりではありません。定期レビュー、不要権限の削除、監査ログの確認を継続して行います。IAMは”運用して初めて成立する”仕組みです。

まとめ:守れるエンジニアになるための視点

IAMの設計は「便利かどうか」で決めるものではありません。「その権限を与えたとき、どこまでのリスクを許容するか」で決めるものです。強い権限は便利ですが、リスクも大きい——そのトレードオフを理解して設計することが重要です。

まずは**「認証」と「認可」を分けて考えること**から意識してみてください。それが”動く構築”から”守れる設計”への第一歩です。

IAMを正しく設計できるようになると、不正アクセスの被害を最小化できる、権限管理が整理される、セキュリティの土台が安定するという効果が得られます。


あわせてご覧ください:

コメント

タイトルとURLをコピーしました