cloud-infrastructure-security について
クラウドおよびインフラのセキュリティスキルです。デプロイ、アクセス管理、シークレット、ネットワーク、ログ、CI/CD、CDN セキュリティ、復旧のチェックリストと設定例を提供し、クラウド環境やデプロイ設定の確認に役立ちます。
主な機能
- 01IAM とアクセス制御の確認
- 02シークレットと認証情報の管理
- 03ネットワークセキュリティ設定の確認
- 04ログと監視の確認
- 05CI/CD と CDN 保護の評価
- 06バックアップと災害復旧の計画
活用シーン
- 01本番前のクラウドデプロイ確認
- 02IAM ポリシーとシークレット管理の監査
- 03CI/CD パイプラインと CDN 設定の強化
- 04バックアップとインシデント対応計画の確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ valorvie/ ai-dev-skills --skill cloud-infrastructure-securityインストール後、Claude Code で/cloud-infrastructure-securityを入力して読み込まれたか確認します。
詳細
クラウド&インフラストラクチャセキュリティスキル | クラウドインフラストラクチャのセキュリティ
クラウドインフラストラクチャ、CI/CD パイプライン、デプロイ設定がセキュリティのベストプラクティスに従い、業界標準に準拠していることを確認します。
適用シナリオ
- アプリケーションをクラウドプラットフォーム(AWS, Vercel, Railway, Cloudflare)にデプロイする
- IAM ロールと権限を設定する
- CI/CD パイプラインを設定する
- Infrastructure as Code(Terraform, CloudFormation)を実装する
- ロギングと監視を設定する
- クラウド環境のシークレットを管理する
- CDN とエッジセキュリティを設定する
- 災害復旧とバックアップ戦略を実装する
クラウドセキュリティチェックリスト
1. IAM とアクセス制御
最小権限の原則
# ✅ 正確:最小權限
iam_role:
permissions:
- s3:GetObject # 只有讀取權限
- s3:ListBucket
resources:
- arn:aws:s3:::my-bucket/* # 特定 bucket
# ❌ 錯誤:過度寬鬆的權限
iam_role:
permissions:
- s3:* # 所有 S3 動作
resources:
- "*" # 所有資源
確認手順
- 本番環境で root アカウントを使用しない
- すべての特権アカウントで MFA を有効にする
- サービスアカウントでは長期認証情報ではなくロールを使用する
- IAM ポリシーが最小権限に従っている
- 定期的にアクセスを監査する
- 未使用の認証情報をローテーションまたは削除する
2. シークレット管理
クラウドシークレットマネージャー
// ✅ 正確:使用雲端 secrets manager
import { SecretsManager } from '@aws-sdk/client-secrets-manager';
const client = new SecretsManager({ region: 'us-east-1' });
const secret = await client.getSecretValue({ SecretId: 'prod/api-key' });
const apiKey = JSON.parse(secret.SecretString).key;
// ❌ 錯誤:硬編碼或僅在環境變數
const apiKey = process.env.API_KEY; // 不輪替,不審計
確認手順
- すべてのシークレットをクラウドシークレットマネージャーに保存する
- データベース認証情報の自動ローテーションを有効にする
- API キーを少なくとも四半期ごとにローテーションする
- コード、ログ、エラーメッセージにシークレットが含まれていない
- シークレットへのアクセス監査ログを有効にする
3. ネットワークセキュリティ
VPC とファイアウォールの設定
# ✅ 正確:限制的安全群組
resource "aws_security_group" "app" {
name = "app-sg"
ingress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["10.0.0.0/16"] # 僅內部 VPC
}
egress {
from_port = 443
to_port = 443
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # 僅 HTTPS 出站
}
}
# ❌ 錯誤:對網際網路開放
resource "aws_security_group" "bad" {
ingress {
from_port = 0
to_port = 65535
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"] # 所有 port,所有 IP!
}
}
確認手順
- データベースへのパブリックアクセスを禁止する
- SSH/RDP ポートへのアクセスを VPN/bastion に制限する
- セキュリティグループが最小権限に従っている
- Network ACLs を設定する
- VPC flow logs を有効にする
4. ログと監視
CloudWatch/Logging の設定
// ✅ 正確:完整的日誌
const logSecurityEvent = async (event: SecurityEvent) => {
await cloudwatch.putLogEvents({
logGroupName: '/aws/security/events',
logStreamName: 'authentication',
logEvents: [{
timestamp: Date.now(),
message: JSON.stringify({
type: event.type,
userId: event.userId,
ip: event.ip,
result: event.result,
// 永不記錄敏感資料
})
}]
});
};
確認手順
- すべてのサービスで CloudWatch/logging を有効にする
- 認証の失敗を記録する
- 管理者の操作を監査する
- ログの保持期間を設定する(コンプライアンス要件では 90 日以上)
- 不審なアクティビティのアラートを設定する
- ログを一元管理し、改ざんを防止する
5. CI/CD パイプラインのセキュリティ
セキュアなパイプライン設定
# ✅ 正確:安全的 GitHub Actions workflow
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
permissions:
contents: read # 最小權限
steps:
- uses: actions/checkout@v4
# 掃描 secrets
- name: Secret scanning
uses: trufflesecurity/trufflehog@main
# 依賴審計
- name: Audit dependencies
run: npm audit --audit-level=high
# 使用 OIDC,非長期 token
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
role-to-assume: arn:aws:iam::123456789:role/GitHubActionsRole
aws-region: us-east-1
確認手順
- 長期認証情報の代わりに OIDC を使用する
- パイプラインでシークレットをスキャンする
- 依存関係の脆弱性をスキャンする
- コンテナイメージをスキャンする(該当する場合)
- ブランチ保護ルールを強制する
- マージ前にコードレビューを必須にする
- コミットへの署名を必須にする
6. Cloudflare と CDN のセキュリティ
Cloudflare のセキュリティ設定
// ✅ 正確:帶安全標頭的 Cloudflare Workers
export default {
async fetch(request: Request): Promise<Response> {
const response = await fetch(request);
const headers = new Headers(response.headers);
headers.set('X-Frame-Options', 'DENY');
headers.set('X-Content-Type-Options', 'nosniff');
headers.set('Referrer-Policy', 'strict-origin-when-cross-origin');
headers.set('Permissions-Policy', 'geolocation=(), microphone=()');
return new Response(response.body, {
status: response.status,
headers
});
}
};
確認手順
- WAF で OWASP ルールを有効にする
- レート制限を設定する
- ボット対策を有効にする
- DDoS 対策を有効にする
- セキュリティヘッダーを設定する
- SSL/TLS strict モードを有効にする
7. バックアップと災害復旧
自動バックアップ
# ✅ 正確:自動 RDS 備份
resource "aws_db_instance" "main" {
allocated_storage = 20
engine = "postgres"
backup_retention_period = 30 # 30 天保留
backup_window = "03:00-04:00"
maintenance_window = "mon:04:00-mon:05:00"
enabled_cloudwatch_logs_exports = ["postgresql"]
deletion_protection = true # 防止意外刪除
}
確認手順
- 毎日の自動バックアップを設定する
- バックアップの保持期間がコンプライアンス要件を満たしている
- ポイントインタイムリカバリを有効にする
- 四半期ごとにバックアップをテストする
- 災害復旧計画を文書化する
- RPO と RTO を定義し、テストする
デプロイ前のクラウドセキュリティチェックリスト
本番環境へのクラウドデプロイ前に、以下を確認します。
- IAM:root アカウントを使用しない、MFA を有効にする、最小権限ポリシーを適用する
- シークレット:すべてのシークレットをクラウドシークレットマネージャーに保存し、ローテーションする
- ネットワーク:セキュリティグループを制限し、データベースを公開しない
- ログ:CloudWatch/logging を有効にし、保持期間を設定する
- 監視:異常アラートを設定する
- CI/CD:OIDC 認証、シークレットスキャン、依存関係の監査を行う
- CDN/WAF:Cloudflare WAF で OWASP ルールを有効にする
- 暗号化:保存データと転送中のデータを暗号化する
- バックアップ:自動バックアップを設定し、復旧をテストする
- コンプライアンス:GDPR/HIPAA の要件を満たす(該当する場合)
- ドキュメント:インフラストラクチャを文書化し、runbooks を作成する
- インシデント対応:セキュリティインシデント対応計画を整備する
よくあるクラウドセキュリティ設定ミス
S3 バケットの公開
# ❌ 錯誤:公開 bucket
aws s3api put-bucket-acl --bucket my-bucket --acl public-read
# ✅ 正確:私有 bucket 並指定存取
aws s3api put-bucket-acl --bucket my-bucket --acl private
aws s3api put-bucket-policy --bucket my-bucket --policy file://policy.json
RDS のパブリックアクセス
# ❌ 錯誤
resource "aws_db_instance" "bad" {
publicly_accessible = true # 永遠不要這樣做!
}
# ✅ 正確
resource "aws_db_instance" "good" {
publicly_accessible = false
vpc_security_group_ids = [aws_security_group.db.id]
}
参考資料
- AWS セキュリティのベストプラクティス
- CIS AWS Foundations ベンチマーク
- Cloudflare セキュリティドキュメント
- OWASP クラウドセキュリティ
- Terraform セキュリティのベストプラクティス
覚えておきましょう:クラウドの設定ミスは、データ漏えいの主な原因です。S3 バケットが一つ公開されているだけでも、あるいは IAM ポリシーの権限が過剰なだけでも、インフラストラクチャ全体が危険にさらされる可能性があります。常に最小権限の原則と多層防御に従ってください。
コメント
Markdown 対応