implementing-aws-config-rules-for-compliance について
AWS Config ルールを導入する AWS セキュリティ・コンプライアンスチーム向けのガイドです。リソースの継続評価、自動修復、カスタム検査、アカウントやリージョンをまたぐ集約を扱います。
主な機能
- 01マネージドルールの導入
- 02Lambda によるカスタムルール作成
- 03自動修復の設定
- 04アカウント・リージョン間のデータ集約
- 05StackSets によるルールのデプロイ
活用シーン
- 01AWS リソースの継続的なコンプライアンス監視
- 02設定ドリフトの検出と修復
- 03AWS Organizations 全体の準拠状況の集約
- 04監査向けの継続的な準拠証跡の提示
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill implementing-aws-config-rules-for-complianceインストール後、Claude Code で/implementing-aws-config-rules-for-complianceを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdscripts/agent.py詳細
コンプライアンス対応の AWS Config ルールの実装
使用する場面
- 規制基準に照らして AWS リソースの継続的なコンプライアンス監視を確立する場合
- 設定のドリフトを自動的に検出して修正する仕組みを実装する場合
- AWS Organizations を使用して、複数の AWS アカウントにまたがるコンプライアンスダッシュボードを構築する場合
- 監査チームが、特定時点の評価ではなく継続的なコンプライアンスの証拠を必要とする場合
- リソースの作成から数分以内に非準拠のリソースを検出するガードレールをデプロイする場合
次の用途には使用しないでください。リアルタイムの脅威検出(GuardDuty を使用)、アプリケーションの脆弱性スキャン(Inspector を使用)、または一度限りのコンプライアンス評価(より迅速なアドホック監査には Prowler を使用)。
前提条件
- すべての対象アカウントとリージョンで AWS Config の記録が有効になっていること
- ルール管理のための
config:*、ssm:*、lambda:*権限を持つ IAM ロール - Config 集約の委任管理者が設定された AWS Organizations
- Config 配信チャネル用の S3 バケットと通知用の SNS トピック
- 複数アカウントへのルールデプロイ用の CloudFormation StackSets または Terraform
ワークフロー
ステップ 1:AWS Config の記録を有効にする
各対象アカウントで Config レコーダーと配信チャネルを設定します。
# Create S3 bucket for Config data
aws s3api create-bucket \
--bucket config-compliance-data-ACCOUNT_ID \
--region us-east-1
# Create Config service role
aws iam create-service-linked-role --aws-service-name config.amazonaws.com
# Start the Config recorder
aws configservice put-configuration-recorder \
--configuration-recorder name=default,roleARN=arn:aws:iam::ACCOUNT:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig \
--recording-group allSupported=true,includeGlobalResourceTypes=true
# Set up delivery channel
aws configservice put-delivery-channel \
--delivery-channel '{
"name": "default",
"s3BucketName": "config-compliance-data-ACCOUNT_ID",
"snsTopicARN": "arn:aws:sns:us-east-1:ACCOUNT:config-notifications",
"configSnapshotDeliveryProperties": {"deliveryFrequency": "TwentyFour_Hours"}
}'
# Start recording
aws configservice start-configuration-recorder --configuration-recorder-name default
ステップ 2:CIS コンプライアンス向けのマネージドルールをデプロイする
CIS AWS Foundations Benchmark のコントロールに対応する AWS 管理の Config ルールを有効にします。
# S3 bucket security rules
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "s3-bucket-public-read-prohibited",
"Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_PUBLIC_READ_PROHIBITED"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "s3-bucket-server-side-encryption-enabled",
"Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "s3-bucket-ssl-requests-only",
"Source": {"Owner": "AWS", "SourceIdentifier": "S3_BUCKET_SSL_REQUESTS_ONLY"}
}'
# IAM security rules
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "iam-root-access-key-check",
"Source": {"Owner": "AWS", "SourceIdentifier": "IAM_ROOT_ACCESS_KEY_CHECK"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "mfa-enabled-for-iam-console-access",
"Source": {"Owner": "AWS", "SourceIdentifier": "MFA_ENABLED_FOR_IAM_CONSOLE_ACCESS"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "iam-password-policy",
"Source": {"Owner": "AWS", "SourceIdentifier": "IAM_PASSWORD_POLICY"},
"InputParameters": "{\"RequireUppercaseCharacters\":\"true\",\"RequireLowercaseCharacters\":\"true\",\"RequireSymbols\":\"true\",\"RequireNumbers\":\"true\",\"MinimumPasswordLength\":\"14\"}"
}'
# Network security rules
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "restricted-ssh",
"Source": {"Owner": "AWS", "SourceIdentifier": "INCOMING_SSH_DISABLED"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "vpc-flow-logs-enabled",
"Source": {"Owner": "AWS", "SourceIdentifier": "VPC_FLOW_LOGS_ENABLED"}
}'
# Encryption rules
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "rds-storage-encrypted",
"Source": {"Owner": "AWS", "SourceIdentifier": "RDS_STORAGE_ENCRYPTED"}
}'
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "encrypted-volumes",
"Source": {"Owner": "AWS", "SourceIdentifier": "ENCRYPTED_VOLUMES"}
}'
ステップ 3:Lambda を使用してカスタム Config ルールを作成する
組織固有のコンプライアンス要件に対応するカスタムルールを作成します。
# custom_config_rule.py - Ensure EC2 instances have required tags
import json
import boto3
config = boto3.client('config')
REQUIRED_TAGS = ['Environment', 'Owner', 'CostCenter', 'Project']
def lambda_handler(event, context):
invoking_event = json.loads(event['invokingEvent'])
configuration_item = invoking_event.get('configurationItem', {})
if configuration_item['resourceType'] != 'AWS::EC2::Instance':
return
tags = {t['key']: t['value'] for t in configuration_item.get('tags', [])}
missing_tags = [tag for tag in REQUIRED_TAGS if tag not in tags]
if missing_tags:
compliance = 'NON_COMPLIANT'
annotation = f"Missing required tags: {', '.join(missing_tags)}"
else:
compliance = 'COMPLIANT'
annotation = 'All required tags present'
config.put_evaluations(
Evaluations=[{
'ComplianceResourceType': configuration_item['resourceType'],
'ComplianceResourceId': configuration_item['resourceId'],
'ComplianceType': compliance,
'Annotation': annotation,
'OrderingTimestamp': configuration_item['configurationItemCaptureTime']
}],
ResultToken=event['resultToken']
)
# Deploy the custom rule
aws configservice put-config-rule --config-rule '{
"ConfigRuleName": "ec2-required-tags",
"Source": {
"Owner": "CUSTOM_LAMBDA",
"SourceIdentifier": "arn:aws:lambda:us-east-1:ACCOUNT:function:config-required-tags",
"SourceDetails": [{
"EventSource": "aws.config",
"MessageType": "ConfigurationItemChangeNotification"
}]
},
"Scope": {"ComplianceResourceTypes": ["AWS::EC2::Instance"]}
}'
ステップ 4:自動修復を設定する
非準拠のリソースを自動修復するための SSM Automation ドキュメントを設定します。
# Auto-remediate public S3 buckets
aws configservice put-remediation-configurations --remediation-configurations '[{
"ConfigRuleName": "s3-bucket-public-read-prohibited",
"TargetType": "SSM_DOCUMENT",
"TargetId": "AWS-DisableS3BucketPublicReadWrite",
"Parameters": {
"S3BucketName": {"ResourceValue": {"Value": "RESOURCE_ID"}},
"AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
},
"Automatic": true,
"MaximumAutomaticAttempts": 3,
"RetryAttemptSeconds": 60
}]'
# Auto-remediate unencrypted EBS volumes
aws configservice put-remediation-configurations --remediation-configurations '[{
"ConfigRuleName": "encrypted-volumes",
"TargetType": "SSM_DOCUMENT",
"TargetId": "AWS-EnableEBSEncryptionByDefault",
"Parameters": {
"AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
},
"Automatic": true,
"MaximumAutomaticAttempts": 1,
"RetryAttemptSeconds": 300
}]'
# Auto-remediate security groups allowing SSH from 0.0.0.0/0
aws configservice put-remediation-configurations --remediation-configurations '[{
"ConfigRuleName": "restricted-ssh",
"TargetType": "SSM_DOCUMENT",
"TargetId": "AWS-DisablePublicAccessForSecurityGroup",
"Parameters": {
"GroupId": {"ResourceValue": {"Value": "RESOURCE_ID"}},
"AutomationAssumeRole": {"StaticValue": {"Values": ["arn:aws:iam::ACCOUNT:role/ConfigRemediationRole"]}}
},
"Automatic": true,
"MaximumAutomaticAttempts": 3,
"RetryAttemptSeconds": 60
}]'
ステップ 5:複数アカウントの集約を設定する
組織内のすべてのアカウントからコンプライアンスデータを集約し、一元的に表示します。
# Create a Config aggregator for the organization
aws configservice put-configuration-aggregator \
--configuration-aggregator-name org-compliance-aggregator \
--organization-aggregation-source '{
"RoleArn": "arn:aws:iam::ACCOUNT:role/ConfigAggregatorRole",
"AllAwsRegions": true
}'
# Query aggregate compliance across all accounts
aws configservice get-aggregate-compliance-details-by-config-rule \
--configuration-aggregator-name org-compliance-aggregator \
--config-rule-name s3-bucket-public-read-prohibited \
--compliance-type NON_COMPLIANT \
--query 'AggregateEvaluationResults[*].[AccountId,AwsRegion,EvaluationResultIdentifier.EvaluationResultQualifier.ResourceId,ComplianceType]' \
--output table
# Get compliance summary by account
aws configservice get-aggregate-compliance-summary-by-source \
--configuration-aggregator-name org-compliance-aggregator \
--query 'AggregateComplianceCounts[*].[GroupName,ComplianceSummary.CompliantResourceCount.CappedCount,ComplianceSummary.NonCompliantResourceCount.CappedCount]' \
--output table
主な概念
| 用語 | 定義 |
|---|---|
| AWS Config ルール | AWS リソースの設定が指定された要件を満たしているかどうかを、継続的または定期的に評価するコンプライアンスチェック |
| マネージドルール | 暗号化やパブリックアクセスなど、一般的なコンプライアンスチェックに対応する標準化されたロジックを備えた、AWS 提供の事前構築済み Config ルール |
| カスタムルール | カスタムのコンプライアンスロジックを評価する Lambda 関数を基盤とした、組織固有の Config ルール |
| 修復アクション | 非準拠のリソースを自動修正するために実行される SSM Automation ドキュメントまたは Lambda 関数 |
| 設定アグリゲーター | 複数のアカウントとリージョンからコンプライアンスデータを収集し、一元的に表示する AWS Config の機能 |
| 適合パック | 特定のコンプライアンスフレームワーク向けに、デプロイ可能な単位としてパッケージ化された Config ルールと修復アクションのコレクション |
ツールとシステム
- AWS Config:AWS リソースの設定を継続的に記録し、コンプライアンスを評価するサービス
- SSM Automation:非準拠のリソースに対する自動修復アクションを実行するための AWS Systems Manager ドキュメント
- Config 適合パック:CIS、PCI DSS、NIST 800-53、HIPAA のコンプライアンスに対応する事前構築済みのルールコレクション
- CloudFormation StackSets:AWS Organizations 全体に Config ルールを複数アカウントへデプロイする仕組み
- Config アグリゲーター:アカウント間およびリージョン間のコンプライアンスデータを統合する機能
一般的なシナリオ
シナリオ:30 の AWS アカウントにわたる CIS コンプライアンス監視のデプロイ
背景:金融サービス企業が、年次 SOC 2 監査に向けて、30 の本番アカウントすべてで CIS AWS Foundations Benchmark への継続的な準拠を実証する必要があります。
アプローチ:
- CloudFormation StackSets を使用して、すべてのアカウントで AWS Config の記録を有効にします
- StackSets を使用して、すべてのアカウントに CIS 適合パックをデプロイします
- セキュリティアカウントに Config アグリゲーターを設定し、組織全体を可視化します
- 安全に修正できるルール(パブリックな S3、暗号化されていないボリューム)に対して自動修復を設定します
- 新たな NON_COMPLIANT 評価を通知する EventBridge ルールを作成します
- すべてのアカウントのスコアを集計した週次コンプライアンスレポートを作成します
- 監査用に保持するためのライフサイクルポリシーを設定し、Config スナップショットを S3 に保存します
注意点:Config の記録では、記録した設定項目ごとにコストが発生します。リソース数の多いアカウントでは、コストが大きくなる可能性があります。すべてのリソースを記録するのではなく、コンプライアンスに関連するリソースタイプに絞るため、対象を限定した記録グループを使用してください。ネットワークルール(セキュリティグループ)の自動修復は、そのルールが意図的に許可範囲を広く設定されている場合、アプリケーションに支障をきたす可能性があります。
出力形式
AWS Config Compliance Report
===============================
Organization: Acme Financial (30 accounts)
Framework: CIS AWS Foundations 1.4
Report Date: 2026-02-23
Config Rules Active: 48
COMPLIANCE SUMMARY:
Overall Compliance: 87%
Compliant Resources: 4,234
Non-Compliant Resources: 612
Not Applicable: 189
TOP NON-COMPLIANT RULES:
encrypted-volumes: 89 resources (14 accounts)
vpc-flow-logs-enabled: 67 resources (12 accounts)
mfa-enabled-for-iam-console: 45 resources (8 accounts)
s3-bucket-ssl-requests-only: 34 resources (6 accounts)
restricted-ssh: 28 resources (5 accounts)
AUTO-REMEDIATION (Last 30 Days):
Public S3 buckets remediated: 12
Security groups restricted: 8
EBS default encryption enabled: 6
Total auto-remediated: 26
Failed remediation attempts: 3
ACCOUNT COMPLIANCE RANKING:
1. prod-core (account-001): 96% compliant
2. prod-data (account-002): 94% compliant
...
30. dev-sandbox (account-030): 68% compliant