CloudFormationによる【IAM】の構築


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

皆様こんにちは。
今回はCloudFormatonを利用して高可用性アーキテクトの構築をしていきます。
この記事ではIAMポリシー、IAMロールの作成、IAMポリシーをIAMロールに追加できているかマネージメントコンソールで確認します。

1.高可用性アーキテクト構築目次

目次はこちら

2.IAMサービス概要

2-1.IAMとは

AWS Identity and Access Management (IAM) は、AWS リソースへのアクセスを安全に管理するためのウェブサービスです。IAM により、誰を認証 (サインイン) し、誰にリソースの使用を承認する (アクセス権限を持たせる) かを制御します。
参照:IAMサービス概要

2-2.アカウント登録

  1. AWSを利用するには最初にAWSアカウントを作成する必要があり、アカウント作成時に指定したメールアドレスとパスワードを使用することで、AWSマネジメントコンソールにログインできます。

2-3.MFA(多要素認証)

ソフトウェア ハードウェア ハードウェア
製品 Google Authenticator,
Authy 2-Factor Authentication
Yubikeyセキュリティー Gemalto
形式 スマホアプリ USBスティック型 トークン型
コスト 無料 有料(4,500円程度) 有料(2,000円程度)
機能 単一のデバイスで複数のトークンをサポート 単一のセキュリティキーで複数のルートユーザー/IAMユーザーをサポート 不正開封防止用キーホルダー型デバイスで内蔵電池により単体でOTPを発行

2-4.ルートユーザー

  • IAMユーザーは個人のアカウントに紐づくアカウントです。その個人に必要な権限を設定したIAMポリシーをアタッチします。

  • 最初に作成されたAWSアカウントは「ルートユーザー」と呼びます。アカウント内の全てのAWSのサービス、リソースに対しフルアクセス権限があるためルートユーザーの乗っ取りなどの被害を防ぐためにセキュリティ対策をします。

  • セキュリティ強化。アカウントに対し強度の高いパスワード設定、ログイン時のMFA(多要素認証)を設定する必要があります。

2-5.IAMユーザー

  • ルートユーザーはAWSの全ての操作が可能なため、管理者アクセスが必要な担当者ごとに新しいIAMユーザー、IAMグループを作成します。
  • AdministratorAccess管理ポリシーをアタッチした「管理者」ユーザーグループにそのユーザーを配置することで、そのユーザーを管理者にします。
  • その後、管理者ユーザーグループのユーザーは AWS アカウントのユーザーグループ、ユーザーなどを設定する必要があります。その後の操作はすべて、ルートユーザーではなくAWS アカウントのユーザーとそのキーを通じて行う必要があります。ただし、一部のアカウントおよびサービス管理タスクでは、ルートユーザー認証情報を使用してログインする必要があります。
    参照:最初の IAM 管理者のユーザーおよびユーザーグループの作成

2-6.IAMポリシー

  • 今回はCloudWatch、S3の権限を設定したポリシーを作成したいため、それをアタッチしたIAMロールを作成します。
  • IAMロールを作成し、EC2にアタッチしなければカスタムメトリクスの発行とS3に対しての操作ができないため上記の条件を含むIAMロールを作成します。
  • 上記の内容を作成しても権限が付与されていません。そのためIAMポリシーは設定するAWSサービス、ストレージのリソースに対しアクセス制御の許可、拒否を定義します。

2-7.類似AWSリソース

  • AWS Sngle Sign-On」(AWS SSO
    AWS上でワークフォースアイデンティティを作成、接続しAWS組織全体のアクセスを一元的に管理するものです。
  • Amaon Cognito
    Web、モバイルアプリの認証、承認、ユーザー管理機能を提供

3.構築したいIAM構成図

file

  1. まず IAMポリシーにカスタム管理ポリシーで”CloudWatchAlarm”、”S3”のポリシー宣言をします。
  2. CloudWwatchAlarmにカスタムメトリクスをプッシュする権限をもったポリシー設定
  3. インスタンスがS3の読み書きをできる権限をもったポリシー宣言をします。

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

#IAMPolicy
Resources:
  ManagedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: hebiishi-IAM-CF
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "cloudwatch:PutMetricData"
              - "ec2:DescribeTags"
            Resource: "*"
          - Effect: Allow
            Action:
              - "s3:ListBucket"
            Resource: "arn:aws:s3:::hebiishi-wordpress-s3"
          - Effect: Allow
            Action:
              - "s3:PutObject"
              - "s3:GetObject"
              - "s3:DeleteObject"
            Resource: "arn:aws:s3:::hebiishi-wordpress-s3/*"
  Role:
    Version: "2012-10-17"
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - "sts:AssumeRole"
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::xxx:policy/hebiishi-IAM-CF
  InstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Path: /
      Roles:
        - !Ref Role

Outputs:
  InstanceProfileOutput:
    Value: !Ref InstanceProfile
    Export:
      Name: InstanceProfile

5.IAM構築手順

下記のIAMポリシーを作成します。

5-1.IAMポリシーの作成

CloudWatchAlarm

  • CloudWwatchAlarmにカスタムメトリクスをプッシュする権限をもったポリシー設定
  • Type: AWS::IAM::ManagedPolicy リソースタイプを記述します。
  • Version: "2012-10-17" 日付は最新のテンプレート形式のバージョンになります。*現在の唯一の有効な値になります。
  • Effect: Statement内のActionを許可するか拒否するか指定
  • Action: Effectによって許可またはDeny拒否される操作を定義する
  • Resource: EffectとActionの対象となるリソース
    引用:ポリシー要素の指定
使用オプション 設定値 説明
ManagedPolicyName hebiishi-IAM-CF IAMポリシー名
Action ①cloudwatch:PutMetricData,
②ec2:DescribeTags
①インスタンスがカスタムメトリクスを発行できる権限付与
②カスタムメトリクス発行時に必要なインスタンス情報をインスタンス自身が取得できる権限を与えています。
Resource "*" EffectとActionの対象となるリソース 

S3

  • インスタンスがS3の読み書きをできる権限をもったポリシー宣言をします。
  • s3:ListBucketで情報取得できる権限付与する指定をしています。
  • s3:(PutObject、GetObject、DeleteObject)で下記の指定値を設定しています。
使用オプション 設定値 説明
Action ①s3:ListBucket
②s3:PutObject
③s3:GetObject
④s3:DeleteObject 
①リソースで指定したS3の情報を取得できる権限付与
②インスタンスがS3に対し画像をアップロードできる権限付与
③インスタンスがS3に対し画像を取得できる権限付与
④インスタンスがS3の画像を削除できる権限
Resource arn:aws:s3:::hebiishi-wordpress-s3 特定のS3を指定
ManagedPolicyArns 1.arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
2.arn:aws:iam::aws:policy/AmazonS3FullAccess
1.CloudWatch 収集(ログ&カスタムメトリクス)
2.S3に対しWordPress画像のアップロード
#IAMPolicy
Resources:
  ManagedPolicy:
    Type: AWS::IAM::ManagedPolicy
    Properties:
      ManagedPolicyName: hebiishi-IAM-CF
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "cloudwatch:PutMetricData"
              - "ec2:DescribeTags"
            Resource: "*"
          - Effect: Allow
            Action:
              - "s3:ListBucket"
            Resource: "arn:aws:s3:::hebiishi-wordpress-s3"
          - Effect: Allow
            Action:
              - "s3:PutObject"
              - "s3:GetObject"
              - "s3:DeleteObject"
            Resource: "arn:aws:s3:::hebiishi-wordpress-s3/*"

5-2.IAMロールの作成

下記はIAMロールの設定項目です。

使用オプション 設定値 説明
Action sts:AssumeRole ロールに対し付与するアクション
ManagedPolicyArns arn:aws:iam::xxx:policy/hebiishi-IAM-CF アタッチしたいポリシーのARNを入力
  Role:
    Version: "2012-10-17"
    Type: "AWS::IAM::Role"
    Properties:
      AssumeRolePolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - ec2.amazonaws.com
            Action:
              - "sts:AssumeRole"
      Path: /
      ManagedPolicyArns:
        - arn:aws:iam::xxx:policy/hebiishi-IAM-CF

5-3.確認

IAMポリシー確認内容

  • AWSマネジメントコンソールから、IAMポリシー、IAMロールが作成されているか確認します。
  • IAMポリシーを作成時に指定した名前で、IAMポリシーマネジメントコンソールで検索し指定したポリシー名をクリックします。
    file
  • ”ポリシーの使用状況”からアタッチされている状況が確認できました。
    file

IAMロール確認内容

  • IAMロールのマネージドコンソールから作成したIAMロールが確認できます。
    file
    ”アクセスアドバイザー”からロールに付与されたサービスのアクセス許可が確認できます。
    file

6.感想

最初はIAMポリシー、IAMロールの公式ドキュメントを参照しても記述内容に問題がある事に気づくのに時間が掛かっていて困りましたが、構築したい内容の作成できて良かったです。今後作成する際に、今回作成した方法を参考に知識、技術をい深めていきたいと思います。

7.参照

参照:IAMサービス概要

参照:AWS CloudFormation テンプレート

Last modified: 2022-06-09

Author