AWSのIAMユーザー、IAMロール、IAMポリシーが混同するので整理する
AWSのIAM(Identity and Access Management)は、AWSリソースへのアクセスをセキュアにコントロールするためのサービスです。IAMユーザー、IAMロール、IAMポリシーはその主要なコンポーネントです。それぞれについて説明します。
IAMユーザー
- IAMユーザーはAWS管理コンソールやAWS CLI/APIにサインインするためのエンティティです。
- 一般的には、組織内の個々の人間やアプリケーションがIAMユーザーとして作成されます。
- IAMユーザーにはアクセスキー(アクセスキーIDとシークレットアクセスキー)やユーザー名/パスワードのような認証情報が関連付けられています。
- このユーザーには、特定のAWSリソースに対するアクセス権限(IAMポリシー)をアタッチできます。
IAMロール
- IAMロールはAWSリソース(EC2インスタンス、Lambda関数など)またはAWS外部のエンティティ(ユーザーやアプリケーション)が一時的にアダプトできる権限セットです。
- ロールは永続的な認証情報(アクセスキーなど)を持たず、必要なときに一時的な認証情報が生成されます。
- これは、IAMユーザーよりもセキュリティが強化されており、一時的な権限昇格やクロスアカウントアクセス、AWSサービス間の連携によく使われます。
IAMポリシー
- IAMポリシーは、JSON形式で書かれたドキュメントであり、特定のアクションとリソースに対する許可または拒否ルールを定義します。
- ポリシーはIAMユーザーやIAMロールにアタッチすることで、それらのエンティティが何をできるのか、どのリソースにアクセスできるのかを制御します。
これらを組み合わせて使用することで、細かくアクセス制御を行うことができます。例えば、特定のIAMユーザーには読み取り専用のアクセスを許可し、特定のIAMロールには書き込みアクセスを許可する、といったことが可能です。
ユースケース
以下にそれぞれの具体的なユースケースを説明します。
IAMユーザーのユースケース
-
開発者のアクセス制御: 企業内の開発者にAWSコンソールへのログイン権限を与え、特定のAWSサービス(例:S3, EC2)に対する読み取り/書き込み権限を制限します。
-
CI/CDツール: JenkinsやTravis CIなどのCI/CDツールがAWSリソースにアクセスする必要がある場合、IAMユーザーを作成して専用のアクセスキーを発行します。
-
アプリケーション認証: オンプレミスのアプリケーションからAWSリソースにアクセスする必要がある場合、IAMユーザーを使用して認証と認可を行います。
IAMロールのユースケース
-
一時的な権限昇格: 管理者が一時的に高い権限が必要な操作(例:データベースのバックアップ)を行う場合、一時的な認証情報を用いてIAMロールをアサインします。
-
クロスアカウントアクセス: 別のAWSアカウントのリソースにアクセスする必要がある場合、IAMロールを使って安全にアクセスします。
-
AWSサービス間の連携: EC2インスタンスがS3バケットにデータを保存する場合など、AWSサービスが他のAWSサービスにアクセスする必要がある場面でIAMロールが使用されます。
-
Federated Login: オンプレミスのActive DirectoryやGoogleのような第三者の認証サービスを用いて、一時的なAWS認証情報を発行します。
IAMポリシーのユースケース
-
最小権限の原則: あるユーザーが特定のS3バケットに対してのみ読み取りアクセスを持つように、IAMポリシーを作成します。
-
リソースタグによる動的なアクセス制御: タグが付与されたEC2インスタンスに対する起動/停止操作の権限をIAMポリシーで制御します。
-
時間に基づくアクセス制御: 例えば、平日の9時から18時までだけ特定のDBにアクセスできるようにする、といった時間依存のルールをIAMポリシーで設定します。
これらは基本的な例ですが、IAMユーザー、IAMロール、IAMポリシーを組み合わせて非常に柔軟なアクセス制御が可能です。
Discussion