「コンプライアンス監査に毎月何日もかかる」「セキュリティポリシーの遵守状況を手動で確認するのが限界」——情報セキュリティ管理やISMS対応に追われるSESエンジニアにとって、監査業務の効率化は切実な課題です。
結論から言えば、OpenClawのAIエージェント機能を活用することで、セキュリティチェック・コンプライアンスレポート生成・定期監査の大部分を自動化できます。本記事では、実際のワークフロー設計から実装まで具体的に解説します。
この記事を3秒でまとめると
- OpenClawのcron・スキル機能でコンプライアンスチェックを定期自動実行できる
- AWS/GCPのセキュリティベストプラクティスを自動検証し、レポートを生成
- Slack/メール連携で監査結果をリアルタイムに共有可能

なぜOpenClawでコンプライアンス監査を自動化するのか
コンプライアンス監査は、多くの組織で以下のような課題を抱えています。
| 課題 | 従来のアプローチ | OpenClawによる解決 |
|---|---|---|
| 工数の肥大化 | 手動でのチェックリスト確認 | 自動スキャンと結果集約 |
| 見落としリスク | 人的ミスによるチェック漏れ | 網羅的な自動検証 |
| レポート作成 | Excelで手動集計 | テンプレートベースの自動生成 |
| 定期実行 | カレンダーリマインダー頼み | cronによる確実な定期実行 |
| 知見の属人化 | 担当者の経験に依存 | スキルとして体系化・共有可能 |
SES案件でのコンプライアンス需要
SES案件でもセキュリティ・コンプライアンス対応が求められるケースが増えています。
- 金融系案件: FISC安全対策基準、PCI DSS対応
- 医療系案件: 3省2ガイドライン対応
- 官公庁案件: 政府情報セキュリティ統一基準
- 一般企業: ISMS (ISO 27001)、Pマーク対応
これらの監査業務を効率化できるスキルは、SESエンジニアの市場価値を大きく高めます。
OpenClawでの監査自動化アーキテクチャ
全体構成
OpenClawのコンプライアンス監査自動化は、以下のコンポーネントで構成されます。
- cronジョブ: 定期的な監査実行のスケジューリング
- カスタムスキル: 監査ロジックの実装
- CLIツール連携: AWS CLI、gcloud CLI、各種セキュリティツール
- レポート生成: 監査結果のフォーマットとドキュメント化
- 通知: Slack/メールでの結果共有
cronジョブの設定
OpenClawのcron機能を使って、定期的な監査を自動実行します。
{
"cron": [
{
"name": "weekly-security-audit",
"schedule": "0 9 * * 1",
"prompt": "週次セキュリティ監査を実行してください。AWSアカウントのIAMポリシー、セキュリティグループ、S3バケットポリシーをチェックし、結果をSlackの#security-auditチャンネルに報告してください。",
"channel": "slack"
},
{
"name": "monthly-compliance-report",
"schedule": "0 10 1 * *",
"prompt": "月次コンプライアンスレポートを生成してください。先月の監査結果を集約し、改善状況を含めたレポートをGoogle Driveに保存してSlackで共有してください。",
"channel": "slack"
}
]
}
AWSセキュリティ監査の自動化
IAMポリシー監査
IAMの設定は、セキュリティ上最も重要なチェックポイントの一つです。OpenClawからAWS CLIを使って自動チェックします。
#!/bin/bash
# scripts/audit-iam.sh
# IAMセキュリティ監査スクリプト
echo "=== IAMセキュリティ監査 ==="
echo "実行日時: $(date '+%Y-%m-%d %H:%M:%S')"
echo ""
ISSUES=0
# 1. ルートアカウントのMFA確認
echo "## 1. ルートアカウントMFA"
ROOT_MFA=$(aws iam get-account-summary \
--query 'SummaryMap.AccountMFAEnabled' \
--output text)
if [ "$ROOT_MFA" = "1" ]; then
echo "✅ ルートアカウントMFA: 有効"
else
echo "❌ ルートアカウントMFA: 無効(要対応)"
ISSUES=$((ISSUES + 1))
fi
# 2. 未使用のIAMユーザー検出(90日以上未使用)
echo ""
echo "## 2. 未使用IAMユーザー(90日以上)"
THRESHOLD=$(date -v-90d '+%Y-%m-%dT%H:%M:%SZ' 2>/dev/null || \
date -d '90 days ago' '+%Y-%m-%dT%H:%M:%SZ')
aws iam list-users --query 'Users[?PasswordLastUsed!=`null`].[UserName,PasswordLastUsed]' \
--output text | while read -r user last_used; do
if [[ "$last_used" < "$THRESHOLD" ]]; then
echo "⚠️ 未使用ユーザー: $user (最終使用: $last_used)"
ISSUES=$((ISSUES + 1))
fi
done
# 3. アクセスキーのローテーション確認
echo ""
echo "## 3. アクセスキーのローテーション"
aws iam list-users --query 'Users[].UserName' --output text | tr '\t' '\n' | while read -r user; do
aws iam list-access-keys --user-name "$user" \
--query 'AccessKeyMetadata[?Status==`Active`].[AccessKeyId,CreateDate]' \
--output text | while read -r key_id created; do
if [[ "$created" < "$THRESHOLD" ]]; then
echo "⚠️ 古いアクセスキー: $user / $key_id (作成日: $created)"
fi
done
done
# 4. 管理者権限を持つユーザーの列挙
echo ""
echo "## 4. 管理者権限ユーザー"
aws iam list-users --query 'Users[].UserName' --output text | tr '\t' '\n' | while read -r user; do
ADMIN=$(aws iam list-attached-user-policies --user-name "$user" \
--query "AttachedPolicies[?PolicyArn=='arn:aws:iam::aws:policy/AdministratorAccess'].PolicyName" \
--output text)
if [ -n "$ADMIN" ]; then
echo "📋 管理者権限: $user"
fi
done
# 5. パスワードポリシー確認
echo ""
echo "## 5. パスワードポリシー"
POLICY=$(aws iam get-account-password-policy 2>&1)
if echo "$POLICY" | grep -q "MinimumPasswordLength"; then
MIN_LEN=$(echo "$POLICY" | jq -r '.PasswordPolicy.MinimumPasswordLength')
REQUIRE_UPPER=$(echo "$POLICY" | jq -r '.PasswordPolicy.RequireUppercaseCharacters')
REQUIRE_NUM=$(echo "$POLICY" | jq -r '.PasswordPolicy.RequireNumbers')
echo "最小長: $MIN_LEN文字, 大文字必須: $REQUIRE_UPPER, 数字必須: $REQUIRE_NUM"
if [ "$MIN_LEN" -lt 14 ]; then
echo "⚠️ 推奨: パスワード最小長を14文字以上に設定"
fi
else
echo "❌ パスワードポリシーが未設定"
ISSUES=$((ISSUES + 1))
fi
echo ""
echo "=== 検出された問題: ${ISSUES}件 ==="
S3バケットセキュリティ監査
#!/bin/bash
# scripts/audit-s3.sh
echo "=== S3バケットセキュリティ監査 ==="
ISSUES=0
aws s3api list-buckets --query 'Buckets[].Name' --output text | tr '\t' '\n' | while read -r bucket; do
echo ""
echo "--- バケット: $bucket ---"
# パブリックアクセスブロック確認
PUBLIC_BLOCK=$(aws s3api get-public-access-block \
--bucket "$bucket" 2>&1)
if echo "$PUBLIC_BLOCK" | grep -q "NoSuchPublicAccessBlockConfiguration"; then
echo "❌ パブリックアクセスブロック: 未設定"
ISSUES=$((ISSUES + 1))
else
ALL_BLOCKED=$(echo "$PUBLIC_BLOCK" | jq '[
.PublicAccessBlockConfiguration |
.BlockPublicAcls, .IgnorePublicAcls,
.BlockPublicPolicy, .RestrictPublicBuckets
] | all')
if [ "$ALL_BLOCKED" = "true" ]; then
echo "✅ パブリックアクセスブロック: 全有効"
else
echo "⚠️ パブリックアクセスブロック: 一部無効"
fi
fi
# 暗号化設定確認
ENCRYPTION=$(aws s3api get-bucket-encryption \
--bucket "$bucket" 2>&1)
if echo "$ENCRYPTION" | grep -q "ServerSideEncryptionConfigurationNotFoundError"; then
echo "❌ サーバー側暗号化: 未設定"
ISSUES=$((ISSUES + 1))
else
echo "✅ サーバー側暗号化: 有効"
fi
# バージョニング確認
VERSIONING=$(aws s3api get-bucket-versioning \
--bucket "$bucket" \
--query 'Status' --output text)
if [ "$VERSIONING" = "Enabled" ]; then
echo "✅ バージョニング: 有効"
else
echo "⚠️ バージョニング: $VERSIONING"
fi
# ログ設定確認
LOGGING=$(aws s3api get-bucket-logging \
--bucket "$bucket" \
--query 'LoggingEnabled' --output text)
if [ "$LOGGING" = "None" ]; then
echo "⚠️ アクセスログ: 未設定"
else
echo "✅ アクセスログ: 有効"
fi
done
コンプライアンスレポートの自動生成
監査結果を見やすいレポートにまとめる処理もOpenClawで自動化できます。
レポートテンプレート
# コンプライアンス監査レポート
## 基本情報
- **監査日**: {{audit_date}}
- **対象環境**: {{environment}}
- **監査担当**: OpenClaw自動監査
- **レポートID**: {{report_id}}
## サマリー
| カテゴリ | チェック項目数 | PASS | FAIL | WARN |
|---|---|---|---|---|
| IAM | {{iam_total}} | {{iam_pass}} | {{iam_fail}} | {{iam_warn}} |
| ネットワーク | {{net_total}} | {{net_pass}} | {{net_fail}} | {{net_warn}} |
| データ保護 | {{data_total}} | {{data_pass}} | {{data_fail}} | {{data_warn}} |
| ログ・監視 | {{log_total}} | {{log_pass}} | {{log_fail}} | {{log_warn}} |
| **合計** | **{{total}}** | **{{pass}}** | **{{fail}}** | **{{warn}}** |
## コンプライアンススコア: {{score}}/100
## 重要な指摘事項
### 🔴 CRITICAL(即時対応必要)
{{#critical_items}}
- **{{title}}**: {{description}}
- 影響: {{impact}}
- 推奨対応: {{recommendation}}
- 期限: {{deadline}}
{{/critical_items}}
### 🟡 WARNING(改善推奨)
{{#warning_items}}
- **{{title}}**: {{description}}
- 推奨対応: {{recommendation}}
{{/warning_items}}
## 前回からの改善状況
{{#improvements}}
- ✅ {{item}}({{resolved_date}}に対応完了)
{{/improvements}}
OpenClawスキルでの実装
OpenClawのスキル機能を使って、監査ワークフロー全体を体系化できます。
# SKILL.md - compliance-audit
## 概要
AWSアカウントのコンプライアンス監査を自動実行し、レポートを生成する。
## トリガー
- cronジョブ: 週次(月曜 9:00 JST)
- 手動実行: 「コンプライアンス監査を実行」
## 実行手順
1. IAMセキュリティ監査(scripts/audit-iam.sh)
2. S3バケット監査(scripts/audit-s3.sh)
3. セキュリティグループ監査(scripts/audit-sg.sh)
4. CloudTrail設定確認
5. 結果集約とスコアリング
6. レポート生成(Markdown → PDF)
7. Google Driveに保存
8. Slackで結果サマリーを共有
## 出力
- レポート: `reports/compliance/YYYY-MM-DD.md`
- スコア: 100点満点(80点以上: PASS、60-79: 要改善、60未満: FAIL)
セキュリティグループ監査
#!/bin/bash
# scripts/audit-sg.sh
echo "=== セキュリティグループ監査 ==="
# 全開放ルール(0.0.0.0/0)の検出
echo "## 危険なインバウンドルール"
aws ec2 describe-security-groups \
--query 'SecurityGroups[?IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]]].[GroupId,GroupName,IpPermissions[?IpRanges[?CidrIp==`0.0.0.0/0`]].{Port:FromPort,Protocol:IpProtocol}]' \
--output json | jq -r '.[] | "\(.[0]) (\(.[1])): \(.[2])"'
# SSHポート(22)の公開確認
echo ""
echo "## SSH(22)公開チェック"
aws ec2 describe-security-groups \
--filters "Name=ip-permission.from-port,Values=22" \
"Name=ip-permission.cidr,Values=0.0.0.0/0" \
--query 'SecurityGroups[].[GroupId,GroupName]' \
--output text | while read -r sg_id sg_name; do
echo "❌ SSH公開: $sg_id ($sg_name)"
done
# RDP(3389)の公開確認
echo ""
echo "## RDP(3389)公開チェック"
aws ec2 describe-security-groups \
--filters "Name=ip-permission.from-port,Values=3389" \
"Name=ip-permission.cidr,Values=0.0.0.0/0" \
--query 'SecurityGroups[].[GroupId,GroupName]' \
--output text | while read -r sg_id sg_name; do
echo "❌ RDP公開: $sg_id ($sg_name)"
done
# 未使用セキュリティグループ
echo ""
echo "## 未使用セキュリティグループ"
ALL_SGS=$(aws ec2 describe-security-groups \
--query 'SecurityGroups[?GroupName!=`default`].GroupId' \
--output text | tr '\t' '\n')
USED_SGS=$(aws ec2 describe-network-interfaces \
--query 'NetworkInterfaces[].Groups[].GroupId' \
--output text | tr '\t' '\n' | sort -u)
for sg in $ALL_SGS; do
if ! echo "$USED_SGS" | grep -q "$sg"; then
SG_NAME=$(aws ec2 describe-security-groups \
--group-ids "$sg" \
--query 'SecurityGroups[0].GroupName' --output text)
echo "⚠️ 未使用: $sg ($SG_NAME)"
fi
done
監査結果の通知と可視化
Slack通知の実装
監査結果をSlackに自動通知するパターンです。OpenClawのmessageツールを使って直接送信できます。
## Slack通知テンプレート
🔒 **週次セキュリティ監査レポート**
📊 コンプライアンススコア: **{{score}}/100** {{score_emoji}}
| カテゴリ | 結果 |
|---|---|
| IAM | ✅ {{iam_pass}} / ❌ {{iam_fail}} |
| S3 | ✅ {{s3_pass}} / ❌ {{s3_fail}} |
| ネットワーク | ✅ {{net_pass}} / ❌ {{net_fail}} |
| ログ | ✅ {{log_pass}} / ❌ {{log_fail}} |
{{#has_critical}}
🚨 **要対応項目**:
{{#critical_items}}
- {{description}}
{{/critical_items}}
{{/has_critical}}
📄 詳細レポート: {{report_link}}
ISMS対応のチェックリスト自動化
ISMS(ISO 27001)に準拠したチェックリストの自動化も可能です。
管理策のマッピング
| ISO 27001 管理策 | 自動チェック項目 | OpenClawでの実装 |
|---|---|---|
| A.9.2 利用者アクセス管理 | IAMユーザー棚卸 | audit-iam.sh |
| A.10.1 暗号化 | S3/EBS暗号化確認 | audit-s3.sh |
| A.12.4 ログ取得 | CloudTrail/CloudWatch確認 | audit-logging.sh |
| A.13.1 ネットワーク管理 | SG/NACL確認 | audit-sg.sh |
| A.14.2 セキュアな開発 | 依存関係脆弱性スキャン | audit-deps.sh |
| A.18.1 法的要求事項 | リージョン/データ所在地確認 | audit-compliance.sh |
依存関係の脆弱性スキャン
#!/bin/bash
# scripts/audit-deps.sh
echo "=== 依存関係脆弱性スキャン ==="
# Node.jsプロジェクト
if [ -f "package.json" ]; then
echo "## npm audit"
npm audit --json 2>/dev/null | jq '{
total: .metadata.totalDependencies,
vulnerabilities: .metadata.vulnerabilities
}'
fi
# Pythonプロジェクト
if [ -f "requirements.txt" ]; then
echo "## pip-audit"
pip-audit -r requirements.txt --format json 2>/dev/null | \
jq '.dependencies[] | select(.vulns | length > 0) | {name, version, vulns: [.vulns[].id]}'
fi
# Dockerイメージ
if [ -f "Dockerfile" ]; then
echo "## Trivy (Docker)"
IMAGE_NAME=$(grep "^FROM" Dockerfile | tail -1 | awk '{print $2}')
trivy image --format json "$IMAGE_NAME" 2>/dev/null | \
jq '.Results[].Vulnerabilities[] | select(.Severity == "CRITICAL" or .Severity == "HIGH") | {id: .VulnerabilityID, severity: .Severity, pkg: .PkgName}'
fi
SES案件でのコンプライアンス対応のポイント
案件参画時の初動
- 対象規制・基準の確認: ISMS、PCI DSS、FISC等
- 既存の監査体制の把握: 手動 or 自動、頻度、担当者
- ツールチェーンの確認: AWS Config、Security Hub、サードパーティツール
- OpenClawの導入提案: 自動化による工数削減と品質向上
監査自動化の段階的導入
| フェーズ | 内容 | 期間 |
|---|---|---|
| Phase 1 | 既存チェックリストのスクリプト化 | 1〜2週間 |
| Phase 2 | OpenClaw cronでの定期自動実行 | 1週間 |
| Phase 3 | レポート生成の自動化 | 1週間 |
| Phase 4 | Slack通知とダッシュボード連携 | 1週間 |
まとめ:OpenClawでコンプライアンス監査を自動化しよう
コンプライアンス監査は、手動では工数がかかりすぎ、かつ見落としのリスクが常に存在する業務です。OpenClawのcron・スキル・通知機能を組み合わせることで、監査の自動化・定期実行・レポート共有を一貫して実現できます。
SESエンジニアとして、セキュリティ・コンプライアンスの知見は案件の幅を広げ、単価向上にもつながります。OpenClawを活用して効率的な監査体制を構築しましょう。
OpenClawの基本設定はOpenClaw AIアシスタントガイドを、セキュリティ強化はOpenClawセキュリティハードニングをご覧ください。cron活用の詳細はOpenClaw cronスケジューリング、ワークフロー自動化はOpenClawワークフロー自動化が参考になります。