IAMの基礎概念やポリシーの構造を理解した次のステップとして、本番環境で実践すべきセキュリティベストプラクティスを学びましょう。本記事では、AWS公式が推奨するIAMセキュリティのベストプラクティス15項目を体系的に解説します。これらを適切に実装することで、AWSアカウントのセキュリティを大幅に強化できます。
ベストプラクティスの全体像
AWSが推奨するIAMセキュリティのベストプラクティスは、大きく5つのカテゴリに分類できます。
mindmap
root((IAMセキュリティ<br/>ベストプラクティス))
ルートユーザーの保護
ルートアクセスキーの禁止
ルートユーザーへのMFA
日常操作での使用禁止
最小権限の原則
必要最小限の権限付与
Permission Boundary活用
条件キーによる制限
認証情報の管理
認証情報のローテーション
未使用認証情報の削除
強力なパスワードポリシー
IAMロールの活用
一時的認証情報の使用
クロスアカウントアクセス
EC2インスタンスへのロール
監査とモニタリング
IAM Access Analyzer
CloudTrailによる監査
定期的なレビューそれでは、各ベストプラクティスを詳しく見ていきましょう。
1. ルートユーザーのアクセスキーを作成しない
ルートユーザーはAWSアカウント内のすべてのリソースに対する完全なアクセス権を持ち、この権限を制限することはできません。ルートユーザーのアクセスキーが漏洩した場合、アカウント全体が完全に侵害される可能性があります。
推奨される対応
ルートユーザーのアクセスキーが存在する場合は、速やかに削除します。プログラムによるアクセスが必要な場合は、適切な権限を持つIAMユーザーまたはIAMロールを使用します。
flowchart LR
A[ルートアクセスキー<br/>存在確認] --> B{アクセスキーが<br/>存在する?}
B -->|Yes| C[キーの使用状況<br/>を確認]
C --> D[依存関係を<br/>IAMロールに移行]
D --> E[アクセスキーを<br/>無効化]
E --> F[アクセスキーを<br/>削除]
B -->|No| G[安全な状態]確認方法
AWSマネジメントコンソールのIAMダッシュボードで、「セキュリティに関する推奨事項」セクションを確認します。ルートアクセスキーの有無が表示されます。
また、AWS CLIでも確認可能です。
|
|
このコマンドが1を返した場合、ルートユーザーにアクセスキーが存在します。
2. ルートユーザーでMFAを有効化する
ルートユーザーは万能の権限を持つため、万が一パスワードが漏洩した場合でも不正アクセスを防止できるよう、必ずMFA(多要素認証)を有効化します。
推奨されるMFAデバイス
ルートユーザーには、フィッシング耐性の高いFIDO2セキュリティキーの使用が最も推奨されます。以下の優先順位でMFAデバイスを選択してください。
| 優先度 | MFAデバイス | 特徴 |
|---|---|---|
| 1 | FIDO2セキュリティキー | フィッシング耐性が最も高い |
| 2 | ハードウェアTOTPトークン | 専用デバイスで高いセキュリティ |
| 3 | 仮想MFAアプリ | 手軽に導入可能 |
設定手順
- ルートユーザーでAWSマネジメントコンソールにサインイン
- 右上のアカウント名をクリックし、「セキュリティ認証情報」を選択
- 「多要素認証(MFA)」セクションで「MFAデバイスを割り当てる」をクリック
- デバイスタイプを選択し、画面の指示に従って設定
3. 日常的なタスクにルートユーザーを使用しない
ルートユーザーは、AWSアカウントの作成時に自動的に作成されますが、日常的なタスクには使用すべきではありません。代わりに、管理者権限を持つIAMユーザーまたはIAM Identity Centerのユーザーを作成して使用します。
ルートユーザーが必要なタスク
以下のタスクは、ルートユーザーでしか実行できないため、これらの場合のみルートユーザーを使用します。
- AWSアカウントの設定変更(アカウント名、メールアドレス、パスワード)
- AWSアカウントの解約
- IAMユーザーへの請求情報へのアクセス許可
- リザーブドインスタンスマーケットプレイスへの出品登録
- GovCloudへのサインアップ
- 無効化されたSTSリージョンの有効化
- 誤って設定されたS3バケットポリシーやSQSポリシーの修復
推奨される運用フロー
flowchart TD
A[タスクの発生] --> B{ルートユーザーが<br/>必要なタスク?}
B -->|Yes| C[ルートユーザーで<br/>サインイン]
C --> D[MFA認証]
D --> E[タスク実行]
E --> F[即座にサインアウト]
B -->|No| G[管理者IAMユーザー<br/>でサインイン]
G --> H[タスク実行]4. フェデレーションIDプロバイダーを使用する
組織で既にIDプロバイダー(Active Directory、Okta、Azure ADなど)を使用している場合は、AWS IAM Identity Centerを通じてフェデレーションを設定することを推奨します。これにより、以下のメリットが得られます。
フェデレーションのメリット
| メリット | 説明 |
|---|---|
| 一元管理 | 既存のIDシステムでユーザーを一元管理 |
| パスワード管理の簡素化 | ユーザーは既存の認証情報を使用 |
| 自動プロビジョニング | ユーザーの追加・削除が自動化 |
| 一時的認証情報 | 長期的なアクセスキーが不要 |
| コンプライアンス | 既存のID管理ポリシーを適用 |
IAM Identity Centerの構成
flowchart LR
subgraph "企業ネットワーク"
U[ユーザー]
IdP[IDプロバイダー<br/>Azure AD/Okta]
end
subgraph "AWS"
IC[IAM Identity Center]
A1[AWSアカウント1]
A2[AWSアカウント2]
A3[AWSアカウント3]
end
U --> IdP
IdP -->|SAML/SCIM| IC
IC --> A1
IC --> A2
IC --> A35. 最小権限を適用する
最小権限の原則は、IAMセキュリティの根幹となる考え方です。ユーザーやロールには、タスクを実行するために必要な権限のみを付与します。
最小権限の実装アプローチ
最小権限を実装するには、以下のステップで段階的にアプローチします。
flowchart TD
A[権限設計開始] --> B[必要なアクションの<br/>特定]
B --> C[対象リソースの<br/>特定]
C --> D[条件の追加<br/>IP/MFA/タグ等]
D --> E[ポリシーの作成]
E --> F[テスト環境で<br/>検証]
F --> G{動作確認}
G -->|OK| H[本番適用]
G -->|NG| I[権限の調整]
I --> F実践的なテクニック
リソースレベルのアクセス許可を使用する
可能な限り、Resource要素にワイルドカード(*)ではなく、具体的なARNを指定します。
|
|
条件キーで制限を追加する
IPアドレス、MFA認証、タグなどの条件を追加して、アクセスをさらに制限します。
|
|
IAM Access Analyzerの活用
IAM Access Analyzerのポリシー生成機能を使用すると、CloudTrailのログに基づいて、実際に使用されたアクションのみを許可するポリシーを生成できます。
6. AWS管理ポリシーから始めてカスタムポリシーに移行する
IAMポリシーの設計では、まずAWS管理ポリシーを使用し、運用しながら徐々にカスタムポリシーに移行することを推奨します。
移行のアプローチ
flowchart LR
A[AWS管理ポリシー<br/>で開始] --> B[CloudTrailで<br/>使用状況を監視]
B --> C[不要な権限を<br/>特定]
C --> D[カスタムポリシー<br/>を作成]
D --> E[テスト環境で<br/>検証]
E --> F[段階的に移行]主要なAWS管理ポリシー
| ポリシー名 | 用途 | 注意点 |
|---|---|---|
| AdministratorAccess | 管理者用 | 本番環境では使用を最小限に |
| PowerUserAccess | 開発者用 | IAM以外のフルアクセス |
| ReadOnlyAccess | 監査・閲覧用 | すべてのリソースの読み取り |
| ViewOnlyAccess | 閲覧のみ | より制限された読み取り |
7. IAMユーザーではなくIAMロールを使用する
アプリケーションやAWSサービスがAWSリソースにアクセスする場合は、IAMユーザーのアクセスキーではなく、IAMロールを使用します。IAMロールは一時的な認証情報を提供するため、長期的な認証情報の漏洩リスクを軽減できます。
IAMロールの主な使用シナリオ
flowchart TB
subgraph "IAMロールの使用シナリオ"
direction TB
subgraph "EC2インスタンス"
E1[EC2] --> R1[インスタンスプロファイル]
end
subgraph "Lambda関数"
L1[Lambda] --> R2[実行ロール]
end
subgraph "クロスアカウント"
A1[アカウントA] --> R3[AssumeRole]
R3 --> A2[アカウントB]
end
subgraph "コンテナ"
ECS[ECS/EKS] --> R4[タスクロール]
end
endEC2インスタンスへのロールの割り当て
EC2インスタンスでアクセスキーを使用する代わりに、インスタンスプロファイルを通じてIAMロールを割り当てます。
|
|
8. 一時的な認証情報を使用する
長期的なアクセスキーではなく、一時的な認証情報を使用することで、セキュリティリスクを大幅に軽減できます。
一時的認証情報の取得方法
| 方法 | ユースケース | 有効期間 |
|---|---|---|
| AssumeRole | クロスアカウント、権限の切り替え | 15分〜12時間 |
| AssumeRoleWithSAML | SAMLフェデレーション | 15分〜12時間 |
| AssumeRoleWithWebIdentity | ウェブIDフェデレーション | 15分〜12時間 |
| GetSessionToken | MFA認証後のセッション | 15分〜36時間 |
| GetFederationToken | フェデレーションユーザー | 15分〜36時間 |
AWS CLI での一時認証情報の使用
|
|
9. アクセスキーを定期的にローテーションする
長期的なアクセスキーを使用する必要がある場合は、定期的にローテーション(更新)を行います。AWSは90日以内のローテーションを推奨しています。
アクセスキーのローテーション手順
flowchart TD
A[新しいアクセスキー<br/>を作成] --> B[アプリケーションを<br/>新しいキーに更新]
B --> C[新しいキーで<br/>動作確認]
C --> D{動作OK?}
D -->|Yes| E[古いキーを無効化]
D -->|No| F[問題の調査・修正]
F --> C
E --> G[一定期間経過後<br/>古いキーを削除]AWS CLIでのローテーション操作
|
|
10. 未使用の認証情報を削除する
使用されていない認証情報(パスワード、アクセスキー)は、不正利用のリスクを高めます。定期的に認証情報の使用状況を確認し、未使用のものは削除します。
認証情報レポートの生成
IAMの認証情報レポートを使用して、すべてのユーザーの認証情報の使用状況を確認できます。
|
|
レポートで確認すべき項目
| 項目 | 確認ポイント |
|---|---|
| password_last_used | パスワードの最終使用日 |
| access_key_1_last_used_date | アクセスキー1の最終使用日 |
| access_key_2_last_used_date | アクセスキー2の最終使用日 |
| mfa_active | MFAが有効かどうか |
未使用認証情報の検出基準
一般的には、以下の基準で未使用認証情報を判定します。
- 90日以上使用されていないパスワード
- 90日以上使用されていないアクセスキー
- 作成後一度も使用されていない認証情報
11. 強力なパスワードポリシーを設定する
IAMユーザーに対して、強力なパスワードポリシーを適用します。これにより、推測されにくいパスワードの使用を強制できます。
推奨されるパスワードポリシー設定
|
|
AWS CLIでのパスワードポリシー設定
|
|
パスワードポリシーの各項目
| 項目 | 推奨値 | 説明 |
|---|---|---|
| MinimumPasswordLength | 14以上 | パスワードの最小文字数 |
| RequireSymbols | true | 記号を必須にする |
| RequireNumbers | true | 数字を必須にする |
| RequireUppercaseCharacters | true | 大文字を必須にする |
| RequireLowercaseCharacters | true | 小文字を必須にする |
| MaxPasswordAge | 90 | パスワードの有効期限(日数) |
| PasswordReusePrevention | 24 | 再利用を禁止する過去のパスワード数 |
12. 人間のユーザーにMFAを要求する
コンソールにアクセスするすべてのIAMユーザーに対して、MFAを有効化することを強く推奨します。特に、管理者権限を持つユーザーには必須です。
MFAを強制するポリシー
以下のポリシーを適用することで、MFAが有効化されていないユーザーの操作を制限できます。
|
|
13. Permission Boundaryを活用する
Permission Boundaryは、IAMエンティティに付与できる権限の上限を設定する機能です。権限管理を委譲する際に、委譲先が過度な権限を付与することを防止できます。
Permission Boundaryの活用パターン
flowchart TD
A[管理者] --> B[Permission Boundary<br/>を定義]
B --> C[開発者に<br/>IAM作成権限を付与]
C --> D[開発者がIAM<br/>ユーザー/ロールを作成]
D --> E{Permission Boundary<br/>を超える権限?}
E -->|Yes| F[操作拒否]
E -->|No| G[作成成功]権限委譲のためのPermission Boundary設定例
開発者がIAMユーザーを作成する際、必ずPermission Boundaryを付与することを強制するポリシーです。
|
|
14. IAM Access Analyzerで定期的に分析する
IAM Access Analyzerは、リソースポリシーを分析し、外部からアクセス可能なリソースや未使用のアクセスを検出するサービスです。定期的な分析により、セキュリティリスクを早期に発見できます。
IAM Access Analyzerの主な機能
| 機能 | 説明 |
|---|---|
| 外部アクセスの分析 | 組織外からアクセス可能なリソースを検出 |
| 未使用のアクセスの分析 | 付与されているが使用されていない権限を検出 |
| ポリシーの検証 | ポリシーの文法エラーやセキュリティ警告を検出 |
| ポリシーの生成 | CloudTrailログから最小権限ポリシーを生成 |
外部アクセスアナライザーの有効化
|
|
未使用アクセスの分析
未使用アクセスアナライザーは、以下を検出します。
- 未使用のIAMロール
- 未使用のアクセスキー
- 未使用のパスワード
- 未使用の権限(特定のアクションが一度も使用されていない)
15. CloudTrailでIAMアクティビティを監視する
AWS CloudTrailを使用して、IAMに関するすべてのAPI呼び出しを記録・監視します。これにより、不正なアクティビティの検出や、インシデント発生時の調査が可能になります。
監視すべきIAMイベント
| イベント名 | 重要度 | 説明 |
|---|---|---|
| ConsoleLogin | 高 | コンソールへのサインイン |
| CreateUser | 高 | IAMユーザーの作成 |
| CreateRole | 高 | IAMロールの作成 |
| AttachUserPolicy | 高 | ユーザーへのポリシーアタッチ |
| CreateAccessKey | 高 | アクセスキーの作成 |
| DeleteUser | 中 | IAMユーザーの削除 |
| UpdateAssumeRolePolicy | 高 | ロールの信頼ポリシー変更 |
CloudWatch Alarmsによるアラート設定
重要なIAMイベントに対してアラートを設定します。以下は、ルートユーザーのログインを検知するメトリクスフィルターの例です。
|
|
EventBridgeルールによる自動対応
EventBridgeを使用して、特定のIAMイベントに対する自動対応を設定できます。
flowchart LR
A[CloudTrail] --> B[EventBridge]
B --> C{イベントパターン<br/>マッチ}
C -->|マッチ| D[Lambda関数]
D --> E[Slack通知]
D --> F[自動修復]
C -->|非マッチ| G[スキップ]ベストプラクティスの実装チェックリスト
以下のチェックリストを使用して、組織のIAMセキュリティ状態を評価します。
flowchart TD
subgraph "緊急度:高"
A1[ルートアクセスキーの削除]
A2[ルートユーザーのMFA有効化]
A3[管理者ユーザーのMFA有効化]
end
subgraph "緊急度:中"
B1[最小権限ポリシーの適用]
B2[未使用認証情報の削除]
B3[パスワードポリシーの設定]
end
subgraph "緊急度:低〜中"
C1[IAMロールへの移行]
C2[IAM Access Analyzerの有効化]
C3[CloudTrailの監視設定]
end| カテゴリ | チェック項目 | 優先度 |
|---|---|---|
| ルートユーザー | アクセスキーが存在しない | 高 |
| ルートユーザー | MFAが有効化されている | 高 |
| ルートユーザー | 日常操作に使用していない | 高 |
| 認証情報 | 90日以上未使用の認証情報がない | 高 |
| 認証情報 | パスワードポリシーが設定されている | 中 |
| 認証情報 | アクセスキーが定期的にローテーションされている | 中 |
| MFA | コンソールユーザーにMFAが有効化されている | 高 |
| 権限 | 最小権限の原則が適用されている | 中 |
| 権限 | Permission Boundaryが活用されている | 中 |
| 監視 | CloudTrailが有効化されている | 高 |
| 監視 | IAM Access Analyzerが有効化されている | 中 |
AWS Security Hubとの連携
AWS Security Hubを使用すると、IAMセキュリティのベストプラクティスへの準拠状況を自動的にチェックできます。CIS AWS Foundations Benchmarkなどのセキュリティ標準に基づいた継続的なコンプライアンスチェックが可能です。
Security Hubで確認できるIAM関連のチェック項目
- ルートアカウントにMFAが有効化されているか
- ルートアカウントにアクセスキーが存在しないか
- パスワードポリシーが適切に設定されているか
- 90日以上使用されていない認証情報がないか
- IAMポリシーがグループまたはロールにアタッチされているか
まとめ
本記事では、AWS公式が推奨するIAMセキュリティのベストプラクティス15項目を解説しました。これらのベストプラクティスを適切に実装することで、AWSアカウントのセキュリティを大幅に強化できます。
特に重要なポイントを振り返ります。
- ルートユーザーの保護が最優先事項です。MFAを必ず有効化し、アクセスキーは作成しないでください
- 最小権限の原則を徹底し、必要な権限のみを付与します
- 一時的な認証情報を使用し、長期的なアクセスキーの使用を最小限にします
- 定期的な監査を実施し、未使用の認証情報や過剰な権限を検出・削除します
- CloudTrailとIAM Access Analyzerを活用して、継続的な監視と分析を行います
これらのベストプラクティスは一度設定して終わりではなく、継続的に見直しと改善を行うことが重要です。組織のセキュリティ要件や業務内容の変化に応じて、適切に調整してください。