😀

AWSのIAMユーザー、IAMロール、IAMポリシーが混同するので整理する

2023/10/18に公開

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ユーザーのユースケース

  1. 開発者のアクセス制御: 企業内の開発者にAWSコンソールへのログイン権限を与え、特定のAWSサービス(例:S3, EC2)に対する読み取り/書き込み権限を制限します。

  2. CI/CDツール: JenkinsやTravis CIなどのCI/CDツールがAWSリソースにアクセスする必要がある場合、IAMユーザーを作成して専用のアクセスキーを発行します。

  3. アプリケーション認証: オンプレミスのアプリケーションからAWSリソースにアクセスする必要がある場合、IAMユーザーを使用して認証と認可を行います。

IAMロールのユースケース

  1. 一時的な権限昇格: 管理者が一時的に高い権限が必要な操作(例:データベースのバックアップ)を行う場合、一時的な認証情報を用いてIAMロールをアサインします。

  2. クロスアカウントアクセス: 別のAWSアカウントのリソースにアクセスする必要がある場合、IAMロールを使って安全にアクセスします。

  3. AWSサービス間の連携: EC2インスタンスがS3バケットにデータを保存する場合など、AWSサービスが他のAWSサービスにアクセスする必要がある場面でIAMロールが使用されます。

  4. Federated Login: オンプレミスのActive DirectoryやGoogleのような第三者の認証サービスを用いて、一時的なAWS認証情報を発行します。

IAMポリシーのユースケース

  1. 最小権限の原則: あるユーザーが特定のS3バケットに対してのみ読み取りアクセスを持つように、IAMポリシーを作成します。

  2. リソースタグによる動的なアクセス制御: タグが付与されたEC2インスタンスに対する起動/停止操作の権限をIAMポリシーで制御します。

  3. 時間に基づくアクセス制御: 例えば、平日の9時から18時までだけ特定のDBにアクセスできるようにする、といった時間依存のルールをIAMポリシーで設定します。

これらは基本的な例ですが、IAMユーザー、IAMロール、IAMポリシーを組み合わせて非常に柔軟なアクセス制御が可能です。

Discussion