AWS Configの拡張機能「AWS Config Rules」の要素を確認してみた #reinvent

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

時差ボケが未だに治らない森永です。
昨日は4時半に目が冷めました(白目)

re:Inventで満を持して発表されたAWS Config Rules!
恐らく日本で一番AWS Configの記事を書いている私(競合する人がいない)ですが、テンション上がりまくりです。

ですが、地味な機能すぎてあまり知られていないというのも事実です。
(皆さんIoTやLambda拡張やらのキャッチアップで精一杯かと思います)

なので、AWS Config Rulesってどんなサービスなのか、ドキュメントを読み込み、要素を整理してみました!
ご一読いただき興味を持って頂ければ幸いです。

AWS Configのルール機能

AWS Config Rulesと言っても新しいサービスが追加されたわけではありません。
去年のre:Inventで地味に始まったAWS Configの拡張機能として発表されました。

AWS Configの詳しい内容についてはこちらを御覧ください。
簡単に言うと、AWSリソース(EC2やVPCなど)の設定、変更を記録するサービスなのですが、これにルールを作成して設定項目を検査する機能が追加されました。
従来は設定値を確認することは出来たのですが、設定値がガイドラインに従っているかは人力で確認する必要がありました。

マネージドルールとカスタムルール

ルールには大きく分けて2つあります。
AWSが提供しているマネージドルールと、自分で作成することの出来るカスタムルールです。

マネージドルールはよく必要とされるルールをAWSが事前に用意したものです。
パラメータを設定することでマネージドルールも多少カスタムすることが可能です。

現在(2015/10/19)用意されているマネージドルールは以下です。

名前 説明 検査時期 パラメータ
CLOUD_TRAIL_ENABLED CloudTrailは有効化する 定期 s3BucketName
snsTopicArn
cloudWatchLogsLogGroupArn
EIP_ATTACHED EIPはインスタンスにアタッチする 変更時
ENCRYPTED_VOLUMES EBSは暗号化する 変更時 kmsId
INCOMING_SSH_DISABLED SSHポートが開放されたSGを作らない 変更時
INSTANCES_IN_VPC EC2はVPC内に作成する 変更時 vpcId
REQUIRED_TAGS ○○というタグを付ける 変更時 tag1key
tag1value
RESTRICTED_INCOMING_TRAFFIC ○○番ポートが開放されたSGを作らない 変更時 blockedPort1
blockedPort2

カスタムルールは自分でルールを作成することが可能です。
ルールの作成にはLambdaファンクションを使用しますので、非常に柔軟なルールを作成することが可能です。 (カスタムルールの作り方は別途記事にします。)

変更時検査と定期検査

ルールによる検査の時期は2タイプあります。 AWSリソースが作成・変更された際に検査を実行する変更時検査と、設定のスナップショットがS3に保管されるタイミングで検査する定期変更です。

変更時検査ではスコープを設定することができ、特定のAWSリソースタイプ、特定のAWSリソースID、特定のタグがついたAWSリソースだけを検査の対象とすることが出来ます。
基本的にAWSリソースの検査についてはこちらを使えば宜しいかと思います。

定期検査では、スコープを設定することは出来ず、スナップショット全体の検査となります。
こちらはアカウント全体でどうか、という検査をするときに使用します。
例えば、アカウント全体でのEC2インスタンスの数が一定数を超えていないか等です。

最後に

ただ設定変更を記録し、通知するだけだったAWS Configにルール機能が追加されたことでAWS Configで出来ることが非常に多くなりました。
特にLambdaを後ろにおいて処理をするので、ガイドラインをコード化出来るようになったといえます。
Guideline as a Code!

あまり生産的ではないコンプライアンスや監査というものをコードにして自動化することで、よりビジネスで重要なところに時間をさくことが出来るようになると思いますので、是非活用頂ければと思います。