[アップデート] AWS Config 適合パックでプロセスチェックルールをデプロイできるようになりました

機械的には判断ができないチェック項目について、人の目で見て準拠状態を確認できる Config ルールが追加されました。

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

コンバンハ、千葉(幸)です。

AWS Config 適合パックにより、手動でのプロセスチェックを行うルールをデプロイできるようになりました!

自動的に準拠状況を確認できない非リソースに対する確認項目についても、Config ルールの一つとして管理できるようになりました。

何が変わったのか

AWS Config 適合パックは、 Config ルール修復アクションをテンプレートで定義し、一括で管理できる仕組みです。

aws-config-confarmance-pack-3

デプロイされたルールにより各種リソースに対して評価が行われ、準拠状態にあるかどうかが判断されます。

ルールが何を基準に評価を行うかは、ソースルールとして設定したものにより決定されます。ソースルールには AWS マネジードルールカスタムルール( カスタマー側で Lambda 関数として定義 )を設定できます。

ルールには修復アクションを関連づけられます。これはルールにより非準拠状態であると判断されたリソースに対して修正を行うものです。自動で修復を行うような設定も可能です。

適合パックについては以下もあわせてご参照ください。

今回のアップデートにより、ソースルールとして AWS マネージドルールAWS_CONFIG_PROCESS_CHECKを持つルールをデプロイできるようになりました。

aws-config-rule2-8798537

このルールはプロセスチェックルールと呼ばれます。プロセスチェックルールでは、ユーザーが直接確認を行うような評価項目を管理できます。

例えば以下のような項目です。

  • ルートアカウントが使用された際に検知できる仕組みはあるか?
  • 権限は最小化されているか?
  • アカウントに登録された連絡先が最新か?

従来の Config ルールではリソースの設定値を参照して機械的に判別することしかできませんでしたが、人によるチェックを行うものも同じく Config ルールとして管理できるようになりました。

各アカウントで横断的に準拠すべき基準を適合パックテンプレートで定義しておき、各アカウントで人の目も含めながらチェックを行う、そして準拠状況を一元管理する、ということができます。

ちなみに Config ルールは適合パックを使用せず個別に作成できますが、プロセスチェックルールは適合パックでのみデプロイできます。

プロセスチェックルールの書式

適合パックテンプレートでプロセスチェックルールを定義する際は、以下のような書式をとります。

################################################################################
#
#  Conformance Pack template for process check
#
################################################################################
Resources:
  AWSConfigProcessCheck:
    Properties:
      ConfigRuleName: RuleName
      Description: Description of Rule
      Source:
        Owner: AWS
        SourceIdentifier: AWS_CONFIG_PROCESS_CHECK
    Type: AWS::Config::ConfigRule

ソースとしてAWS_CONFIG_PROCESS_CHECKを指定する以外は、ルール名や説明など、自由に定義できます。

やってみた

今回は以下のテンプレートを用いて適合パックをデプロイしてみます。

ここでは CIS AWS Foundations Benchmark v1.3 の各 Control ID に対応する形で AWS Config ルールが作成され、準拠状況を確認する仕組みとなっています。( ID に対して重複するルールあり。)

プロセスチェックルールが多く含まれています。

Control ID AWS Config Rule プロセスチェックルールか
1.1 account-contact-details-configured はい
1.2 account-security-contact-configured はい
1.3 account-security-questions-configured はい
1.4 iam-root-access-key-check -
1.5 root-account-mfa-enabled -
1.6 root-account-hardware-mfa-enabled -
1.7 root-account-regular-use はい
1.8 iam-password-policy -
1.9 iam-password-policy -
1.10 mfa-enabled-for-iam-console-access -
1.11 iam-user-console-and-api-access-at-creation はい
1.12 iam-user-unused-credentials-check -
1.13 iam-user-single-access-key はい
1.14 access-keys-rotated -
1.15 iam-user-no-policies-check -
1.15 iam-no-inline-policy-check -
1.15 iam-user-group-membership-check -
1.16 iam-policy-no-statements-with-admin-access -
1.17 iam-support-role-created はい
1.18 ec2-instance-role-assigned はい
1.19 iam-expired-certificates はい
1.20 s3-account-level-public-access-blocks -
1.21 iam-access-analyzer-enabled はい
1.22 iam-central-user-management はい
2.1.1 s3-bucket-server-side-encryption-enabled -
2.1.2 s3-bucket-ssl-requests-only -
2.2.1 ec2-ebs-encryption-by-default -
2.2.1 encrypted-volumes -
3.1 multi-region-cloudtrail-enabled -
3.2 cloud-trail-log-file-validation-enabled -
3.3 s3-bucket-public-read-prohibited -
3.3 s3-bucket-public-write-prohibited -
3.3 s3-account-level-public-access-blocks -
3.3 s3-bucket-policy-grantee-check -
3.4 cloud-trail-cloud-watch-logs-enabled -
3.5 config-enabled-all-regions はい
3.6 s3-bucket-logging-enabled -
3.7 cloud-trail-encryption-enabled -
3.8 cmk-backing-key-rotation-enabled -
3.9 vpc-flow-logs-enabled -
3.10 cloudtrail-s3-dataevents-enabled -
3.11 cloudtrail-s3-dataevents-enabled -
4.1 alarm-unauthorized-api-calls はい
4.2 alarm-sign-in-without-mfa はい
4.3 alarm-root-account-use はい
4.4 alarm-iam-policy-change はい
4.5 alarm-cloudtrail-config-change はい
4.6 alarm-console-auth-failures はい
4.7 alarm-kms-disable-or-delete-cmk はい
4.8 alarm-s3-bucket-policy-change はい
4.9 alarm-aws-config-change はい
4.10 alarm-vpc-secrity-group-change はい
4.11 alarm-vpc-nacl-change はい
4.12 alarm-vpc-network-gateway-change はい
4.13 alarm-vpc-route-table-change はい
4.14 alarm-vpc-change はい
4.15 alarm-organizations-change はい
5.1 vpc-networkacl-open-admin-ports はい
5.2 restricted-common-ports -
5.3 vpc-default-security-group-closed -
5.4 vpc-networkacl-open-admin-ports はい

適合パックのデプロイ

早速作成していきます。

適合パックのデプロイ画面より、お目当てのサンプルテンプレートを指定して次へ進みます。

AWS_Config_Console

名称を指定して次へ進みます。

パラメータを設定することもできます。このテンプレートで設定できるパラメータは以下から確認してください。

AWS_Config_Console2

確認を行い、デプロイを行います。

(以前はデプロイ時にテンプレートを出力する先の S3 バケットを指定する項目があったように記憶していますが、 2020年12月現在のコンソールではそのような箇所はありませんでした。)

AWS_Config_Console3

数分程度でデプロイが完了します。

AWS_Config_Console4

裏側で呼び出されている CloudFormation スタックでも作成が確認できます。今回は 58 ルールが作成されました。

CloudFormationstack

適合パック画面からルールの確認

デプロイされたルールを確認していきます。

適合パックの詳細画面から遷移すると、この時点では全てのルールが表示されていません。

コンプライアンスが「準拠」「非準拠」いずれかのルールのみがここに表示されるため、プロセスチェックルールや一部のルールはここに反映されていない状態です。

AWS_Config_Console5

AWS CLI でルールの確認

AWS CLI で一覧を確認します。

今回は適合パックのデプロイ前に既存の Config ルールが存在しない環境で試しています。

以下のように--queryを指定し、プロセスチェックルールを一覧化してみました。29個あります。

% aws configservice describe-config-rules\
  --query 'ConfigRules[?Source.SourceIdentifier==`AWS_CONFIG_PROCESS_CHECK`].ConfigRuleName'
[
    "account-contact-details-configured-conformance-pack-mqp9xv0fb",
    "account-security-contact-configured-conformance-pack-mqp9xv0fb",
    "account-security-questions-configured-conformance-pack-mqp9xv0fb",
    "alarm-aws-config-change-conformance-pack-mqp9xv0fb",
    "alarm-cloudtrail-config-change-conformance-pack-mqp9xv0fb",
    "alarm-console-auth-failures-conformance-pack-mqp9xv0fb",
    "alarm-iam-policy-change-conformance-pack-mqp9xv0fb",
    "alarm-kms-disable-or-delete-cmk-conformance-pack-mqp9xv0fb",
    "alarm-organizations-change-conformance-pack-mqp9xv0fb",
    "alarm-root-account-use-conformance-pack-mqp9xv0fb",
    "alarm-s3-bucket-policy-change-conformance-pack-mqp9xv0fb",
    "alarm-sign-in-without-mfa-conformance-pack-mqp9xv0fb",
    "alarm-unauthorized-api-calls-conformance-pack-mqp9xv0fb",
    "alarm-vpc-change-conformance-pack-mqp9xv0fb",
    "alarm-vpc-nacl-change-conformance-pack-mqp9xv0fb",
    "alarm-vpc-network-gateway-change-conformance-pack-mqp9xv0fb",
    "alarm-vpc-route-table-change-conformance-pack-mqp9xv0fb",
    "alarm-vpc-secrity-group-change-conformance-pack-mqp9xv0fb",
    "config-enabled-all-regions-conformance-pack-mqp9xv0fb",
    "ec2-instance-role-assigned-conformance-pack-mqp9xv0fb",
    "iam-access-analyzer-enabled-conformance-pack-mqp9xv0fb",
    "iam-central-user-management-conformance-pack-mqp9xv0fb",
    "iam-expired-certificates-conformance-pack-mqp9xv0fb",
    "iam-support-role-created-conformance-pack-mqp9xv0fb",
    "iam-user-console-and-api-access-at-creation-conformance-pack-mqp9xv0fb",
    "iam-user-single-access-key-conformance-pack-mqp9xv0fb",
    "root-account-regular-use-conformance-pack-mqp9xv0fb",
    "vpc-networkacl-open-admin-ports-conformance-pack-mqp9xv0fb",
    "vpc-peering-least-access-conformance-pack-mqp9xv0fb"
]

プロセスチェックルールでないルールも出力してみます。こちらも29個なので、合計して58個あります。

% aws configservice describe-config-rules\
  --query 'ConfigRules[?Source.SourceIdentifier!=`AWS_CONFIG_PROCESS_CHECK`].ConfigRuleName'
[
    "access-keys-rotated-conformance-pack-mqp9xv0fb",
    "cloud-trail-cloud-watch-logs-enabled-conformance-pack-mqp9xv0fb",
    "cloud-trail-encryption-enabled-conformance-pack-mqp9xv0fb",
    "cloud-trail-log-file-validation-enabled-conformance-pack-mqp9xv0fb",
    "cloudtrail-s3-dataevents-enabled-conformance-pack-mqp9xv0fb",
    "cmk-backing-key-rotation-enabled-conformance-pack-mqp9xv0fb",
    "ec2-ebs-encryption-by-default-conformance-pack-mqp9xv0fb",
    "encrypted-volumes-conformance-pack-mqp9xv0fb",
    "iam-no-inline-policy-check-conformance-pack-mqp9xv0fb",
    "iam-password-policy-conformance-pack-mqp9xv0fb",
    "iam-policy-no-statements-with-admin-access-conformance-pack-mqp9xv0fb",
    "iam-root-access-key-check-conformance-pack-mqp9xv0fb",
    "iam-user-group-membership-check-conformance-pack-mqp9xv0fb",
    "iam-user-no-policies-check-conformance-pack-mqp9xv0fb",
    "iam-user-unused-credentials-check-conformance-pack-mqp9xv0fb",
    "mfa-enabled-for-iam-console-access-conformance-pack-mqp9xv0fb",
    "multi-region-cloudtrail-enabled-conformance-pack-mqp9xv0fb",
    "restricted-common-ports-conformance-pack-mqp9xv0fb",
    "root-account-hardware-mfa-enabled-conformance-pack-mqp9xv0fb",
    "root-account-mfa-enabled-conformance-pack-mqp9xv0fb",
    "s3-account-level-public-access-blocks-conformance-pack-mqp9xv0fb",
    "s3-bucket-logging-enabled-conformance-pack-mqp9xv0fb",
    "s3-bucket-policy-grantee-check-conformance-pack-mqp9xv0fb",
    "s3-bucket-public-read-prohibited-conformance-pack-mqp9xv0fb",
    "s3-bucket-public-write-prohibited-conformance-pack-mqp9xv0fb",
    "s3-bucket-server-side-encryption-enabled-conformance-pack-mqp9xv0fb",
    "s3-bucket-ssl-requests-only-conformance-pack-mqp9xv0fb",
    "vpc-default-security-group-closed-conformance-pack-mqp9xv0fb",
    "vpc-flow-logs-enabled-conformance-pack-mqp9xv0fb"
]

プロセスチェックルールの操作

「ルール」の画面からルール一覧を確認していきます。タイプが「Process check」となっているものはすべてコンプライアンスが未評価の状態です。

試しに一つルールを選択してみます。

AWS_Config_Console6

ルールの詳細画面はこのようになっています。

AWS_Config_Console8

「説明」欄の内容を機械翻訳すると以下の内容となります。

AWSカスタマーサービスへのサポートのための個人認証に使用できるセキュリティ質問が設定されていることを確認します。AWS Management Consoleの「マイアカウント」セクションで、3つのセキュリティ上の質問が設定されていることを確認します。

コンプライアンスを編集」を押下します。

コンプライアンスを「準拠」「非準拠」「該当しません」のいずれかから選択し、必要に応じてコメントを入力し、「保存」を押下します。

AWS_Config_Console9

設定した内容がこのように反映されます。

AWS_Config_Console10

適合パックの詳細画面にも表示されるようになりました。

AWS_Config_Console11

プロセスチェックルールの使い方が確認できました!

終わりに

AWS Config 適合パックで使用できるようになったプロセスチェックルールについての確認でした。

監査やセキュリティチェック項目の中には、どうしても人の目で確認しなくてはいけないものがあります。これまでは「一部は適合パック、一部はまた別のソリューションでチェック」というアプローチが必要でしたが、今回のアップデートでまとめて一つのテンプレートで管理できるようになりました。

プロセスチェックルールはテンプレートで定義すれば独自のものを使用することもできますので、環境にあわせて活用してみてはいかがでしょうか。

以上、千葉(幸)がお送りしました。