AWS

AWS ConfigでSecurityGroupの監視と自動修復

NEW 2026年8月24日

目次Category


はじめに

 今回は、AWS ConfigというAWSサービスがどんな風に監視と修復を行っているのかを体験してもらおうと思います。

AWS Configとは

「AWSリソースが、決めたルールを守っているか監視するサービス」

・SecurityGroup(SG)やS3などの設定変更を記録
・違反があれば、設定した内容で修復(削除とか)

 AWS Configの監視範囲は、AWS Configを有効化したリージョンにある指定したリソースすべてになります。
例えば、ap-northeast-1(東京リージョン)で有効化して、SGを監視対象にすると東京リージョン内にあるSGすべてが監視対象になります。
また、AWS Configはリージョン内にいる誰かが有効化すれば、同じAWSアカウントを利用(共有)している人にも反映されます。

AWS Configの料金について

AWS Configは記録をするたびに料金が発生します。記録は、リソース単位で行っていくので10個のリソースがあれば10個の記録が生成されます。設定の変更があれば、新しく記録を生成するので既存の記録は履歴のような形でS3内にのこります。
AWS Configの記録が増えていくと、S3の料金も高くなっていくので注意です。

使用するサービス

それでは、構築に移っていきましょう!

構築手順

2-0.構築するにあたって

 現在いるリージョンにSGを作成している方は、何も作成していない別リージョンに切り替えてから構築してください。
万が一、作成しているSGがAWS Configのルールに抵触していて、自動修復の対象となりインバウンドルールが削除されることを防ぐためにリージョンを分けています。
複数人で行う場合も全員が別リージョンになるようにしてください。
AWS Configはリージョン単位で監視するので、誰かと同じリージョンで行うとできているかの確認ができないためです。

2-1.S3の作成

S3を以下の設定で作成します。このS3にAWS Configで記録した設定変更等のログを保存します。

【名前】s3-[name]-01

 それ以外はデフォルト 

作成後に詳細を開いて、アクセス許可タブを開く。
バケットポリシーを編集して以下の内容にしてください。

AWS Configのアクセス許可するポリシー
----------------------------------------------------
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AWSConfigBucketPermissionsCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:GetBucketAcl",
      "Resource": "arn:aws:s3:::バケット名",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "アカウントID" 
        }
      }
    },
    {
      "Sid": "AWSConfigBucketExistenceCheck",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:ListBucket",
      "Resource": "arn:aws:s3:::バケット名",
      "Condition": {
        "StringEquals": {
          "AWS:SourceAccount": "アカウントID"
        } 
      }
    },
    {
      "Sid": "AWSConfigBucketDelivery",
      "Effect": "Allow",
      "Principal": {
        "Service": "config.amazonaws.com"
      },
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::バケット名/AWSLogs/120822896818/Config/*",
      "Condition": {
        "StringEquals": {
          "s3:x-amz-acl": "bucket-owner-full-control",
          "AWS:SourceAccount": "アカウントID" 
        }
      }
    }
  ]
}

*アカウントIDと作成したバケット名をそれぞれ3か所に記入してください。
*エラーが発生した場合は、スペースによる空白がないか}が抜けてないか確認して下さい

S3の作成は以上です。
次に移りましょう。

2-2.Security Groupの作成

監視対象のSGを以下の内容で作成します。

【名前】agp-config-[name]-01

【説明】AWS Config for practice

【VPC】defalut VPC

 それ以外はデフォルト 

インバウンドルールを後ほど追加します。
作成が終わったら、セキュリティグループIDをコピーして手元に用意して下さい。

では、次へ移ります。

2-3.IAMロールの作成

以下の内容でIAMロールを作成してください。
AWS ConfigがSGを見るための許可と自動修復処理のための許可を設定しています。

【ユースケース】Systems Manager

【許可】インラインポリシーを作成
*インラインポリシーの内容は最後に載せます。

【ロール名】roll-config-[name]-01

 それ以外はデフォルト 

インラインポリシーの内容

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "ConfigSSHRemediation",
			"Effect": "Allow",
			"Action": [
				"ec2:DescribeSecurityGroups",
				"ec2:RevokeSecurityGroupIngress"
			],
			"Resource": "*"
		}
	]
}

*ec2:DescribeSecurityGroups : SGの現在の設定を閲覧する許可
*ec2:RevokeSecurityGroupIngress : SGのインバウンドルールを削除する許可

作成が終わったら、詳細を開いてARNをコピーして手元に用意してください。
次へ進みます。

2-4.AWS Configを有効化

AWS Configを開いてください。”今すぐ始める”とあるのでそれをクリック。

下記の内容で設定を行ってください。

・設定
【記録方法】特定のリソースタイプ

【リソースタイプ】AWS EC2 SecurityGroup       【頻度】連続 *画像は日次となっていますが、どちらでもOK(記録見たい人は連続)

・データガバナンス
【IAMロール】既存のAWS Configサービスリンクロール

・配信チャネル(記録の保存先)
【Amazon S3 バケット】アカウントからバケット選択

【S3バケット名】作成したS3バケット

・ルール
 restricted-ssh  を追加

*【頻度】の連続と日次の違い
 ・料金:連続の方が多く記録するので日次よりも料金が高くなる。S3の料金も高くなる
 ・記録のタイミング
  連続:変更があるたびに記録
  日次:最後の記録から24時間後の状態を記録(変更があれば) 
   日次は24時間後の途中に起きた設定変更は記録しない。ただ、監視と記録は別なので日次でも監視はずっとしている。

2-5.自動修復を設定

ここで、ルールに抵触した際にどう対応するかの設定していきます。
AWS Configのサイドバーにある”ルール”を開いてください。
前章で設定したルール”restricted-ssh”を選択して、アクションから修復の管理を押してください。
以下の内容で設定してください。

【修復方法を選択】自動修復

・修復アクションの詳細
【修復アクションを選択】AWS-DisableIncomingSSHOnPort22

【パラメータ】
 SecurityGroupIds : 作成したSGのID
 AutomationAssumeRole : 作成したIAMのARN

 

2-6.動作確認

検出準備

AWS Configのサイドバーにある”ルール”を開いてください。(前章と同じところです。)
ルールの詳細を開いて、最下部にある対象範囲内リソースを見ましょう!
ID欄にある自分のSGIDを見つけてください。
コンプライアンスの欄に”準拠”とあれば、ルールを守れている状態です。

場合によっては、SGのインバウンドルール変更後すぐに修復されるかもしれないので、別ウィンドウにしておきましょう。
(日本以外のリージョンにしている方は、ルール判定の反映に時間がかかるのでそこまで準備していなくてもよいかもです。)

sshを全公開

sshを全公開しましょう。
SGのインバウンドルールに下記の内容で追加してください。

【タイプ】ssh

【ポート範囲】22番

【送信先】0.0.0.0/0

 

自動修復&削除確認

sshの公開が済んだら、準備していたAWS Configを開いて定期的に対象範囲内のリソースを更新してください。
しばらくすると、コンプライアンスの欄が“非準拠”に変化します。変化していれば、AWS Configがルールに従って違反したSGを検知できています。またしばらくすると、”非準拠”が”準拠”に変わると思います。そうなれば、SGのインバウンドルールを確認してください。インバウンドルールが削除されていることが確認できれば、今回のハンズオンは終わりとなります。(非準拠の状態でもインバウンドルールを確認すれば削除されているかも)

最後に

今回のハンズオンは以上になります。
片づけるリソースのリストアップとAWS Configの止め方を載せておきます。
・S3
・Security Group
・IAM
・AWS Config

AWS Configの止め方

AWS CLIを使用するので、まだCLIのセットアップできていない方は下記のブログを参照してください。
ECS (Fargate) + ALB Webアプリケーション構築ハンズオン | YAZエンジニアが運営するメディア Blilliant Engineer

AWS Configのサイドバーにある”設定”から【レコーダー】項目にある”記録を停止しますか?”を押して停止させてください。
その後、コマンドプロンプトorターミナルを起動してください。
次の順でコマンドを実行してください。コマンドをすべて実行して、2-4でAWS Configを開いた時の初期画面になればOKです。

1.CLIの起動
 aws login    or    aws configure sso
2.配信チャンネルの削除
  aws configservice delete-delivery-channel --delivery-channel-name default 
  --region "リージョン名"

配信チャネル名確認:aws configservice describe-delivery-channels --region "リージョン名"
3.レコーダーの削除
 aws configservice delete-configuration-recorder --configuration-recorder-name default 
  --region "リージョン名"

*AWSコンソールでレコーダーの停止ができなかった人は下記のコマンドを1.の後に実行してください。
aws configservice stop-configuration-recorder \
  --configuration-recorder-name default \
  --region ”リージョン名”

この記事を書いた人

神山颯太

hayato_kamiyama

26卒の神山です。
動くことが大好きです。