この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。大阪オフィスの林です。
AWS Configの『アグリゲーター』という機能を使用することで、
AWS Configで収集しているリソースや、Configルールのチェック結果を複数のアカウントや複数のリージョンにまたがり、集約してレポーティングすることができます。もちろんAWSマネージメントコンソールから集約されたレポートを確認することもできるのですが、チョットした経緯でCLIからレポートを確認する方法を試しましたのでまとめておきたいと思います。
『アグリゲーター』については下記エントリも参照頂ければと思います。
なぜCLIからレポートを確認したいか?
AWSマネージメントコンソールからアグリゲーターの集約ビューを使って全体のコンプライアンス状況を見てみると下記のような感じで確認ができます。
複数のアカウントや複数のリージョンにまたがって全体のコンプライアンス状況を確認できるのは大変ありがたいのですが、それらのデータ(結果)をエクスポートする機能は現状ありません。(頑張ってコピペすればできます)
このようにAWSマネージメントコンソールからだと痒いところに手が届かないという経緯もあり、CLIからコンプライアンス状況のレポートをイイ感じに取れないか試しましたのでまとめておきたいと思います。
AWS ConfigのAWS CLIリファレンス
AWS Config周りのコマンドの中でアグリゲーターを扱えるコマンドは下記が用意されています。
この中からコンプライアンス状況の結果を表示するために使用するコマンドはdescribe-aggregate-compliance-by-config-rules
となります。今回はこちらのコマンドを使っていきます。
- batch-get-aggregate-resource-config
- describe-aggregate-compliance-by-config-rules
- get-aggregate-compliance-details-by-config-rule
- get-aggregate-config-rule-compliance-summary
- get-aggregate-discovered-resource-counts
- get-aggregate-resource-config
- list-aggregate-discovered-resources
- select-aggregate-resource-config
やってみた
最終的に下記のイメージでコンプライアンス状況を出力することができます。レポートに記録されるレコードが大量の場合はAWSマネジメントコンソールからコピペするより確実で効率的かと思います。左から、AWSアカウント
リージョン
コンプライアンス非準拠リソースの数
コンプライアンス非準拠 or 準拠
Configルール名
で出力しています。
~$ aws configservice describe-aggregate-compliance-by-config-rules --configuration-aggregator-name アグリゲーター名 --query 'AggregateComplianceByConfigRules[*].{AccountId:AccountId,AwsRegion:AwsRegion,ConfigRuleName:ConfigRuleName,ComplianceType:Compliance.ComplianceType,CappedCount:Compliance.ComplianceContributorCount.CappedCount}' --output text
4265xxxxxxxx ap-northeast-1 None COMPLIANT ROOT_ACCOUNT_MFA_ENABLED
4265xxxxxxxx ap-northeast-1 4 NON_COMPLIANT VPC_FLOW_LOGS_ENABLED
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT GUARDDUTY_ENABLED_CENTRALIZED
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT EC2_EBS_ENCRYPTION_BY_DEFAULT
4265xxxxxxxx ap-southeast-1 None COMPLIANT S3_DEFAULT_ENCRYPTION_KMS
4265xxxxxxxx ap-southeast-1 None COMPLIANT ROOT_ACCOUNT_MFA_ENABLED
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT ROOT_ACCOUNT_HARDWARE_MFA_ENABLED
4265xxxxxxxx ap-southeast-1 11 NON_COMPLIANT REQUIRED_TAGS
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT IAM_PASSWORD_POLICY
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT VPC_DEFAULT_SECURITY_GROUP_CLOSED
4265xxxxxxxx ap-southeast-1 1 NON_COMPLIANT VPC_FLOW_LOGS_ENABLED
4265xxxxxxxx ap-southeast-1 None COMPLIANT INCOMING_SSH_DISABLED
4265xxxxxxxx ap-southeast-1 None COMPLIANT RESTRICTED_INCOMING_TRAFFIC
5180xxxxxxxx ap-northeast-1 None COMPLIANT ROOT_ACCOUNT_MFA_ENABLED
5180xxxxxxxx ap-northeast-1 None COMPLIANT S3_DEFAULT_ENCRYPTION_KMS
5180xxxxxxxx ap-northeast-1 None COMPLIANT IAM_ROOT_ACCESS_KEY_CHECK
5180xxxxxxxx ap-northeast-1 28 NON_COMPLIANT REQUIRED_TAGS
5180xxxxxxxx ap-northeast-1 None COMPLIANT INCOMING_SSH_DISABLED
(省略)
table出力するとカラム名も付いて分かりやすいです。
~$ aws configservice describe-aggregate-compliance-by-config-rules --configuration-aggregator-name アグリゲーター名 --query 'AggregateComplianceByConfigRules[*].{AccountId:AccountId,AwsRegion:AwsRegion,ConfigRuleName:ConfigRuleName,ComplianceType:Compliance.ComplianceType,CappedCount:Compliance.ComplianceContributorCount.CappedCount}' --output table
----------------------------------------------------------------------------------------------------------
| DescribeAggregateComplianceByConfigRules |
+--------------+-----------------+--------------+-----------------+--------------------------------------+
| AccountId | AwsRegion | CappedCount | ComplianceType | ConfigRuleName |
+--------------+-----------------+--------------+-----------------+--------------------------------------+
| 4265xxxxxxxx| ap-northeast-1 | None | COMPLIANT | ROOT_ACCOUNT_MFA_ENABLED |
| 4265xxxxxxxx| ap-northeast-1 | 4 | NON_COMPLIANT | VPC_FLOW_LOGS_ENABLED |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | GUARDDUTY_ENABLED_CENTRALIZED |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | EC2_EBS_ENCRYPTION_BY_DEFAULT |
| 4265xxxxxxxx| ap-southeast-1 | None | COMPLIANT | S3_DEFAULT_ENCRYPTION_KMS |
| 4265xxxxxxxx| ap-southeast-1 | None | COMPLIANT | ROOT_ACCOUNT_MFA_ENABLED |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | ROOT_ACCOUNT_HARDWARE_MFA_ENABLED |
| 4265xxxxxxxx| ap-southeast-1 | 11 | NON_COMPLIANT | REQUIRED_TAGS |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | IAM_PASSWORD_POLICY |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | VPC_DEFAULT_SECURITY_GROUP_CLOSED |
| 4265xxxxxxxx| ap-southeast-1 | 1 | NON_COMPLIANT | VPC_FLOW_LOGS_ENABLED |
| 4265xxxxxxxx| ap-southeast-1 | None | COMPLIANT | INCOMING_SSH_DISABLED |
| 4265xxxxxxxx| ap-southeast-1 | None | COMPLIANT | RESTRICTED_INCOMING_TRAFFIC |
| 5180xxxxxxxx| ap-northeast-1 | None | COMPLIANT | ROOT_ACCOUNT_MFA_ENABLED |
| 5180xxxxxxxx| ap-northeast-1 | None | COMPLIANT | S3_DEFAULT_ENCRYPTION_KMS |
| 5180xxxxxxxx| ap-northeast-1 | None | COMPLIANT | IAM_ROOT_ACCESS_KEY_CHECK |
| 5180xxxxxxxx| ap-northeast-1 | 28 | NON_COMPLIANT | REQUIRED_TAGS |
| 5180xxxxxxxx| ap-northeast-1 | None | COMPLIANT | INCOMING_SSH_DISABLED |
(省略)
+--------------+-----------------+--------------+-----------------+--------------------------------------+
--queryオプション
上記コマンドでは、--query オプションを付けて結果を出力しています。--query
オプションを付けずにtextモードで出力すると行が分割されるなど中々キレイに結果の出力ができず、今回は--query
オプションの使用に落ち着きました。
まとめ
チョットした経緯から久しぶりにAWS CLIを触りました。AWS Configに限らずですが、GUIで出来ないことや煩わしい操作をCLIを使って解消できないかどうか、一度ご検討頂くのもオモシロいのではないでしょうか?!
以上、大阪オフィスの林がお送りしました!