🔐

AWS IAMを完全に理解する:ユーザー、グループ、ロール、ポリシーの基本からベストプラクティスまで

に公開

はじめに

AWS (Amazon Web Services) を利用する上で、セキュリティは最も重要な要素の一つです。その中心的な役割を担うのが IAM (Identity and Access Management) です。IAMを正しく理解し、設定することは、AWS環境を安全に保つための第一歩です。

現在AWSの勉強をしていて、AWS IAMの基本的な概念から、実際に手を動かしてユーザーやグループを作成するハンズオン、そしてセキュリティを強化するためのベストプラクティスまで、幅広く調べた事を記事にしてまとめてみようと思います。

IAMとは?

IAMは、「誰が」「どのAWSリソースに」「どのような操作をできるか」 を管理するためのサービスです。IAMを利用することで、AWSアカウントへのアクセスを安全に制御できます。

例えば、以下のような制御が可能です。

  • 開発者Aには、特定のEC2インスタンスの起動と停止だけを許可する。
  • 開発チーム全体には、特定のS3バケットへの読み取りアクセスのみを許可する。
  • EC2インスタンスに、S3バケットへファイルをアップロードする権限を一時的に付与する。

これらのアクセス制御を、ユーザー名とパスワード、アクセスキーといった認証情報と、権限を定義したポリシードキュメントを組み合わせて実現します。

IAMの主要なコンポーネント

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

1. IAMユーザー

IAMユーザーは、AWSとやり取りをする「人」または「アプリケーション」を表すエンティティです。各ユーザーは、一意の名前と認証情報(パスワード、アクセスキーなど)を持っています。

AWSアカウントを作成した際に最初に作られる「ルートユーザー」とは異なり、IAMユーザーにはデフォルトでは何の権限もありません。後述する「ポリシー」をアタッチ(関連付け)することで、初めてAWSリソースへのアクセスが可能になります。

2. IAMグループ

IAMグループは、IAMユーザーの集合です。複数のユーザーに対して同じ権限をまとめて付与したい場合に便利です。

例えば、「Developers」というグループを作成し、そのグループに「EC2のフルアクセス権限」を付与します。そして、開発者A、B、Cを「Developers」グループに追加すれば、3人全員がEC2のフルアクセス権限を持つことになります。新しい開発者Dがチームに加わった際も、グループに追加するだけで同じ権限を簡単に付与できます。

3. IAMロール

IAMロールは、特定の権限を持つ、引き受け可能なIDです。ユーザーやグループに似ていますが、特定のユーザーに永続的に関連付けられるものではなく、一時的な認証情報 を提供する点が大きな違いです。

主に、以下のようなケースで利用されます。

  • EC2インスタンスなどのAWSサービスへの権限付与: EC2インスタンスがS3バケットにアクセスする必要がある場合、EC2インスタンスにIAMロールを割り当てることで、一時的な認証情報を使って安全にS3へアクセスできます。
  • 別のAWSアカウントへのアクセス許可: アカウントAのリソースに、アカウントBのユーザーがアクセスする必要がある場合、アカウントAでロールを作成し、アカウントBのユーザーがそのロールを引き受ける(AssumeRole)ことで、クロスアカウントアクセスを実現します。

4. IAMポリシー

IAMポリシーは、権限そのものを定義するJSONドキュメントです。ポリシーには、「どのサービス (Effect)」「どのリソース (Resource)」「どのアクション (Action)」を「許可 (Allow)」または「拒否 (Deny)」するかが記述されています。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::my-example-bucket/*"
            ]
        }
    ]
}

このポリシーは、「my-example-bucketというS3バケット内のすべてのオブジェクトに対して、GetObject(オブジェクトの取得)アクションを許可する」という意味になります。

このポリシーをユーザー、グループ、またはロールにアタッチすることで、権限が有効になります。

ハンズオン:IAMユーザーとグループを作成してみよう

それでは、実際にIAMユーザーとグループを作成し、ポリシーをアタッチしてみましょう。

ステップ1: IAMグループの作成

  1. AWSマネジメントコンソールにサインインします。
  2. サービス検索窓で「IAM」と入力し、IAMダッシュボードを開きます。
  3. 左側のナビゲーションペインから「グループ」を選択し、「グループを作成」をクリックします。
  4. グループ名(例: EC2ReadOnlyGroup)を入力します。
  5. ポリシーのアタッチ画面で、「AmazonEC2ReadOnlyAccess」というAWS管理ポリシーを検索し、チェックを入れます。
  6. 「グループを作成」をクリックします。

ステップ2: IAMユーザーの作成とグループへの追加

  1. 左側のナビゲーションペインから「ユーザー」を選択し、「ユーザーを作成」をクリックします。
  2. ユーザー名(例: test-user)を入力します。
  3. 「AWS マネジメントコンソールへのアクセス」にチェックを入れ、「IAM ユーザーを作成します」を選択します。
  4. コンソールのパスワードを設定します(自動生成またはカスタム)。
  5. 次の「許可を設定」ステップで、「ユーザーをグループに追加」を選択し、先ほど作成した EC2ReadOnlyGroup にチェックを入れます。
  6. 確認画面で内容を確認し、「ユーザーを作成」をクリックします。
  7. 重要: 最後の画面に表示されるコンソールのサインインURL、ユーザー名、パスワードを安全な場所に控えておきます。

ステップ3: 動作確認

  1. 一度現在のコンソールからサインアウトします。
  2. 先ほど控えたサインインURLにアクセスし、作成した test-user の認証情報でサインインします。
  3. EC2ダッシュボードにアクセスし、インスタンスやセキュリティグループなどの情報を閲覧できることを確認します。
  4. インスタンスを起動しようとすると、権限がないためエラーになることを確認します。

これで、特定の権限(EC2の読み取り専用)を持つユーザーとグループの作成が完了しました。

IAMのベストプラクティス

AWS環境を安全に運用するために、以下のベストプラクティスを強く推奨します。

  • ルートユーザーは使わない: 日常的な作業にはIAMユーザーを使用し、ルートユーザーはアカウントの管理など、特別なタスクにのみ使用します。ルートユーザーには必ずMFA(多要素認証)を設定しましょう。
  • 最小権限の原則: ユーザーやサービスには、タスクの実行に必要な最小限の権限のみを付与します。不要に強力な権限(例: AdministratorAccess)を与えるのは避けましょう。
  • MFAを有効にする: パスワードだけでは不十分です。特に権限の強いユーザーには、MFAを設定してセキュリティを強化しましょう。
  • アクセスキーのローテーション: プログラムからAWSを操作するためにアクセスキーを発行した場合、定期的にキーをローテーション(再作成)して、漏洩リスクを低減します。
  • IAMロールを活用する: EC2インスタンスやLambda関数など、AWSサービスに権限を与える場合は、アクセスキーを直接埋め込むのではなく、IAMロールを使用します。
  • AWS管理ポリシーとカスタマー管理ポリシー: まずはAWSが提供する管理ポリシー(例: AmazonS3ReadOnlyAccess)の利用を検討し、要件に合わない場合は、独自のカスタマー管理ポリシーを作成します。

まとめ

IAMはAWSのセキュリティの要です。ユーザー、グループ、ロール、ポリシーといったコンポーネントを正しく理解し、ベストプラクティスに従って設定することで、AWSリソースへのアクセスをきめ細かく、かつ安全に管理することができます。

今回紹介した内容をベースに、ぜひご自身のAWS環境のIAM設定を見直し、よりセキュアな状態を目指してください。

GitHubで編集を提案

Discussion