2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AWS Configの一番簡単なCloudFormationサンプル

Posted at

はじめに

ソリューションアーキテクトプロフェッショナルの勉強をしていて、たびたび出てくるAWS Configが気になったので、CloudFormationで作ってみました。

参考

知識面

よくある「よくない設定をしたら検知」の環境を構築する例を考えます。

  1. まず、事前に以下を作ります。

    • S3
      • 情報の保存先
    • IAMロール
      • AWS Configが行う操作がまとめて許可されたポリシーを付与
      • 上記S3への書き込み権限を付与
  2. 次に以下の2つを一緒に作ります。リージョンに一つだけ作れます。

    • レコーダー
      • 設定を収集するリソースのタイプを設定
    • 配信チャンネル
      • レコーダーが収集した情報の保存先を設定
  3. 最後に検知の仕組みを作ります。

    • ルール
      • 検知しようとしている「よくない設定」を設定

上記について、コンソールとCLIから作るとどうなるのか、公式の記載について以下にまとめてみました。

コンソールから作る場合(1-Clickセットアップ)

  • S3 : 決められた名前で自動作成。既にある場合はそのまま利用。
  • IAMロール : 自動で作成。
  • レコーダー : すべてのリソースが対象。
  • 配信チャンネル : 決められた名前のバケットに出力。
  • ルール : 作成されない。自分で要作成。

全てのリソースを対象として作成されます。リソースを作成・変更するたびにConfigが記録し課金が発生しますので、よくハンズオンなどされる方は気を付けた方が良いかと思います。

コンソールから作る場合(手動セットアップ)

  • S3 : 自動作成、または自身で作成したものを指定可能。
  • IAMロール : 自動作成、または自身で作成したものを指定可能。
  • レコーダー : すべて、または任意で選択可能。
  • 配信チャンネル : 指定したS3に出力。SNSを追加で指定可能。
  • ルール : 指定可能。スキップも可能。

「特定のリソースタイプのみ監視」の場合はこちらがいいです。ルールも一緒に作ることができます。

CLIから作る場合

  • S3 : 要事前作成。
  • IAMロール : 要事前作成。
  • レコーダー : 要作成。
    • 作っただけでは起動せず、配信チャンネル作成後に要起動。
  • 配信チャンネル : 要作成。
  • ルール : 要作成。

CloudFormationで作成

ここからは自作した部分になります。

コードは以下のようになります。シンプルにS3、IAMロール、レコーダー、配信チャンネルの4つを作っています。
監視リソースタイプはS3のみで、作成したS3に出力します。
出力先のS3は、削除時に中身があるとエラーになるので、DeletionPolicy: Retain(保持)にしています。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  BucketForDeliveryChannel:
    Type: AWS::S3::Bucket
    DeletionPolicy: Retain

  RoleForConfigRecorder:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - config.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWS_ConfigRole
      Policies:
        # 配信先への書き込み権限
        - PolicyName: ConfigPolicy
          PolicyDocument:
            Version: 2012-10-17
            Statement:
              - Effect: Allow
                Action:
                  - s3:PutObject*
                Resource:
                  - !Sub arn:aws:s3:::${BucketForDeliveryChannel}/*
                Condition:
                  StringLike:
                    s3:x-amz-acl: bucket-owner-full-control

  ConfigRecorder:
    Type: AWS::Config::ConfigurationRecorder
    Properties:
      RoleARN: !GetAtt RoleForConfigRecorder.Arn
      RecordingGroup:
        # https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/resource-config-reference.html
        ResourceTypes:
          - AWS::S3::Bucket
    DependsOn: 
      - BucketForDeliveryChannel
      - RoleForConfigRecorder

  ConfigDeliveryChannel:
    Type: AWS::Config::DeliveryChannel
    Properties:
      S3BucketName: !Ref BucketForDeliveryChannel
    DependsOn: 
      - BucketForDeliveryChannel
      - RoleForConfigRecorder

注意点があり、「レコーダーと配信チャンネルは、同時に作らなければいけない(2つの作成順序に前後の依存を持たせてはいけない)」という点です。

依存を持たせると作成が途中で止まったりします。

これで作成するとコンソールの画面も変わります。作成前のTOPは以下でした。
image.png

作成後は以下のように、セットアップ後、という形になりました。
image.png

ルールを作成するコードは以下になります。今回は「パブリックアクセスブロックがされていないバケットを検知」というルールにしました。

AWSTemplateFormatVersion: 2010-09-09

Resources:
  ConfigRule:
    Type: AWS::Config::ConfigRule
    Properties:
      Source:
        Owner: AWS
        # https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/managed-rules-by-aws-config.html
        SourceIdentifier: S3_BUCKET_LEVEL_PUBLIC_ACCESS_PROHIBITED

ルールは自作もできるのですが、AWSのマネージドルールにパラメータを渡すだけ、が楽です。今回も「S3のパブリックアクセスブロック無効」というテンプレートがあったので、その識別子を利用しています。このテンプレートにはパラメータはありませんので、識別子を指定するだけでした。

テンプレートと識別子は以下にあります。

スタック作成したら即検知されました。先ほど、配信チャンネル用に作成したバケットが検知されました。
image.png
image.png

片付け

スタックを2つ作っただけなので、作成順序と逆に削除していくだけです。
S3は削除ポリシーを保持にしていたので、別途中身を空にして削除してください。

画面もセットアップの段階に戻りました。
image.png

おわりに

今回はAWS Configについて学んだことを記事にしました。
独自の言葉が多くてとっつきにくかったですが、まずレコーダーと配信チャンネルから覚えていけば、理解が進むと思います。
利用している方や、認定に向けての勉強中の方のお力になれれば幸いです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?