【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_IAMロール

皆様、お世話になっております。鈴木と申します。
今回はAWS CloudFormationを使用してIAMロールを作成していきたいと思います。

1.目次

目次はこちら

2.要件

  • EC2インスタンスでSSMとCloudWatchエージェントを使用するために必要な権限を付与する。
  • 権限はセキュリティの観点から最小限に制限する。

3.IAMロールについて

IAMロールは、AWSリソースやサービスが特定のアクションを実行するために必要な権限を定義する「セキュリティポリシーの集約」とも言える機能です。
例えば、EC2インスタンスにSSMやCloudWatchエージェントを使用させるためには、IAMロールを作成し、適切なポリシーを付与します。このロールは、そのインスタンスが必要な操作を行う際に必要な権限だけを与えることで、セキュリティリスクを最小限に抑える役割を果たします。

IAMポリシーとの違いについて

類似サービスとしてIAMポリシーが挙げられます。
簡単に表にまとめたので参照ください。

項目 IAMロール ポリシー
定義 AWSリソースやサービスがアクセス権限を持つための「役割」。 アクセス権限を定義するための「ルール」。
役割 具体的なリソースやサービスに権限を付与する。 どのアクションが許可されるかを詳細に指定する。
構成 一つまたは複数のポリシーを含む。 権限を定義するためのJSONまたはYAML形式の文書。
使用場所 EC2インスタンス、Lambda関数、その他のAWSサービスで使用。 IAMユーザー、グループ、ロールにアタッチされる。
管理 AWS Management Console、CLI、またはAPIで作成・管理。 ポリシーを作成・編集し、ロールやユーザーにアタッチ。
AmazonEC2RoleForSSM(EC2インスタンスがSSMを使用するためのロール)。 AmazonS3ReadOnlyAccess(S3バケットの読み取り専用アクセスを許可するポリシー)。

簡単に言うと、IAMロールはEC2インスタンスなどが他のAWSリソースにアクセスするための権限を設定するためのもので、ポリシーの集合体です。一方、ポリシーはユーザーやロールに付与して、特定のアクションやリソースへのアクセスを許可しますが、リソース間の権限許可にはロールを介する必要があります。

4.構成図

file

  1. まずはロールを作成
  2. EC2をSSM操作できるようにIAMロールにAmazonSSMManagedInstanceCoreを付与
  3. CloudWatchエージェント経由でメトリクスを検出できるようにCloudWatchAgentAdminPolicyを付与
  4. 上記2つのポリシーを付与したロールをEC2に付与

5.全体構築ソースコード

YAMLにて記述しております。

AWSTemplateFormatVersion: '2010-09-09'
Resources:
  # EC2用IAMロールの作成
  NaokiRoleEC2:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: 'naoki-role-ec2'  # ロールの名前
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: 'Allow'
            Action:
              - 'sts:AssumeRole'  # EC2インスタンスがこのロールを引き受けることを許可する
            Principal:
              Service:
                - 'ec2.amazonaws.com'  # このロールをEC2インスタンスが使用できるようにする
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/CloudWatchAgentAdminPolicy'  # CloudWatchエージェントの管理ポリシー
        - 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore'  # SSM (Systems Manager) の管理ポリシー
      Tags:
        - Key: 'Name'
          Value: 'naoki-role-ec2'  # タグとしてロールの名前を設定

  # オプション: このロールをEC2インスタンスに自動的にアタッチしたい場合
  # InstanceProfileリソースを使用してEC2インスタンスにアタッチすることができます。
  # EC2インスタンスを追加する場合は、要件に応じて設定してください。
  NaokiInstanceProfile:
    Type: 'AWS::IAM::InstanceProfile'
    Properties:
      Roles:
        - Ref: 'NaokiRoleEC2'  # EC2インスタンスプロファイルにロールをアタッチ

6.ソースコードの詳細

6-1.IAMロールの作成

まずはポリシーを付与する前にロールの作成をしないといけません。

使用するオプション 設定値 説明
Type AWS::IAM::Role IAMロールを作成するためのデフォルトの記述
RoleName naoki-role-ec2 ロールの名前
AssumeRolePolicyDocument
Effect:
Action:
Allow
sts:AssumeRole
EC2インスタンスがこのロールを引き受けることを許可する
Principal:
Service:
ec2.amazonaws.com このロールをEC2インスタンスが使用できるようにする
  # EC2用IAMロールの作成
 NaokiRoleEC2:
    Type: 'AWS::IAM::Role'
    Properties:
      RoleName: 'naoki-role-ec2'  # ロールの名前
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: 'Allow'
            Action:
              - 'sts:AssumeRole'  # EC2インスタンスがこのロールを引き受けることを許可する
            Principal:
              Service:
                - 'ec2.amazonaws.com'  # このロールをEC2インスタンスが使用できるようにする

6-2.IAMポリシーを付与(SSM・CloudWatchエージェント)

上記ロールに付与するポリシーを指定
またロールへのタグの指定

使用するオプション 設定値 説明
ManagedPolicyArns arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
arn:aws:iam::aws:policy/CloudWatchAgentAdminPolicy
SSM (Systems Manager) の管理ポリシー
CloudWatchエージェントの管理ポリシー
Tags Key: Name
Value: naoki-role-ec2
タグのキーと値を設定
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/CloudWatchAgentAdminPolicy'  # CloudWatchエージェントの管理ポリシー
        - 'arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore'  # SSM (Systems Manager) の管理ポリシー
      Tags:
        - Key: 'Name'
          Value: 'naoki-role-ec2'  # タグとしてロールの名前を設定

6-3.EC2インスタンスにIAMロールをアタッチするための設定

EC2インスタンスを作成する際にこのインスタンスプロファイルを指定することで、指定したIAMロールが自動的にインスタンスにアタッチされ、必要な権限を持つことができるようにするために下記ソースコードが必須です。

使用するオプション 設定値 説明
Type AWS::IAM::InstanceProfile インスタンスプロファイルを作成するためのデフォルトの記述
Roles Ref: ‘NaokiRoleEC2’ EC2インスタンスプロファイルにロールをアタッチ
  # オプション: このロールをEC2インスタンスに自動的にアタッチしたい場合
  # InstanceProfileリソースを使用してEC2インスタンスにアタッチすることができます。
  # EC2インスタンスを追加する場合は、要件に応じて設定してください。
  NaokiInstanceProfile:
    Type: 'AWS::IAM::InstanceProfile'
    Properties:
      Roles:
        - Ref: 'NaokiRoleEC2'  # EC2インスタンスプロファイルにロールをアタッチ

7.テスト

上記ではまだEC2,SSM、CloudWatchエージェントの設定は行っていないため
、下記にてテスト実施予定

【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_SSM

【CloudFormation】AWSマルチAZ3層アーキテクチャの構築_CloudWatch・SNS

8.感想

IAMロールをIaCで作成する際、ロールとポリシーの関係を理解し、適切に設定することが重要です。実際に作成したものをテストで実施してリソース間での権限設定が適切に設定されているかを確認したいと思います。

Last modified: 2024-07-31

Author