Cloud Security & Container Hardening について
AWS、Azure、GCP のクラウド、コンテナ、Kubernetes、IaC のセキュリティ評価を支援する Claude スキルです。設定レビューやスキャンの手順に、コンプライアンス対応付けと攻撃経路に基づく所見を組み合わせます。
主な機能
- 01AWS、Azure、GCP のセキュリティレビュー
- 02Docker と Kubernetes の強化
- 03Terraform と CloudFormation のスキャン
- 04クラウドコンプライアンスの対応付け
- 05コンテナイメージスキャンのガイダンス
- 06攻撃経路に基づく所見
活用シーン
- 01クラウドの ID とストレージ設定の監査
- 02Dockerfile または Kubernetes マニフェストのレビュー
- 03Terraform または CloudFormation ファイルのスキャン
- 04クラウドの所見をコンプライアンス管理策に対応付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ masriyan/ claude-code-cybersecurity-skill --skill cloud-security-&-container-hardeningインストール後、Claude Code で/cloud-security-&-container-hardeningを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/example_usage.mdscripts/iac_scanner.pycloud_auditor.py詳細
クラウドセキュリティとコンテナの強化
目的
Claude が AWS、Azure、GCP のクラウドセキュリティ評価、コンテナと Kubernetes のセキュリティ強化、Infrastructure as Code(Terraform、CloudFormation、Kubernetes マニフェスト)のスキャン、CIS Benchmarks および主要なフレームワークに基づくクラウドコンプライアンスレポートを支援できるようにします。
有効化のトリガー
次の内容についてユーザーから質問があった場合、このスキルが有効になります。
- AWS IAM、S3、セキュリティグループ、またはクラウドサービスの監査
- Azure RBAC、ストレージ、NSG、または Key Vault 設定のレビュー
- GCP IAM、Cloud Storage、または GKE のセキュリティ評価
- Terraform ファイル、CloudFormation テンプレート、または Kubernetes マニフェストのスキャン
- Docker コンテナの強化、または Dockerfile のレビュー
- Kubernetes RBAC、Pod セキュリティ、またはネットワークポリシー
- クラウドコンプライアンス(CIS、SOC2、PCI-DSS、HIPAA)
- コンテナイメージの脆弱性スキャン
- クラウドアーキテクチャのセキュリティレビュー
- IaC セキュリティスキャン(tfsec、Checkov、Terrascan)
前提条件
pip install pyyaml boto3 requests
推奨するクラウドセキュリティツール:
AWS CLI— AWS の監査と管理ScoutSuite— マルチクラウドのセキュリティ監査Prowler— AWS/Azure/GCP のセキュリティ評価Checkov— IaC の静的解析tfsec— Terraform セキュリティスキャナーTrivy— コンテナと IaC の脆弱性スキャナーkube-bench— CIS Kubernetes BenchmarkFalco— コンテナのランタイムセキュリティ
主な機能
1. AWS セキュリティ監査
ユーザーが AWS セキュリティの監査を依頼した場合:
CLI を使用した AWS セキュリティのクイックチェック:
# IAM: Find users without MFA
aws iam get-account-summary
aws iam list-users | jq '.Users[].UserName' | xargs -I{} aws iam list-mfa-devices --user-name {}
# Find overly permissive policies
aws iam list-policies --scope Local --only-attached | jq '.Policies[].PolicyName'
# S3: Find public buckets
aws s3api list-buckets --query 'Buckets[].Name' | xargs -I{} aws s3api get-bucket-acl --bucket {}
aws s3api list-buckets --query 'Buckets[].Name' | xargs -I{} aws s3api get-bucket-policy-status --bucket {}
# Security groups: Find wide-open rules
aws ec2 describe-security-groups --filters "Name=ip-permission.cidr,Values=0.0.0.0/0" \
--query 'SecurityGroups[*].{ID:GroupId,Name:GroupName,Rules:IpPermissions}'
# CloudTrail: Verify logging
aws cloudtrail describe-trails
aws cloudtrail get-trail-status --name [trail-name]
# Root account check
aws iam get-account-summary --query 'SummaryMap.AccountMFAEnabled'
AWS IAM セキュリティチェックリスト:
Identity & Access Management:
[ ] Root account has MFA enabled
[ ] Root account has no access keys
[ ] All IAM users have MFA enabled
[ ] No IAM users with AdministratorAccess unless necessary
[ ] All IAM users have individual credentials (no shared)
[ ] Password policy: min 14 chars, complexity, rotation ≤90 days
[ ] Access keys rotated every 90 days
[ ] Unused credentials disabled (>90 days no use)
[ ] No inline policies; use managed policies
S3 Security:
[ ] Block Public Access enabled at account level
[ ] No buckets with public READ ACL
[ ] Server-side encryption enabled (SSE-S3 or SSE-KMS)
[ ] Versioning enabled for critical buckets
[ ] MFA Delete enabled for critical buckets
[ ] Access logging enabled
[ ] Bucket policies use HTTPS-only conditions
Networking:
[ ] No security groups with 0.0.0.0/0 → port 22 (SSH)
[ ] No security groups with 0.0.0.0/0 → port 3389 (RDP)
[ ] VPC Flow Logs enabled
[ ] No default VPC in use for production workloads
[ ] Private subnets for database and application tiers
Monitoring & Detection:
[ ] CloudTrail enabled in all regions
[ ] CloudTrail log file integrity validation enabled
[ ] GuardDuty enabled
[ ] Security Hub enabled and findings reviewed
[ ] Config rules configured for compliance
[ ] CloudWatch alarms for: root login, failed auth, security group changes
AWS の重大な検出事項のテンプレート:
**CRITICAL: S3 Bucket Publicly Readable**
Bucket: example-data-prod
Finding: GetBucketAcl returns AllUsers:READ
Risk: All objects publicly readable — potential data breach
Fix: aws s3api put-bucket-acl --bucket example-data-prod --acl private
Enable: aws s3api put-public-access-block --bucket example-data-prod \
--public-access-block-configuration BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true
**HIGH: Security Group Allows SSH from Internet**
Group: sg-0abc123 (web-servers)
Rule: Inbound TCP 22 from 0.0.0.0/0
Risk: SSH brute-force, CVE exploitation
Fix: Change source from 0.0.0.0/0 to your VPN/bastion host IP
2. Azure セキュリティ監査
ユーザーが Azure の監査を依頼した場合:
# Login and set subscription
az login
az account set --subscription [subscription-id]
# Check RBAC assignments
az role assignment list --all --include-inherited \
--query "[?roleDefinitionName=='Owner' || roleDefinitionName=='Contributor'].{Name:principalName,Role:roleDefinitionName}"
# Storage account public access
az storage account list --query "[?allowBlobPublicAccess==true].name"
# NSG rules allowing any source
az network nsg list --query "[*].{NSG:name}" | jq '.[].NSG' | xargs -I{} \
az network nsg rule list --nsg-name {} --resource-group [rg] \
--query "[?sourceAddressPrefix=='*'].{Rule:name,Port:destinationPortRange}"
# Key Vault access policies
az keyvault list --query "[*].name" | xargs -I{} az keyvault show --name {} \
--query 'properties.accessPolicies'
Azure セキュリティチェックリスト:
Identity:
[ ] Global Administrator role has MFA
[ ] No more than 3-5 Global Administrators
[ ] Privileged Identity Management (PIM) for elevated roles
[ ] Guest accounts reviewed quarterly
[ ] Legacy authentication blocked (Conditional Access)
Storage:
[ ] No public blob containers (allowBlobPublicAccess = false)
[ ] Secure transfer required (HTTPS only)
[ ] Storage accounts use private endpoints
[ ] Storage logs enabled (read/write/delete)
[ ] Customer-managed keys for sensitive data
Networking:
[ ] NSGs restrict management ports (22, 3389) from internet
[ ] Azure DDoS Protection enabled
[ ] Network Watcher flow logs enabled
Monitoring:
[ ] Azure Monitor Diagnostic Settings for all resources
[ ] Security Center (Defender for Cloud) enabled
[ ] Log Analytics Workspace connected
[ ] Alerts for privileged role assignments
3. コンテナセキュリティ(Docker)
ユーザーが Dockerfile またはコンテナセキュリティのレビューを依頼した場合:
Claude は Dockerfile を直接読み取り、分析します。
Dockerfile セキュリティレビュー:
# BEFORE (insecure)
FROM ubuntu:latest # ← Never use latest
RUN apt-get install -y curl # ← Install what you need during build
COPY . . # ← Copies everything including .env files
RUN chmod 777 /app # ← World-writable is dangerous
CMD ["./app"] # ← Runs as root by default
EXPOSE 0-65535 # ← Never expose all ports
# AFTER (secure)
FROM ubuntu:24.04 AS builder # Pin specific version
RUN apt-get update && apt-get install -y --no-install-recommends curl \
&& rm -rf /var/lib/apt/lists/* # Clean up after install
WORKDIR /app
FROM ubuntu:24.04 AS runtime # Multi-stage: minimal runtime image
WORKDIR /app
COPY --from=builder /app/bin/myapp ./ # Only copy what's needed
RUN groupadd -r appgroup && useradd -r -g appgroup appuser
RUN chown -R appuser:appgroup /app
USER appuser # Non-root user
EXPOSE 8080 # Only expose necessary port
HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost:8080/health || exit 1
CMD ["./myapp"]
Dockerfile 監査チェックリスト:
[ ] Base image version pinned (not latest)
[ ] Multi-stage build used to minimize final image
[ ] Runs as non-root user (USER instruction)
[ ] No COPY . . (copies .env, secrets)
[ ] .dockerignore exists and excludes .env, *.key, secrets/
[ ] Package caches cleaned after installation (rm -rf /var/lib/apt/lists/*)
[ ] No RUN commands with passwords, tokens, or secrets
[ ] HEALTHCHECK defined
[ ] Only necessary ports EXPOSE'd
[ ] Read-only filesystem where possible
[ ] No setuid/setgid binaries in final image
コンテナイメージのスキャン:
# Scan with Trivy
trivy image myapp:latest --severity HIGH,CRITICAL
trivy image myapp:latest --format json --output scan-results.json
# Docker bench security (runtime checks)
docker run --rm --net host --pid host --userns host --cap-add audit_control \
-v /etc:/etc:ro -v /usr/bin/containerd:/usr/bin/containerd:ro \
-v /usr/bin/runc:/usr/bin/runc:ro \
-v /usr/lib/systemd:/usr/lib/systemd:ro \
-v /var/lib:/var/lib:ro -v /var/run/docker.sock:/var/run/docker.sock:ro \
docker/docker-bench-security
4. Kubernetes セキュリティ
ユーザーが Kubernetes セキュリティの監査を依頼した場合:
# Run CIS Kubernetes Benchmark
docker run --pid=host -v /etc:/etc:ro -v /var/lib:/var/lib:ro \
-v /usr/bin/kubelet:/usr/bin/kubelet:ro \
aquasec/kube-bench:latest
# Check for privileged pods
kubectl get pods --all-namespaces -o json | \
jq '.items[] | select(.spec.containers[].securityContext.privileged==true) |
.metadata.name + " in " + .metadata.namespace'
# Check RBAC for overly permissive ClusterRoles
kubectl get clusterrolebindings -o json | \
jq '.items[] | select(.roleRef.name=="cluster-admin") | .subjects[]?'
# Check for pods running as root
kubectl get pods --all-namespaces -o json | \
jq '.items[] | select(.spec.securityContext.runAsUser==0 or
.spec.containers[].securityContext.runAsUser==0) | .metadata.name'
セキュアな Pod 仕様のテンプレート:
apiVersion: v1
kind: Pod
metadata:
name: secure-app
spec:
securityContext:
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 1000
fsGroup: 2000
seccompProfile:
type: RuntimeDefault
automountServiceAccountToken: false # Disable unless needed
containers:
- name: app
image: myapp:v1.2.3@sha256:abc123 # Pin by digest
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
capabilities:
drop:
- ALL # Drop ALL capabilities
add:
- NET_BIND_SERVICE # Add back only what's needed
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi" # Always set limits
cpu: "500m"
volumeMounts:
- name: tmp
mountPath: /tmp # Writable volume for /tmp if needed
volumes:
- name: tmp
emptyDir: {}
Kubernetes セキュリティチェックリスト:
RBAC:
[ ] No wildcards (*) in ClusterRole rules
[ ] cluster-admin role not assigned to service accounts
[ ] Each workload uses a dedicated service account
[ ] ServiceAccount token auto-mount disabled by default
Pod Security:
[ ] All pods have securityContext defined
[ ] runAsNonRoot: true for all containers
[ ] allowPrivilegeEscalation: false
[ ] readOnlyRootFilesystem: true where possible
[ ] capabilities: drop: [ALL]
[ ] No hostPID, hostIPC, hostNetwork
[ ] No privileged: true
Networking:
[ ] Default deny NetworkPolicy in all namespaces
[ ] Only required pod-to-pod communication allowed
[ ] Egress restricted (not just ingress)
Secrets Management:
[ ] No secrets in environment variables (use mounted secrets or vault)
[ ] No secrets in ConfigMaps
[ ] External secrets management (Vault, AWS SSM, Azure Key Vault)
[ ] ETCD encryption at rest enabled
Image Security:
[ ] All images from private registry (not Docker Hub public)
[ ] Image digest pinning (not mutable tags)
[ ] Admission controller (OPA, Kyverno) enforcing policy
[ ] Image scanning in CI/CD pipeline
5. IaC セキュリティスキャン
ユーザーが Terraform または CloudFormation のスキャンを依頼した場合:
Claude は IaC ファイルを直接読み取り、問題を特定します。
Terraform でよくある設定ミス:
# INSECURE: S3 bucket with public access
resource "aws_s3_bucket" "bad" {
bucket = "my-bucket"
acl = "public-read" # ← PUBLIC READ!
}
# SECURE: S3 bucket with all public access blocked
resource "aws_s3_bucket" "good" {
bucket = "my-bucket"
}
resource "aws_s3_bucket_public_access_block" "good" {
bucket = aws_s3_bucket.good.id
block_public_acls = true
block_public_policy = true
ignore_public_acls = true
restrict_public_buckets = true
}
# INSECURE: Security group allows all inbound
resource "aws_security_group_rule" "bad" {
type = "ingress"
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # ← OPEN TO INTERNET!
}
IaC の自動スキャン:
# Checkov (Terraform, CloudFormation, K8s, Dockerfile)
checkov -d ./terraform/ --framework terraform --output json > checkov-results.json
checkov -d ./k8s-manifests/ --framework kubernetes
# tfsec (Terraform focused)
tfsec ./terraform/ --format json --out tfsec-results.json
# Trivy (IaC, container, filesystem)
trivy config ./terraform/
trivy config ./k8s-manifests/
# Use iac_scanner.py
python scripts/iac_scanner.py --path ./terraform/ --output findings.json
python scripts/iac_scanner.py --path ./k8s-manifests/ --type kubernetes --output k8s_audit.json
コンプライアンスフレームワークとの対応
| 検出事項 | CIS AWS | SOC2 | PCI-DSS | HIPAA |
|---|---|---|---|---|
| MFA が適用されていない | 1.10, 1.14 | CC6.1 | 8.3.2 | 164.312(d) |
| S3 バケットが公開されている | 2.1.5 | CC6.7 | 3.4 | 164.312(a)(2)(iv) |
| CloudTrail が無効になっている | 3.1, 3.2 | CC7.2 | 10.2 | 164.312(b) |
| SSH がインターネットに公開されている | 5.2 | CC6.6 | 1.2.1 | 164.312(e)(1) |
| ルートアカウントが使用されている | 1.7 | CC6.1 | 7.1.1 | 164.308(a)(1) |
スクリプトのリファレンス
iac_scanner.py
python scripts/iac_scanner.py --path ./terraform/ --output findings.json
python scripts/iac_scanner.py --path ./k8s-manifests/ --type kubernetes --output k8s_audit.json
スキルの連携
| 条件 | 関連スキル |
|---|---|
| 偵察でクラウドアセットが見つかった場合 | ← スキル 01(偵察と OSINT) |
| CSOC アラート向けのクラウド脆弱性 | → スキル 11(CSOC 自動化) |
| クラウド強化の推奨事項を実装する場合 | → スキル 15(ブルーチーム防御) |
参考資料
- クラウド向け CIS Benchmarks
- AWS Well-Architected セキュリティの柱
- Azure Security Benchmark v3
- GCP セキュリティのベストプラクティス
- CIS Kubernetes Benchmark
- Checkov ドキュメント
- Prowler ドキュメント
v3.0 の強化点(2026 年更新)
攻撃経路主導のクラウドセキュリティ:
- アイデンティティが境界です — 特権昇格につながる経路(過剰な権限を持つロール、
iam:PassRole、ワイルドカードアクション、クロスアカウント信頼、CI/CD への OIDC フェデレーション)を列挙します。個別の設定ミスではなく、攻撃経路(CNAPP/CSPM スタイル)として考えます。 - インスタンスメタデータ — AWS ではホップ制限 1 の IMDSv2 を必須にします。Azure/GCP のメタデータ保護が SSRF を防げることを検証します(スキル 09 に関連)。
- Kubernetes 2026 — Pod Security Admission(baseline/restricted)、ワークロード ID(EKS Pod Identity / GKE Workload Identity / AKS)、デフォルトの SA に cluster-admin を付与しないこと、デフォルト拒否のネットワークポリシー、アドミッション制御(OPA/Gatekeeper、Kyverno)。
- CI/CD とサプライチェーン — パイプライン内のシークレット、クラウドへの OIDC 信頼、アーティファクト署名(Sigstore/cosign)、SLSA 来歴、Terraform の状態ファイルの露出。
- ランタイム — コンテナーエスケープや暗号資産マイニングを検知する eBPF ランタイム検出(Falco/Tetragon)。検出結果をクラウド/コンテナー向け MITRE ATT&CK にマッピングします。
精度ルール: 検出結果はそれぞれ、設定ミス → 到達可能なアイデンティティ/データ → 影響範囲 の形式で、正確な CLI/IaC の修正方法とともに報告します。