クラウド/社内システムのアクセス権限(IAM)と、アプリケーション内の認可設計の両方を対象に、押さえておくべき原則と実践をまとめたものです。


目次

  1. 基本原則
  2. 認証と認可を分けて考える
  3. 認可モデルの選び方
  4. ライフサイクル管理(JML)
  5. 特権アクセス管理(PAM)
  6. 非人間アカウント(サービスアカウント・API キー)
  7. クラウド IAM の実践ポイント
  8. アプリケーション内の認可実装
  9. 棚卸し(アクセスレビュー)
  10. 監査ログとモニタリング
  11. 申請・承認フロー
  12. よくあるアンチパターン
  13. 導入チェックリスト

1. 基本原則

原則内容
最小権限 (Least Privilege)業務に必要な最小限の権限だけを、必要な期間だけ付与する
デフォルト拒否 (Default Deny)明示的に許可されていない操作はすべて拒否する
職務分掌 (Separation of Duties)申請・承認・実行を同一人物が完結できないようにする
多層防御 (Defense in Depth)ネットワーク・IAM・アプリ・データの各層で制御する
ゼロトラスト社内ネットワークであっても毎回「誰が・何に・何をするか」を検証する
説明責任 (Accountability)すべての権限とその利用が、特定の個人・システムに紐づいて追跡できる

2. 認証と認可を分けて考える

  • 認証 (Authentication):「あなたは誰か」を確認する(SSO、MFA、パスキーなど)
  • 認可 (Authorization):「あなたは何をしてよいか」を判断する(ロール、ポリシー)
  • 認証は IdP(Entra ID、Okta、Google Workspace など)に集約し、各システムで独自のID・パスワードを持たない
  • 認可ロジックはアプリ内に散らばらせず、ポリシーとして一元管理する

3. 認可モデルの選び方

モデル概要向いているケース
RBAC(ロールベース)「管理者」「編集者」「閲覧者」などのロールに権限を束ねる組織構造が安定している業務システム全般
ABAC(属性ベース)部署・地域・時間帯・データ分類などの属性で判定条件が複雑、規制対応が必要なケース
ReBAC(関係ベース)「このドキュメントのオーナー」「このチームのメンバー」など関係で判定Google Drive型の共有、マルチテナントSaaS
ACLリソースごとに許可ユーザーを列挙小規模・単純な共有

実践のコツ

  • まずは RBAC で始め、例外が増えてきたら ABAC / ReBAC を組み合わせる
  • ロールは「役職」ではなく「職務(ジョブファンクション)」単位で設計する
  • ロール爆発(ほぼ同じロールが大量にある状態)を防ぐため、定期的に統廃合する
  • 個人への直接付与は避け、グループ → ロール → 権限 の流れで付与する

4. ライフサイクル管理(JML)

Joiner(入社・参加)

  • 人事システムと IdP を連携し、アカウント作成を自動化(SCIM など)
  • 職務に応じたベースラインロールを自動付与

Mover(異動)

  • 異動時に旧権限を必ず剥奪する(権限の累積=「権限クリープ」が最も起きやすいタイミング)
  • 新部署のロールは改めて申請・承認を経て付与

Leaver(退職・離任)

  • 退職日当日(理想は即時)に IdP アカウントを無効化
  • SaaS・クラウド・VPN・共有アカウントのパスワード、APIキーも棚卸しして無効化
  • 所有していたリソースの引き継ぎ先を決めてから削除

5. 特権アクセス管理(PAM)

  • 管理者権限は 常時付与しない。必要なときだけ申請して一時的に昇格(JIT: Just-In-Time)
  • 昇格には承認フローと有効期限(例:最大4時間)を設定
  • root / 特権アカウントは日常業務で使わない。MFA 必須、利用は緊急時のみ
  • ブレークグラス(緊急用)アカウントを用意し、利用時は即アラート&事後レビュー
  • 特権操作はセッション記録を残す

6. 非人間アカウント(サービスアカウント・API キー)

人間のアカウントより管理が甘くなりがちで、侵害の起点になりやすい領域です。

  • サービスごとに専用アカウントを作り、使い回さない
  • 長期的な静的キーより、短命なトークンや Workload Identity(OIDC連携など)を優先
  • シークレットはコードやリポジトリに置かず、Secrets Manager / Vault で管理
  • キーの自動ローテーションを設定する
  • 各サービスアカウントにオーナー(責任者)を必ず設定する
  • CI/CD パイプラインの権限は、デプロイ先環境ごとに分離する
  • AI エージェントや自動化ツールに付与する権限も同じ原則で絞り込む(読み取り専用から始める、破壊的操作は人間の承認を挟む)

7. クラウド IAM の実践ポイント

  • 環境(本番・ステージング・開発)をアカウント/プロジェクト単位で分離する
  • マネージドポリシーの *:* やワイルドカードを安易に使わない
  • 組織レベルのガードレール(AWS SCP、GCP Organization Policy、Azure Policy)で「絶対にやってはいけないこと」を禁止
  • 権限境界(Permission Boundary)で委任できる権限の上限を決める
  • IAM Access Analyzer などで「付与されているが使われていない権限」を検出して削除
  • 本番データへの直接アクセスは原則禁止し、必要時は監査付きの踏み台経由に

8. アプリケーション内の認可実装

  • 認可チェックは必ずサーバー側で行う(UIでボタンを隠すだけでは不十分)
  • すべてのAPIエンドポイントで認可を確認する(「このIDのリソースは本当にこのユーザーのものか」=IDOR対策)
  • 認可ロジックをミドルウェアやポリシーエンジン(OPA、Cedar、OpenFGA、Casbin など)に集約する
  • マルチテナントでは、クエリに必ずテナントIDの条件を付与する(行レベルセキュリティの活用も検討)
  • 権限変更はキャッシュ・トークンにすぐ反映されるよう、トークンの有効期限を短めにするか失効の仕組みを持つ
  • 認可のテストケース(「権限がない場合に拒否されるか」)を自動テストに含める

9. 棚卸し(アクセスレビュー)

対象推奨頻度
特権アカウント・管理者権限月次〜四半期
本番環境・機密データへのアクセス四半期
一般業務システムの権限半期〜年次
サービスアカウント・APIキー四半期
  • レビューはリソースのオーナー(上長・システム責任者) が実施する
  • 「承認」を押すだけの形骸化を防ぐため、最終利用日や利用頻度を併せて提示する
  • 一定期間(例:90日)使われていない権限は自動で剥奪候補にする

10. 監査ログとモニタリング

  • 「誰が・いつ・どこから・何に・何をしたか」を記録する
  • 特に記録すべきイベント:
    • ログイン成功/失敗、MFA の変更
    • 権限の付与・変更・剥奪
    • 特権昇格、ブレークグラスアカウントの利用
    • 大量データのエクスポート
  • ログは改ざんできない場所に集約し、保持期間を規程で定める
  • 異常検知(深夜の特権操作、普段と違う国からのアクセス等)でアラートを出す

11. 申請・承認フロー

  • 権限申請はチケットやセルフサービスポータル経由にし、口頭・チャットでの付与をやめる
  • 申請には「理由」「期間」を必須にする
  • 承認者は申請者本人以外(職務分掌)
  • 期限付き権限は期限到来で自動剥奪
  • すべての申請・承認履歴を保存し、監査時に提示できるようにする

12. よくあるアンチパターン

  • ❌ 「とりあえず管理者権限を付けておく」
  • ❌ 共有アカウント(admin / test を複数人で使う)
  • ❌ 異動・退職者の権限が残ったまま
  • ❌ APIキーを Git リポジトリや Slack に貼る
  • ❌ フロントエンドだけで権限制御している
  • ❌ 誰がオーナーか分からないサービスアカウント
  • ❌ 棚卸しが「全件承認」で終わっている
  • ❌ 本番と開発で同じ認証情報を使っている

13. 導入チェックリスト

  • IdP に認証を集約し、全ユーザーに MFA を強制している
  • 権限はグループ/ロール経由で付与し、個人への直接付与がない
  • 入社・異動・退職時の権限処理が自動化(または手順化)されている
  • 管理者権限は JIT(一時昇格)で運用している
  • ブレークグラスアカウントがあり、利用時にアラートが出る
  • サービスアカウントにオーナーがいて、キーがローテーションされている
  • シークレットがコードに含まれていない(スキャンツールで確認済み)
  • 本番・開発の環境が分離されている
  • アプリの全APIでサーバー側の認可チェックがある
  • 定期的なアクセスレビューが実施され、記録が残っている
  • 権限変更・特権操作の監査ログが集約・保全されている
  • 未使用権限を検出して削除する仕組みがある

参考になるフレームワーク・標準

  • NIST SP 800-53(AC: Access Control ファミリー)
  • NIST SP 800-207(ゼロトラスト・アーキテクチャ)
  • ISO/IEC 27001 / 27002(アクセス制御の管理策)
  • CIS Controls(Control 5: アカウント管理、Control 6: アクセス制御管理)
  • OWASP Top 10(A01: アクセス制御の不備)

0件のページ