security-checklist について
security-checklistは、AIコーディングアシスタントや開発作業向けのコードセキュリティガイドです。認証情報の保管、環境変数の検証、フロントエンドのトークン処理、コミット前の確認を扱います。
主な機能
- 01除外すべき環境ファイルとignore設定を提示
- 02コードへのシークレットの直書きを禁止
- 03AWS Secrets ManagerとSSMによる機密値の保管を案内
- 04フロントエンドのトークン利用と環境変数検証を規定
- 05コミット前のセキュリティ確認項目を提供
活用シーン
- 01認証情報を扱うコードを作成・変更
- 02コミット前にシークレットや環境ファイルを確認
- 03起動時に必須環境変数を検証
- 04フロントエンドでの機密トークン露出を点検
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ loxosceles-dev/ dev-skills --skill security-checklistインストール後、Claude Code で/security-checklistを入力して読み込まれたか確認します。
詳細
AI コーディングアシスタント向けセキュリティチェックリスト
これは厳格なガイドラインです。 これらのルールに厳密に従ってください。
コードの生成や変更時に従うべき、重要なセキュリティルールです。
これらのファイルはコミットしないでください
実際の値が含まれる環境ファイル:
.env
.env.local
.env.development
.env.production
.env.test
.env.*
テンプレート(実際の値なし)は必ずコミットしてください:
.env_TEMPLATE
.env.example
必須の gitignore パターン:
# Environment files
.env
.env.*
!.env_TEMPLATE
!.env.example
# AWS credentials
.aws/credentials
.aws/config
# SSH keys
*.pem
id_rsa
id_ed25519
シークレットをハードコードしないでください
❌ 絶対に次のようにしないでください:
const apiKey = 'sk-1234567890abcdef';
const dbPassword = 'mypassword123';
const awsAccessKey = 'AKIAIOSFODNN7EXAMPLE';
✅ 必ず次のようにしてください:
// Runtime: Load from environment
const apiKey = process.env.API_KEY;
if (!apiKey) throw new Error('API_KEY not set');
// Infrastructure: Reference from Secrets Manager/SSM
const secret = secretsmanager.Secret.fromSecretNameV2(
this, 'ApiKey',
'/project/prod/api-key'
);
シークレットの保存
適切な AWS サービスを使用してください:
- Secrets Manager:パスワード、API キー、データベース認証情報、トークン
- SSM Parameter Store (SecureString):機密性の高い設定値
- SSM Parameter Store (String):機密性のない設定
禁止事項:
- コード内にシークレットをハードコードする
- シークレットを git にコミットする
- シークレットをコンソール/CloudWatch に記録する
- URL やクエリパラメーターでシークレットを渡す
フロントエンドでのトークンの取り扱い
❌ 機密性の高いトークンを公開しないでください:
// Don't put backend API keys in frontend code
const token = 'secret-backend-token';
✅ 適切な認証方法を使用してください:
// Use public API keys or user-specific tokens
const publicKey = process.env.NEXT_PUBLIC_API_KEY; // Public, safe to expose
const userToken = cookies.get('auth-token'); // User-specific, from auth flow
環境変数の検証
必須のシークレットが存在することを必ず検証してください:
// At application startup
const required = ['DATABASE_URL', 'API_KEY', 'JWT_SECRET'];
const missing = required.filter(key => !process.env[key]);
if (missing.length > 0) {
throw new Error(`Missing required secrets: ${missing.join(', ')}`);
}
コードレビューのチェックリスト
コミットする前に、次の点を確認してください:
- パスワード、API キー、トークンがハードコードされていない
- 実際の値を含む
.envファイルがない - Gitignore にすべてのシークレットファイルのパターンが含まれている
- 起動時に環境変数が検証される
- インフラストラクチャでは Secrets Manager/SSM からシークレットが読み込まれる
- console.log やエラーメッセージにシークレットが含まれていない
- フロントエンドでは公開 API キーまたはユーザー固有のトークンのみを使用している
判断に迷った場合
次の場合は作業を止めて確認してください:
- 内容に「key」、「secret」、「password」、「token」を含むファイルをコミットしようとしている
- 認証情報や機密性の高い値をハードコードしようとしている
- 値を git に含めるべきか、環境変数にすべきか判断できない
安全性を優先してください:機密情報かどうか確信が持てない場合は、シークレットとして扱ってください。
関連項目:
継続的な改善
開発者が、このスキルで防止できるはずだった動作を修正した場合は、同じ修正を今後防ぐため、このスキルに加える具体的な変更を提案してください。
コメント
Markdown 対応