AWSを安全に利用するためには、適切なアクセス管理が不可欠です。本記事では、AWSのセキュリティの要となるIAM(Identity and Access Management)の基本概念から、ルートユーザーとIAMユーザーの違い、グループによる権限管理、MFA(多要素認証)の設定、AWS CLIの認証情報設定まで、セキュアなアクセス管理の基礎を体系的に解説します。

IAM(Identity and Access Management)とは

IAMは、AWSリソースへのアクセスをセキュアに管理するためのサービスです。「誰が」「どのリソースに」「どのような操作を」できるかを制御し、最小権限の原則に基づいたアクセス管理を実現します。

IAMは追加料金なしで利用でき、すべてのAWSアカウントで自動的に有効化されています。IAMはグローバルサービスであり、特定のリージョンに依存せず、すべてのリージョンで同じ設定が適用されます。

IAMの主要コンポーネント

IAMは以下の4つの主要コンポーネントで構成されています。

graph TB
    subgraph "IAMの主要コンポーネント"
        U[IAMユーザー]
        G[IAMグループ]
        R[IAMロール]
        P[IAMポリシー]
    end
    
    P -->|アタッチ| U
    P -->|アタッチ| G
    P -->|アタッチ| R
    U -->|所属| G
コンポーネント 説明
IAMユーザー AWSを利用する人またはアプリケーションを表すエンティティ
IAMグループ IAMユーザーの集合。権限をまとめて管理できる
IAMロール 一時的な認証情報を使用してAWSリソースにアクセスするためのエンティティ
IAMポリシー アクセス許可を定義するJSONドキュメント

ルートユーザーとIAMユーザーの違い

AWSアカウントを作成すると、最初に「ルートユーザー」が作成されます。ルートユーザーは万能の権限を持つため、日常的な操作には使用せず、専用のIAMユーザーを作成して利用することがベストプラクティスです。

ルートユーザー

ルートユーザーは、AWSアカウント作成時に使用したメールアドレスとパスワードでサインインするアカウントです。アカウント内のすべてのリソースに対する完全なアクセス権を持ち、その権限を制限することはできません。

ルートユーザーでしか実行できない操作には以下のようなものがあります。

  • AWSアカウントの解約
  • アカウント名、メールアドレス、パスワードの変更
  • IAMユーザーへの課金情報へのアクセス許可
  • リザーブドインスタンスマーケットプレイスへの出品登録
  • AWS GovCloudアカウントへのサインアップ
  • S3バケットポリシーで誤って全ユーザーのアクセスを拒否した場合の復旧

IAMユーザー

IAMユーザーは、AWSアカウント内で作成するユーザーエンティティです。実際に人が使用する場合と、アプリケーションがプログラムからAWSにアクセスする場合の両方で利用されます。

比較項目 ルートユーザー IAMユーザー
作成方法 アカウント作成時に自動作成 IAMで手動作成
権限 全権限(制限不可) ポリシーで制御可能
サインイン方法 メールアドレス + パスワード ユーザー名 + パスワード または アクセスキー
MFA 強く推奨 推奨
日常利用 非推奨 推奨

ルートユーザーの保護に関するベストプラクティス

ルートユーザーは最高権限を持つため、厳重に保護する必要があります。

  1. ルートユーザーにMFAを有効化する:第三者による不正アクセスを防ぐため、必ずMFAを設定します
  2. ルートユーザーのアクセスキーを作成しない:アクセスキーが漏洩すると、アカウント全体が危険にさらされます
  3. 日常的な操作にルートユーザーを使用しない:管理者権限を持つIAMユーザーを作成し、そちらを使用します
  4. ルートユーザーの認証情報を安全に保管する:パスワードは複雑なものを使用し、他のサービスと共有しません

IAMユーザーの作成

IAMユーザーを作成する手順を説明します。AWSマネジメントコンソールから操作を行います。

コンソールからIAMユーザーを作成する手順

  1. IAMコンソールを開き、左側のナビゲーションペインで「ユーザー」を選択します
  2. 「ユーザーを作成」ボタンをクリックします
  3. ユーザー名を入力します(例:admin-user
  4. AWSマネジメントコンソールへのアクセスを許可する場合は、「AWS Management Console へのユーザーアクセスを提供する」にチェックを入れます
  5. パスワードの設定方法を選択します(自動生成またはカスタムパスワード)
  6. 「次へ」をクリックし、許可オプションでポリシーをアタッチします
  7. 設定を確認し、「ユーザーを作成」をクリックします

IAMユーザーの命名規則

IAMユーザー名には以下の規則があります。

  • 最大64文字
  • 使用可能な文字:英数字、プラス(+)、イコール(=)、カンマ(,)、ピリオド(.)、アットマーク(@)、アンダースコア(_)、ハイフン(-)
  • 同一アカウント内で一意である必要がある
  • 大文字と小文字を区別する

実務では、以下のような命名規則を採用することが多いです。

# 人間ユーザーの例
tanaka.taro
suzuki.hanako

# サービスアカウントの例
svc-app-backend
svc-batch-processor

IAMグループによる権限管理

IAMグループは、IAMユーザーの集合です。グループにポリシーをアタッチすることで、所属するすべてのユーザーに同じ権限を付与できます。

グループを使用するメリット

グループを使用することで、以下のメリットが得られます。

  1. 権限管理の効率化:個々のユーザーではなくグループ単位で権限を管理できます
  2. 一貫性の確保:同じ役割を持つユーザーに確実に同じ権限を付与できます
  3. 変更の容易さ:ポリシーの変更がグループ全体に即座に反映されます
  4. 可視性の向上:誰がどの権限を持っているかを把握しやすくなります

グループ設計のベストプラクティス

グループは職務や役割に基づいて設計します。

graph TB
    subgraph "IAMグループの設計例"
        subgraph "Administrators"
            A1[admin-user-1]
            A2[admin-user-2]
        end
        subgraph "Developers"
            D1[dev-user-1]
            D2[dev-user-2]
            D3[dev-user-3]
        end
        subgraph "ReadOnlyUsers"
            R1[readonly-user-1]
            R2[readonly-user-2]
        end
    end
    
    AP[AdministratorAccess] -->|アタッチ| Administrators
    DP[PowerUserAccess] -->|アタッチ| Developers
    RP[ReadOnlyAccess] -->|アタッチ| ReadOnlyUsers

一般的なグループの例として、以下のようなものがあります。

グループ名 用途 推奨ポリシー
Administrators 管理者 AdministratorAccess
Developers 開発者 PowerUserAccess または カスタムポリシー
Operations 運用担当 運用に必要なサービスへのアクセス
ReadOnlyUsers 監査・閲覧専用 ReadOnlyAccess
BillingUsers 請求情報閲覧 Billing または AWSBillingReadOnlyAccess

グループの制約事項

IAMグループには以下の制約があります。

  • グループのネスト(グループ内にグループを含める)はできない
  • 1つのユーザーは最大10個のグループに所属できる
  • 1つのアカウントで作成できるグループ数はデフォルトで300(上限緩和可能)
  • グループ自体はサインインに使用できない

MFA(多要素認証)の設定

MFA(Multi-Factor Authentication)は、ユーザー名とパスワードに加えて、第2の認証要素を要求するセキュリティ機能です。AWSでは、すべてのIAMユーザー、特に管理者権限を持つユーザーにMFAを有効化することを強く推奨しています。

MFAの認証要素

MFAは以下の3つの認証要素のうち、2つ以上を組み合わせます。

認証要素 説明
知識情報 本人だけが知っている情報 パスワード、PIN
所持情報 本人だけが持っている物 スマートフォン、セキュリティキー
生体情報 本人固有の身体的特徴 指紋、顔認証

AWSで利用可能なMFAデバイス

AWSでは以下のMFAデバイスをサポートしています。

パスキーとセキュリティキー

FIDO標準に基づいた認証方式です。パスキーは指紋や顔認証を使用してデバイス間で同期され、セキュリティキー(YubiKeyなど)はフィッシング耐性が高い物理デバイスです。

仮想MFAデバイス

スマートフォンアプリを使用したTOTP(時間ベースのワンタイムパスワード)認証です。以下のアプリが利用可能です。

  • Google Authenticator
  • Microsoft Authenticator
  • Twilio Authy
  • Duo Mobile

ハードウェアTOTPトークン

タレス社が提供する物理的なトークンデバイスです。AWS専用に設計されており、高いセキュリティが求められる環境で使用されます。

仮想MFAデバイスの設定手順

最も一般的な仮想MFAデバイスの設定手順を説明します。

  1. スマートフォンに認証アプリ(Google Authenticatorなど)をインストールします
  2. IAMコンソールで、ユーザーのセキュリティ認証情報タブを開きます
  3. 「MFAデバイスの割り当て」をクリックします
  4. デバイス名を入力し、「認証アプリケーション」を選択して「次へ」をクリックします
  5. 「QRコードを表示」をクリックし、認証アプリでスキャンします
  6. 認証アプリに表示される連続した2つのMFAコードを入力します
  7. 「MFAを追加」をクリックして完了します

MFAの強制適用

組織のセキュリティポリシーとして、MFAを設定していないユーザーの操作を制限することができます。以下のIAMポリシーは、MFAが有効でない場合にほとんどの操作を拒否します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowViewAccountInfo",
      "Effect": "Allow",
      "Action": [
        "iam:GetAccountPasswordPolicy",
        "iam:ListVirtualMFADevices"
      ],
      "Resource": "*"
    },
    {
      "Sid": "AllowManageOwnPasswords",
      "Effect": "Allow",
      "Action": [
        "iam:ChangePassword",
        "iam:GetUser"
      ],
      "Resource": "arn:aws:iam::*:user/${aws:username}"
    },
    {
      "Sid": "AllowManageOwnMFA",
      "Effect": "Allow",
      "Action": [
        "iam:CreateVirtualMFADevice",
        "iam:DeleteVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:ListMFADevices",
        "iam:ResyncMFADevice"
      ],
      "Resource": [
        "arn:aws:iam::*:mfa/${aws:username}",
        "arn:aws:iam::*:user/${aws:username}"
      ]
    },
    {
      "Sid": "DenyAllExceptListedIfNoMFA",
      "Effect": "Deny",
      "NotAction": [
        "iam:CreateVirtualMFADevice",
        "iam:EnableMFADevice",
        "iam:GetUser",
        "iam:ListMFADevices",
        "iam:ListVirtualMFADevices",
        "iam:ResyncMFADevice",
        "sts:GetSessionToken"
      ],
      "Resource": "*",
      "Condition": {
        "BoolIfExists": {
          "aws:MultiFactorAuthPresent": "false"
        }
      }
    }
  ]
}

AWS CLIの認証情報設定

AWS CLIは、コマンドラインからAWSサービスを操作するためのツールです。CLIを使用するには、認証情報の設定が必要です。

アクセスキーの作成

AWS CLIで認証するためのアクセスキーを作成します。

  1. IAMコンソールでユーザーを選択します
  2. 「セキュリティ認証情報」タブを開きます
  3. 「アクセスキー」セクションで「アクセスキーを作成」をクリックします
  4. ユースケースとして「コマンドラインインターフェイス(CLI)」を選択します
  5. 確認のチェックボックスにチェックを入れ、「次へ」をクリックします
  6. 説明タグを入力(任意)し、「アクセスキーを作成」をクリックします
  7. アクセスキーIDとシークレットアクセスキーを安全に保存します

シークレットアクセスキーは作成時に一度しか表示されません。紛失した場合は、新しいアクセスキーを作成する必要があります。

AWS CLIの設定

AWS CLIをインストールした後、aws configureコマンドで認証情報を設定します。

1
aws configure

以下の情報を順番に入力します。

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

設定された認証情報は、以下のファイルに保存されます。

  • ~/.aws/credentials:アクセスキーとシークレットキー
  • ~/.aws/config:リージョンと出力形式

名前付きプロファイルの使用

複数のAWSアカウントを使い分ける場合は、名前付きプロファイルを使用します。

1
2
3
4
5
# developmentプロファイルの設定
aws configure --profile development

# productionプロファイルの設定
aws configure --profile production

プロファイルを指定してコマンドを実行するには、--profileオプションを使用します。

1
2
3
4
5
# developmentプロファイルでS3バケット一覧を取得
aws s3 ls --profile development

# productionプロファイルでEC2インスタンス一覧を取得
aws ec2 describe-instances --profile production

環境変数AWS_PROFILEを設定することで、デフォルトのプロファイルを切り替えることもできます。

1
2
export AWS_PROFILE=development
aws s3 ls  # developmentプロファイルが使用される

アクセスキーのセキュリティベストプラクティス

アクセスキーは漏洩すると重大なセキュリティリスクとなるため、以下のベストプラクティスを遵守します。

  1. アクセスキーをコードにハードコードしない:環境変数、AWS Systems Manager Parameter Store、AWS Secrets Managerを使用します
  2. 定期的にアクセスキーをローテーションする:90日以内のローテーションが推奨されています
  3. 未使用のアクセスキーを削除する:使用していないアクセスキーは速やかに削除します
  4. 最小権限の原則を適用する:アクセスキーに関連付けるポリシーは必要最小限にします
  5. GitHubなどのリポジトリにコミットしない.gitignoreに認証情報ファイルを追加します

IAM Identity Centerの推奨

2024年以降、AWSは長期的なアクセスキーの代わりに、AWS IAM Identity Center(旧AWS SSO)の使用を推奨しています。IAM Identity Centerを使用すると、以下のメリットがあります。

  • 一時的な認証情報を使用するためセキュリティが向上
  • 複数アカウントへのアクセスを一元管理
  • 企業のIDプロバイダー(Okta、Azure ADなど)との連携
  • AWS CLIとの統合(aws sso loginコマンド)

まとめ

本記事では、IAMの基本概念からルートユーザーの保護、IAMユーザーとグループの作成、MFAの設定、AWS CLIの認証情報設定まで解説しました。

IAMはAWSセキュリティの基盤であり、以下のポイントを押さえることが重要です。

  • ルートユーザーは日常的に使用せず、MFAで保護する
  • IAMユーザーとグループを活用して効率的に権限管理を行う
  • MFAを有効化してセキュリティを強化する
  • アクセスキーは慎重に管理し、可能であればIAM Identity Centerを使用する

次回の記事では、IAMロールとポリシーの仕組みについて詳しく解説します。ロールを使用した一時的な認証情報の取得や、ポリシーのJSON構造を理解することで、より柔軟で安全な権限設計ができるようになります。

参考リンク