AWS Config ルールを全リージョンから取得する

2023.05.30

こんにちは!丸屋 正志(Maruya Masashi) です。

今日もブロックを掘ったり積み上げたり匠に壊されたりしていますか?

困っていたこと

既存AWSアカウントを AWS Control Tower 管理下に移動するにあたり、既に設定している AWS Config ルールの一覧を全リージョンから簡単に取得したいです。

このブログで実現できること

  • AWS Config ルール 一覧を全リージョンから取得

やってみた

以下のシェルスクリプトを AWS CloudShell 上にアップロードし、ファイルを実行すると全リージョンのAWS Config ルールを取得することができます。

  • ファイル一覧
    • 実行ファイル名 : config-rule.sh
    • 取得ファイル名 : backup_config_rules_AWSアカウントID(12桁).json
#!/bin/bash

# Get the AWS account ID
account_id=$(aws sts get-caller-identity --query Account --output text)

# Get the list of available AWS regions
regions=$(aws ec2 describe-regions --query "Regions[].{Name:RegionName}" --output text)

# Loop through each region
for region in $regions
do
  echo "Getting Config rules for region: $region ($account_id)" | tee -a "backup_config_rules_$account_id.json"

  # Get the list of AWS Config rules for the current region
  aws configservice describe-config-rules --region $region >> "backup_config_rules_$account_id.json"
  echo -e "\n" >> "backup_config_rules_$account_id.json"
done


コマンドを実行した際の出力内容

※ ボカシの所は、AWSアカウントID(12桁)になります。


取得結果

ルールが無い場合

※ リージョンがバラバラですが抜粋して記載しているためです

~~略~~
Getting Config rules for region: ap-northeast-3 (AWSアカウントID(12桁))
{
    "ConfigRules": []
}

Getting Config rules for region: ap-southeast-2 (AWSアカウントID(12桁))
{
    "ConfigRules": []
}

Getting Config rules for region: us-east-1 (AWSアカウントID(12桁))
{
    "ConfigRules": []
}
~~略~~

ルールが有る場合

下記のようなJSON形式で出力されます。

※ AWSアカウントIDとRuleIdはボカシております。

※ リージョンがバラバラですが抜粋して記載しているためです

Getting Config rules for region: ap-northeast-1 (AWSアカウントID(12桁))
{
    "ConfigRules": [
        {
            "ConfigRuleName": "testcm-acm-certificate-expiration-check",
            "ConfigRuleArn": "arn:aws:config:ap-northeast-1:AWSアカウントID(12桁):config-rule/config-rule-*****",
            "ConfigRuleId": "config-rule-*****",
            "Description": "test-cm\nChecks whether ACM Certificates in your account are marked for expiration within the specified number of days. Certificates provided by ACM are automatically renewed. ACM does not automatically renew certificates that you import.",
            "Scope": {
                "ComplianceResourceTypes": [
                    "AWS::ACM::Certificate"
                ]
            },
            "Source": {
                "Owner": "AWS",
                "SourceIdentifier": "ACM_CERTIFICATE_EXPIRATION_CHECK"
            },
            "InputParameters": "{\"daysToExpiration\":\"14\"}",
            "MaximumExecutionFrequency": "TwentyFour_Hours",
            "ConfigRuleState": "ACTIVE",
            "EvaluationModes": [
                {
                    "Mode": "DETECTIVE"
                }
            ]
        },
        {
            "ConfigRuleName": "testcm-alb-http-drop-invalid-header-enabled",
            "ConfigRuleArn": "arn:aws:config:ap-northeast-1:AWSアカウントID(12桁):config-rule/config-rule-*****",
            "ConfigRuleId": "config-rule-*****",
            "Description": "test-cm\nChecks if rule evaluates AWS Application Load Balancers (ALB) to ensure they are configured to drop http headers. The rule is NON_COMPLIANT if the value of routing.http.drop_invalid_header_fields.enabled is set to false.",
            "Scope": {
                "ComplianceResourceTypes": [
                    "AWS::ElasticLoadBalancingV2::LoadBalancer"
                ]
            },
            "Source": {
                "Owner": "AWS",
                "SourceIdentifier": "ALB_HTTP_DROP_INVALID_HEADER_ENABLED"
            },
            "InputParameters": "{}",
            "ConfigRuleState": "ACTIVE",
            "EvaluationModes": [
                {
                    "Mode": "DETECTIVE"
                }
            ]
        }
    ]
}

さいごに

今回は、AWS Config ルール を全リージョンから取得するCLI紹介でした。

このブログが誰かの解決になれば幸いです。