Skip to content

セキュリティチェックリスト

1. デプロイ前チェック

  • [ ] ローカルTerraformはIAM Identity Center SSOのみを使用し、Access Key / Secret Access Keyを作成・保存していないことを確認する。
  • [ ] 日常運用は blog profile(permission set BlogTerraformOperator)、共通基盤の非日常保守は infra-bootstrap profile(permission set InfraAwsIdentityCenterBootstrap)を使い、セッション有効期間が1時間であることを確認する。
  • [ ] aws configure sso --profile blogaws sso login --profile blogaws sts get-caller-identity --profile blog が成功することを確認する。Start URL、AWSアカウントID、ユーザー名などの実識別情報を公開文書やログへ記載しない。
  • [ ] Terraform実行シェルの AWS_PROFILE が、日常作業では blog、共通基盤保守では infra-bootstrap を指していることを確認する。
  • [ ] terraform fmtterraform init -backend=falseterraform validate はAWS認証なしで通り、remote backendを使う terraform init / plan / apply はSSOログイン済みprofileで実行していることを確認する。
  • [ ] 共通Identity Center・permission set・state基盤の変更は infra-awsbootstrap/account-foundation/ で行い、ブログ固有Terraformはこのrepoの terraform/ に限定する。
  • [ ] 初回bootstrap以外で AdministratorAccess を常用していないことを確認する。root break-glassはroot MFAで一時再割り当てし、復旧後解除する。root Access Keyは作成しない。
  • [ ] docs/.vitepress/config.js の公開判定ルール(draft / private / internal / secret、および internal/private/secret/下書き/未公開/内部 タグ)の変更が想定通りか確認する。
  • [ ] npm run security:audit が通ることを確認する。
  • [ ] 依存更新時は npm cinpm run docs:buildnpm run security:metadata を実行し、公開メタデータの差分を確認する。
  • [ ] Terraform 変更時は terraform -chdir=terraform fmt -checkTF_DATA_DIR=/tmp/blog-terraform-security terraform -chdir=terraform init -backend=falseTF_DATA_DIR=/tmp/blog-terraform-security terraform -chdir=terraform validate を通す。
  • [ ] deploy ワークフローの起動条件(main のみ)と production 環境・OIDC 設定が維持されているかを確認する。
  • [ ] GitHub Actions deployが production Environment + OIDCのままで、SSOやAccess Keyを使用していないことを確認する。

2. デプロイ後チェック

  • [ ] npm run security:headers を実行し、HTTPS 応答に以下が揃っていることを確認する。
    • Strict-Transport-Security
    • X-Content-Type-Options: nosniff
    • Referrer-Policy
    • Permissions-Policy
    • Content-Security-Policy-Report-Only
    • X-Frame-Options または CSP-Report-Only の frame-ancestors
  • [ ] http://garookie.com/https://garookie.com/ に 3xx リダイレクトされることを確認する。
  • [ ] docs/.vitepress/dist/sitemap.xmlfeed.xmlposts-meta.jsonrobots.txt に公開対象外情報(draft/private/internal/secret 相当)が混入していないことを確認する。
  • [ ] npm testnpm run test:security-integrationnpm run docs:buildnpm run security:metadata を順に実行し、shared publication policy により非公開記事が HTML、OG、ページ JS を含む公開成果物へ出ないことを確認する。
  • [ ] posts-meta.json が配列で、各要素が title / url / tags / date のみを含むことを確認する。
  • [ ] sitemap.xml / feed.xml / posts-meta.json / robots.txt に機密情報を疑う文字列(AWS_ACCESS_KEY, SECRET, TOKEN, PRIVATE_KEY, BEGIN RSA, BEGIN OPENSSH)が含まれていないことを確認する。

3. GA4 / フォーム / SEO 影響確認

  • [ ] docs/.vitepress/config.jshead にある GA4、ValueCommerce、Google Forms(iframe)に関する既存設定が維持されているか確認する。
  • [ ] サイトマップとフィードに公開対象記事のみが含まれ、公開対象外記事が除外されていることを確認する。
  • [ ] ページタイトル/説明文/OGP が崩れていないことを確認する。

4. 継続運用

  • [ ] Dependabot の稼働(npm / GitHub Actions / Terraform)が有効であることを確認する。
  • [ ] npm run security:audit の結果を定期的に見直し、必要に応じて軽微な依存更新を行う。
  • [ ] 本番ヘッダー・配信結果の検証は、非侵襲的手段(curl 等、ヘッダー確認)に限定する。

Last updated: