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グループの作成
- AWSマネジメントコンソールにサインインします。
- サービス検索窓で「IAM」と入力し、IAMダッシュボードを開きます。
- 左側のナビゲーションペインから「グループ」を選択し、「グループを作成」をクリックします。
- グループ名(例:
EC2ReadOnlyGroup)を入力します。 - ポリシーのアタッチ画面で、「
AmazonEC2ReadOnlyAccess」というAWS管理ポリシーを検索し、チェックを入れます。 - 「グループを作成」をクリックします。
ステップ2: IAMユーザーの作成とグループへの追加
- 左側のナビゲーションペインから「ユーザー」を選択し、「ユーザーを作成」をクリックします。
- ユーザー名(例:
test-user)を入力します。 - 「AWS マネジメントコンソールへのアクセス」にチェックを入れ、「IAM ユーザーを作成します」を選択します。
- コンソールのパスワードを設定します(自動生成またはカスタム)。
- 次の「許可を設定」ステップで、「ユーザーをグループに追加」を選択し、先ほど作成した
EC2ReadOnlyGroupにチェックを入れます。 - 確認画面で内容を確認し、「ユーザーを作成」をクリックします。
- 重要: 最後の画面に表示されるコンソールのサインインURL、ユーザー名、パスワードを安全な場所に控えておきます。
ステップ3: 動作確認
- 一度現在のコンソールからサインアウトします。
- 先ほど控えたサインインURLにアクセスし、作成した
test-userの認証情報でサインインします。 - EC2ダッシュボードにアクセスし、インスタンスやセキュリティグループなどの情報を閲覧できることを確認します。
- インスタンスを起動しようとすると、権限がないためエラーになることを確認します。
これで、特定の権限(EC2の読み取り専用)を持つユーザーとグループの作成が完了しました。
IAMのベストプラクティス
AWS環境を安全に運用するために、以下のベストプラクティスを強く推奨します。
- ルートユーザーは使わない: 日常的な作業にはIAMユーザーを使用し、ルートユーザーはアカウントの管理など、特別なタスクにのみ使用します。ルートユーザーには必ずMFA(多要素認証)を設定しましょう。
-
最小権限の原則: ユーザーやサービスには、タスクの実行に必要な最小限の権限のみを付与します。不要に強力な権限(例:
AdministratorAccess)を与えるのは避けましょう。 - MFAを有効にする: パスワードだけでは不十分です。特に権限の強いユーザーには、MFAを設定してセキュリティを強化しましょう。
- アクセスキーのローテーション: プログラムからAWSを操作するためにアクセスキーを発行した場合、定期的にキーをローテーション(再作成)して、漏洩リスクを低減します。
- IAMロールを活用する: EC2インスタンスやLambda関数など、AWSサービスに権限を与える場合は、アクセスキーを直接埋め込むのではなく、IAMロールを使用します。
-
AWS管理ポリシーとカスタマー管理ポリシー: まずはAWSが提供する管理ポリシー(例:
AmazonS3ReadOnlyAccess)の利用を検討し、要件に合わない場合は、独自のカスタマー管理ポリシーを作成します。
まとめ
IAMはAWSのセキュリティの要です。ユーザー、グループ、ロール、ポリシーといったコンポーネントを正しく理解し、ベストプラクティスに従って設定することで、AWSリソースへのアクセスをきめ細かく、かつ安全に管理することができます。
今回紹介した内容をベースに、ぜひご自身のAWS環境のIAM設定を見直し、よりセキュアな状態を目指してください。
Discussion