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 blog → aws sso login --profile blog → aws sts get-caller-identity --profile blog が成功することを確認する。Start URL、AWSアカウントID、ユーザー名などの実識別情報を公開文書やログへ記載しない。 - [ ] Terraform実行シェルの
AWS_PROFILE が、日常作業では blog、共通基盤保守では infra-bootstrap を指していることを確認する。 - [ ]
terraform fmt、terraform init -backend=false、terraform validate はAWS認証なしで通り、remote backendを使う terraform init / plan / apply はSSOログイン済みprofileで実行していることを確認する。 - [ ] 共通Identity Center・permission set・state基盤の変更は infra-aws の
bootstrap/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 ci → npm run docs:build → npm run security:metadata を実行し、公開メタデータの差分を確認する。 - [ ] Terraform 変更時は
terraform -chdir=terraform fmt -check、TF_DATA_DIR=/tmp/blog-terraform-security terraform -chdir=terraform init -backend=false、TF_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-SecurityX-Content-Type-Options: nosniffReferrer-PolicyPermissions-PolicyContent-Security-Policy-Report-OnlyX-Frame-Options または CSP-Report-Only の frame-ancestors
- [ ]
http://garookie.com/ が https://garookie.com/ に 3xx リダイレクトされることを確認する。 - [ ]
docs/.vitepress/dist/sitemap.xml、feed.xml、posts-meta.json、robots.txt に公開対象外情報(draft/private/internal/secret 相当)が混入していないことを確認する。 - [ ]
npm test、npm run test:security-integration、npm run docs:build、npm 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.js の head にある GA4、ValueCommerce、Google Forms(iframe)に関する既存設定が維持されているか確認する。 - [ ] サイトマップとフィードに公開対象記事のみが含まれ、公開対象外記事が除外されていることを確認する。
- [ ] ページタイトル/説明文/OGP が崩れていないことを確認する。
4. 継続運用
- [ ] Dependabot の稼働(npm / GitHub Actions / Terraform)が有効であることを確認する。
- [ ]
npm run security:audit の結果を定期的に見直し、必要に応じて軽微な依存更新を行う。 - [ ] 本番ヘッダー・配信結果の検証は、非侵襲的手段(
curl 等、ヘッダー確認)に限定する。