さくらのレンタルサーバー
株式会社NTTデータCCS 御中
大伸社コミュニケーションデザイン
2026/MM/DD
現行サイトはサーバー障害時の復旧手段を持たない。DNS も自社で変更できないため、障害発生時に取れる対応が存在しない。
さくらのレンタルサーバー
課題1と2が重なることで、「障害が起きたら復旧を待つしかない」状態となっている。
これが本件の最も重要な解決対象である。
DNS レコードの変更なしで可用性を確保することを最大の目的として AWS を採用する。
| 観点 | 現行(さくら) | 新構成(AWS) |
|---|---|---|
| 障害時の切り替え主体 | 人(DNS 変更が必要) | CloudFront(自動) |
| 親会社への依頼 | 必須(実質不可) | 不要 |
| 切り替え所要時間 | 数時間〜数日(DNS 伝播) | 数秒(自動) |
| DNS レコードの変更 | 必要 | 一切不要 |
DNS の宛先は CloudFront に固定されたまま変わらない。オリジン(S3)の切り替えは CloudFront の内部で完結する。
本書は AWS 上のインフラ構成を定義する。CMS 内部の設計・コンテンツ制作は対象外とする。
| 区分 | 対象外の内容 | 参照先 |
|---|---|---|
| CMS | microCMS のスキーマ・権限・運用設計 | 別紙「CMS設計書」 |
| 制作 | サイトのデザイン・情報設計・コンテンツ制作 | 別途 |
| 実装 | アプリケーション内部の実装詳細 | 別途 |
| 外部 | 外部フォーム SaaS の内部構成・SLA | 各提供元 |
| 環境 | NTTデータCCS 様の社内ネットワーク・端末環境 | — |
| 事象 | 対応 | 発生可能性 |
|---|---|---|
| S3 リージョン障害 | 自動フォールバックで継続 | — |
| デプロイ内容の不具合 | 再デプロイで復旧(「切り分けと復旧手段」) | — |
| CloudFront 全体の障害 | DNS 変更なしでは復旧不可 | 極めて低い |
静的配信に必要な要素が揃い、かつ DNS 変更なしで冗長化できる構成を組めるのは AWS である。
| 選択肢 | 課題 |
|---|---|
| レンタルサーバー(現行) | アクセス集中で不安定。CDN・WAF を組み込めない。冗長化不可 |
| VPS・専用サーバー | OS とミドルウェアの保守が継続的に発生する |
| Amplify Hosting | 設定自由度が低く、オリジン冗長化に対応できない |
採用する AWS サービスは11種。静的配信に必要な最小構成に絞り込んでいる。
| # | サービス | リージョン | 役割 |
|---|---|---|---|
| 1 | S3 | 東京 / 大阪 | 静的ファイル配信元 |
| 2 | CloudFront | グローバル | CDN・TLS 終端 |
| 3 | CloudFront Functions | グローバル | URL 書き換え・Basic 認証 |
| 4 | Route 53 | グローバル | DNS ※親会社管理 |
| 5 | ACM | us-east-1 | TLS 証明書 |
| 6 | AWS WAF | us-east-1 | Web 攻撃対策 |
| 7 | CloudWatch | 東京 | 監視・アラーム |
| 8 | SNS | 東京 | アラート通知 |
| 9 | CloudTrail | 東京 | 操作監査ログ |
| 10 | IAM(OIDC) | グローバル | CI/CD 認証 |
| 11 | AWS Budgets | グローバル | コスト監視 |
| サービス | 不採用の理由 |
|---|---|
| EC2 / ECS / Lambda | SSG のため実行環境が不要 |
| RDS / DynamoDB | コンテンツの正は microCMS のため不要 |
| API Gateway | フォームは外部 SaaS、検索は静的インデックスで実現 |
ACM と AWS WAF は us-east-1(バージニア北部)に作成する。CloudFront に紐づくリソースはこのリージョンにしか作成できない AWS の制約による。
CloudFront + S3 による静的配信構成。サーバーを持たないため、障害点と運用負荷が構造的に最小化される。
サーバー費用が発生せず、CloudFront の無料枠に収まるため、月額 3,400円程度で運用できる。
月間 20万 PV / 転送量 約 60GB / リクエスト 約 300万(1 PV あたり15リクエストで算定)
サイト容量 100MB(東京・大阪とも) / 1 USD = 155円 【要確認】月間 PV は現行サイトの実績値でご確認いただきたい
| # | サービス | 内訳 | 月額(USD) |
|---|---|---|---|
| 1 | CloudFront | 転送量 60GB | $0.00 ※無料枠 1TB 内 |
| 2 | CloudFront | リクエスト 300万 | $0.00 ※無料枠 1,000万 内 |
| 3 | CloudFront Functions | 300万回(無料枠 200万の超過分) | $0.10 |
| 4 | S3(東京) | ストレージ 100MB | $0.01 |
| 5 | S3(大阪) | ストレージ 100MB | $0.01 |
| 6 | S3 | リクエスト・ログ保管 | $0.20 |
| 7 | AWS WAF | Web ACL $5 + ルール4種 $4 + リクエスト課金 | $11.00 |
| 8 | Route 53 | ホストゾーン 1件 | $1.00 |
| 9 | CloudWatch | アラーム 4件 | $0.40 |
| 10 | ACM / CloudTrail / Budgets | — | $0.00 |
| 本番環境 小計 | 約 $13 | ||
| 11 | ステージング環境 | WAF $9 + CloudFront・S3 | 約 $9 |
| 合計 | 約 $22 / 月額 約 3,400円 | ||
microCMS 利用料 / 外部フォーム SaaS 利用料 / ドメイン更新料 / 保守運用費(別途お見積)
想定の3倍までアクセスが増えても月額は変わらない。無料枠の上限は約65万 PV。
| 月間 PV | 転送量/リクエスト | 月額(USD) | 月額(円) | 備考 |
|---|---|---|---|---|
| 20万 | 60GB / 300万 | 約 $22 | 約 3,400円 | 標準想定 |
| 65万 | 195GB / 1,000万 | 約 $22 | 約 3,400円 | 無料枠の上限 |
| 100万 | 300GB / 1,500万 | 約 $29 | 約 4,500円 | リクエスト超過分が加算 |
転送量よりもリクエスト数が先に上限に達する。1 PV あたり15リクエストで算定すると、月間約65万 PV が無料枠の境界となる。現行想定(20万 PV)の3倍以上にあたるため、当面の超過は見込まれない。
AWS Budgets により月額 $50 超で通知する設定とし、攻撃による異常なアクセス増も早期に検知する。
単一 AWS アカウント内に構築する。リージョンは東京を主、大阪を副とする。
株式会社NTTデータCCS 様(AWS アカウントの所有者・請求先)
NTTデータCCS コーポレートサイト https://www.nttdata-ccs.co.jp/
nttdata-ccs ※ IAM のサインイン URL に使用する別名
https://nttdata-ccs.signin.aws.amazon.com/console
nttdata-ccs(CMS のサービスID と統一)
| リージョン | 用途 |
|---|---|
| ap-northeast-1(東京) | プライマリ。S3・CloudWatch・SNS・CloudTrail |
| ap-northeast-3(大阪) | セカンダリ。S3 のみ |
| us-east-1(バージニア北部) | ACM 証明書・AWS WAF ※CloudFront の制約による |
単一 AWS アカウントを採用する。マルチアカウントは本件の規模に対して過剰と判断した。
| 項目 | 単一アカウント(採用) | マルチアカウント |
|---|---|---|
| 環境の分離 | 命名規則・タグによる論理分離 | 物理的に完全分離 |
| 誤操作の防止 | 命名規則と権限設計で低減 | 構造的に防止できる |
| 管理コスト | 低い | 高い(権限・請求の設計が必要) |
| 本件での適合 | 適合 | 過剰 |
上記に該当する場合は構成を見直す。【要確認】社内方針の有無をご確認いただきたい。
本番・ステージングの2環境を整備する。ステージングは Basic 認証で保護する。
2環境を整備
| 環境 | 役割 | ドメイン | アクセス制限 |
|---|---|---|---|
| 本番環境 | 公開サイトを配信 | www.nttdata-ccs.co.jp | なし(WAF による防御のみ) |
| ステージング環境 | 公開前の表示確認 | stg.nttdata-ccs.co.jp【要確認】 | Basic 認証 + noindex |
| リソース | 本番 | ステージング |
|---|---|---|
| S3 バケット | 東京 + 大阪(2式) | 東京のみ(1式) |
| CloudFront | 1式 | 1式 |
| AWS WAF | 1式 | 1式 |
| オリジン冗長化 | あり | なし |
| 追加コスト | — | 月額 約 $8 |
IaC を採用しないため、命名規約が唯一のリソース管理手段となる。例外なく適用する。
{プロジェクト}-{環境}-{用途}-{リージョン}
prod = 本番環境 / stg = ステージング環境
| リソース | 命名 |
|---|---|
| S3(本番・東京) | nttdata-ccs-prod-web-tokyo |
| S3(本番・大阪) | nttdata-ccs-prod-web-osaka |
| S3(ステージング) | nttdata-ccs-stg-web-tokyo |
| S3(ログ) | nttdata-ccs-prod-logs |
| CloudFront | nttdata-ccs-prod-cf / nttdata-ccs-stg-cf |
| CloudFront Functions | nttdata-ccs-prod-fn-rewrite |
| WAF Web ACL | nttdata-ccs-prod-webacl |
| IAM ロール | nttdata-ccs-github-actions-prod |
| SNS トピック | nttdata-ccs-prod-alerts |
| CloudWatch アラーム | nttdata-ccs-prod-alarm-5xx |
全リソースにタグを必須で付与する。コスト配分と管理主体の明示に使用する。
| タグキー | 値の例 | 用途 |
|---|---|---|
| Project | nttdata-ccs-site | プロジェクト識別 |
| Environment | prod / stg | 環境識別 |
| ManagedBy | 大伸社コミュニケーションデザイン | 管理主体の明示 |
| CostCenter | 【要確認】 | コスト配分レポートでの集計 |
| CreatedAt | 2026-MM | 作成時期の記録 |
IaC を採用しない構成では、設定のドリフト(実際の設定と設計書の乖離)が発生しやすい。タグとパラメータ一覧の更新徹底が運用品質を左右する。
最小権限の原則に従う。CI/CD には長期の認証情報を発行しない。
| 種別 | 対象 | 認証方式 |
|---|---|---|
| CI/CD ロール | GitHub Actions | OIDC(一時認証) |
| 運用者アカウント | 弊社保守担当 | IAM ユーザー + MFA |
| 閲覧専用アカウント | NTTデータCCS 様【要確認】 | IAM ユーザー + MFA |
GitHub Actions から AWS への認証は OIDC で行う。アクセスキーを一切発行しない。
GitHub OIDC Provider + IAM Role(AssumeRoleWithWebIdentity)を使用する
| ロール名 | 信頼条件(ブランチ限定) | 権限範囲 |
|---|---|---|
| nttdata-ccs-github-actions-prod | refs/heads/main のみ | 本番リソースのみ |
| nttdata-ccs-github-actions-stg | refs/heads/develop のみ | ステージングリソースのみ |
信頼ポリシーでブランチを限定しない場合、任意のブランチから本番デプロイが可能になる。ブランチ限定は必須の設定とする。
CI/CD ロールに付与するのはデプロイに必要な4アクションのみ。
| サービス | アクション | 対象リソース |
|---|---|---|
| S3 | PutObject | 該当環境のバケットのみ |
| S3 | DeleteObject | 同上 |
| S3 | ListBucket | 同上 |
| CloudFront | CreateInvalidation | 該当ディストリビューションのみ |
バケットの作成・削除 / バケットポリシーの変更 / CloudFront の設定変更 / 他リソースへのアクセス全般
| 許可対象 | アクション | 条件 |
|---|---|---|
| CloudFront サービスプリンシパル | s3:GetObject | 該当ディストリビューション ARN からのみ |
| CloudFront サービスプリンシパル | s3:ListBucket | 同上 |
s3:ListBucket は必須である。付与しない場合、オブジェクト不在時に 403 が返り、オリジンフェイルオーバーが誤動作する(詳細は「フェイルオーバー時の注意事項」)。
人が使うアカウントは MFA を必須とする。NTTデータCCS 様への発行範囲は要確認。
| 用途 | 権限範囲 | MFA | 発行 |
|---|---|---|---|
| 弊社保守担当 | 運用に必要な範囲 | 必須 | 構築時 |
| NTTデータCCS 様(閲覧) | ReadOnlyAccess | 必須 | 【要確認】 |
| NTTデータCCS 様(操作) | 【要確認】 | 必須 | 【要確認】 |
| ルートユーザー | 全権限 | 必須 | 初期設定のみ使用 |
AWS の操作は日常運用では発生しない。コンテンツ更新は microCMS のみで完結するため、NTTデータCCS 様が AWS を操作する機会は通常ない。
攻撃対象領域を構造的に最小化する。サーバーを持たないため、OS・ミドルウェアの脆弱性リスクが存在しない。
多層防御を採用し、6つの層で保護する
| 層 | 対策 | 内容 |
|---|---|---|
| 1. 通信 | TLS 1.2 以上必須 | HTTP は HTTPS へ強制リダイレクト |
| 2. アプリ層 | AWS WAF | マネージドルールで主要攻撃を遮断 |
| 3. オリジン | OAC | S3 への直接アクセスを完全に遮断 |
| 4. データ | SSE-S3 暗号化 | 保管データの暗号化 |
| 5. 権限 | 最小権限 IAM | CI/CD は OIDC。長期キーを発行しない |
| 6. 監査 | CloudTrail | 全 API 操作の記録 |
| 一般的なリスク | 本構成での状況 |
|---|---|
| OS・ミドルウェアの脆弱性 | サーバーが存在しないため発生しない |
| SQL インジェクション | DB が存在しないため発生しない |
| 管理画面への不正ログイン | AWS 側に管理画面が存在しない |
| 不正なファイルアップロード | アップロード機能が存在しない |
AWS マネージドルールを基本とする。個別のルール作成は行わず、運用負荷を抑える。
| 項目 | 設定値 |
|---|---|
| 名称 | nttdata-ccs-prod-webacl |
| スコープ | CLOUDFRONT(us-east-1) |
| デフォルトアクション | Allow |
| ログ出力先 | S3(nttdata-ccs-prod-logs) |
| 優先度 | ルール名 | 種別 | 目的 |
|---|---|---|---|
| 1 | AWSManagedRulesAmazonIpReputationList | マネージド | 攻撃元として既知の IP |
| 2 | AWSManagedRulesKnownBadInputsRuleSet | マネージド | 既知の脆弱性を狙う入力 |
| 3 | AWSManagedRulesCommonRuleSet | マネージド | XSS・パストラバーサル等 |
| 4 | RateLimitRule(5分間 2,000超)【仮】 | レートベース | 大量アクセスの抑制 |
IP 制限はかけない。
CMS設計書と同様、閲覧者向けの公開サイトであるため IP 制限は行わない。ステージング環境のみ Basic 認証で保護する(「プレビュー・下書き」)。
導入時は Count モードで誤検知を確認してから Block へ切り替える。いきなり Block にしない。
| 段階 | 期間 | アクション設定 | 作業 |
|---|---|---|---|
| 1. 検証 | 公開前〜公開後1週間 | 全ルール Count | ログを確認し誤検知を洗い出す |
| 2. 段階適用 | 公開後 1〜2週目 | 優先度 1・2 を Block | 影響を確認 |
| 3. 本適用 | 公開後 2週目以降 | 全ルール Block | 継続的にログを監視 |
いきなり Block モードで導入すると、正規のアクセスを遮断して公開直後に障害となる。Count モードで実際のトラフィックを観測してから適用する。
| ルール | 除外候補 | 理由 |
|---|---|---|
| CommonRuleSet | SizeRestrictions_BODY | 大きなリクエストを扱う場合 |
| CommonRuleSet | NoUserAgent_HEADER | 監視ツール・クローラーが該当する場合 |
除外設定は誤検知が実際に確認された場合のみ行う。予防的な除外は行わない。除外した項目と理由は必ず記録する。
S3 バケットは一切公開しない。CloudFront 経由のみでアクセス可能とする。
Origin Access Control(OAC)により、CloudFront からのみ S3 へアクセスさせる
| 項目 | 設定値 |
|---|---|
| ブロックパブリックアクセス | 全4項目 有効 |
| バケットポリシー | CloudFront サービスプリンシパルのみ許可 |
| 暗号化 | SSE-S3(AES-256) |
| S3 静的ウェブサイトホスティング | 無効 |
この機能を使う場合、バケットを公開する必要がある。その結果、CloudFront と WAF を迂回して S3 へ直接アクセスできる経路が生まれる。
| 方式 | WAF の適用 | 評価 |
|---|---|---|
| OAC(採用) | 必ず適用される | S3 への直接アクセスが不可能 |
| S3 静的ウェブサイトホスティング | 迂回可能 | 攻撃者が WAF を回避できる |
全通信を HTTPS に強制する。セキュリティヘッダーは CloudFront で付与する。
| 項目 | 設定値 |
|---|---|
| HTTP アクセス | HTTPS へリダイレクト |
| 最小 TLS バージョン | TLSv1.2_2021 |
| 対応プロトコル | HTTP/2、HTTP/3 |
| ヘッダー | 値 | 目的 |
|---|---|---|
| Strict-Transport-Security | max-age=31536000; includeSubDomains | HTTPS 強制 |
| X-Content-Type-Options | nosniff | MIME スニッフィング防止 |
| X-Frame-Options | SAMEORIGIN | クリックジャッキング防止 |
| Referrer-Policy | strict-origin-when-cross-origin | リファラ情報の制限 |
| X-Robots-Tag(ステージングのみ) | noindex, nofollow | 検索エンジン除外 |
| Content-Security-Policy | 【要確認】 | 外部リソースの制限 |
CSP は許可する外部ドメインを列挙する必要がある。外部フォーム SaaS / アクセス解析タグ / microCMS の画像配信ドメインの確定後に設定する。
AWS 上の全操作を CloudTrail で記録する。納品後の変更証跡として保管する。
| ログ種別 | 内容 | 保管先 | 保管期間 |
|---|---|---|---|
| CloudTrail | AWS の全 API 操作 | S3 | 1年【仮】 |
| CloudFront アクセスログ | 閲覧者のアクセス記録 | S3 | 90日 |
| WAF ログ | 遮断・検知の記録 | S3 | 90日 |
| 項目 | 設定値 |
|---|---|
| 証跡の対象 | 管理イベント(読み取り・書き込み) |
| 対象リージョン | 全リージョン |
| ログファイルの検証 | 有効(改ざん検知) |
| 費用 | 無料(1つ目の証跡) |
記録内容: 誰が(IAM ユーザー・ロール)/ いつ / どこから(送信元 IP)/ 何を(実行した API・対象リソース)
用途: 設定変更時の変更証跡 / 意図しない変更の原因調査 / 保守契約終了時の引き継ぎ資料
Next.js の Static Export によりビルド時に全ページを HTML 化する。閲覧時のサーバー処理はゼロになる。
| 項目 | 内容 |
|---|---|
| フレームワーク | Next.js(App Router) |
| 出力方式 | output: 'export'(Static Export) |
| 生成物 | HTML / CSS / JS / 画像 の静的ファイル群 |
| ビルド実行環境 | GitHub Actions(AWS 上でビルドしない) |
| 総ページ数 | 200〜1,000 ページ(想定) |
| ビルド所要時間 | 約 3〜5 分【仮】1,000ページ時 |
サーバー側の処理は一切発生しない。完成済みの HTML ファイルを返すだけである。
Static Export では利用できない Next.js 機能がある。代替手段を明記する。
| 利用不可の機能 | 代替手段 |
|---|---|
| API Routes / Route Handlers | 外部フォーム SaaS を利用 |
| Server Actions | 同上 |
| ISR(増分再生成) | Webhook による全体再ビルド |
| Middleware | CloudFront Functions で代替 |
| next/image の動的最適化 | ビルド時最適化で代替 |
| 閲覧者ごとに内容を変える処理 | 実現不可(会員機能・パーソナライズ等) |
| 項目 | 内容 |
|---|---|
| 方式 | 静的インデックス方式(クライアントサイド検索) |
| 検索処理 | 閲覧者のブラウザ上で実行。サーバー通信なし |
| 制約 | インデックスは 1MB を上限の目安とする【仮】 |
CloudFront をすべてのアクセスの入口とする。価格クラスは日本・アジア圏に絞る。
| 項目 | 設定値 | 理由 |
|---|---|---|
| 価格クラス | PriceClass_200 | 日本・アジア・北米・欧州をカバー |
| 対応プロトコル | HTTP/2、HTTP/3 | 表示速度の向上 |
| HTTP アクセス | HTTPS へリダイレクト | 全通信の暗号化 |
| 最小 TLS バージョン | TLSv1.2_2021 | 脆弱な旧バージョンを排除 |
| 圧縮 | 有効(Gzip / Brotli) | 転送量削減 |
| デフォルトルートオブジェクト | index.html | ルートアクセス用 |
| ログ出力 | S3(nttdata-ccs-prod-logs) | 障害調査用 |
| HTTP ステータス | レスポンスページ | レスポンスコード | キャッシュ TTL |
|---|---|---|---|
| 404 | /404.html | 404 | 300秒 |
| 403 | /404.html | 404 | 300秒 |
PriceClass_All(全世界)は南米・アフリカ・オセアニアを含むが、コーポレートサイトの閲覧者は国内が中心であるため不要と判断した。
SSG のサブディレクトリ対応には CloudFront Functions が必須である。実装漏れは下層ページの全滅につながる。
Next.js の Static Export は /about/ に対して /about/index.html を出力する。一方 CloudFront の Default Root Object はルート直下にしか適用されない。
このため書き換えを行わない場合、下層ページはすべてエラーとなる。
CloudFront Functions(Viewer Request イベント)で URI を書き換える
| リクエスト URI | 書き換え後 | 処理 |
|---|---|---|
| / | /index.html | Default Root Object |
| /about/ | /about/index.html | Functions で付与 |
| /about | /about/index.html | Functions で付与 |
| /news/2026/ | /news/2026/index.html | Functions で付与 |
| /assets/logo.svg | 変更なし | 拡張子ありは対象外 |
実装コードは Appendix A-2 を参照。Lambda@Edge より高速かつ約 1/6 の費用で実現できる。
ファイル種別ごとに TTL を分ける。HTML は短く、ハッシュ付きアセットは永続キャッシュとする。
| 対象パス | TTL | 理由 |
|---|---|---|
| /_next/static/* | 1年 | ファイル名にハッシュを含むため永続キャッシュ可能 |
| 画像・フォント | 30日 | 更新頻度が低い |
| HTML(上記以外) | 5分【仮】 | 更新反映速度と負荷のバランス |
| 項目 | 方針 |
|---|---|
| 実行タイミング | デプロイ完了時に GitHub Actions から自動実行 |
| 対象パス | /*(全体) |
| コスト | 月 1,000 パスまで無料。/* は 1 パスとして計上されるため実質無料 |
デプロイ時にキャッシュ無効化を実行するため、通常は即座に反映される。TTL 5分は、無効化が失敗した場合でも最大5分で最新化される安全弁として設定している。
静的配信ではオリジン負荷が問題にならないため、短めの設定を優先する。
S3 を東京・大阪の2リージョンに配置し、CloudFront が自動でフェイルオーバーする。DNS 変更は発生しない。
| 項目 | 設定値 |
|---|---|
| フェイルオーバー条件 | 500 / 502 / 503 / 504 |
| 対象メソッド | GET / HEAD / OPTIONS |
| 切替時間 | 数秒以内(自動) |
DNS を変更せずにリージョン障害へ対応できる。親会社への作業依頼が発生しないため、現行環境の課題(01章「現状の課題」)が解決される。大阪リージョンは東京との距離が最も近く、切替時のレイテンシ影響が最小となる。
OAC 構成では 403 の扱いに注意が必要。設定を誤るとセカンダリへ無駄な問い合わせが発生する。
OAC + 非公開バケット構成では、存在しないファイルへのアクセスに 403 が返る。s3:GetObject のみ許可の場合、オブジェクト不在と権限不足を区別できないためである。
このまま 403 をフェイルオーバー条件に含めると、通常の 404 ページ表示のたびにセカンダリオリジンへ無駄な問い合わせが発生する。
| # | 対策 | 内容 |
|---|---|---|
| 1 | バケットポリシー | s3:ListBucket を追加付与し、オブジェクト不在時に 404 を返させる |
| 2 | フェイルオーバー条件 | 403 を含めない(5xx のみを対象とする) |
| 3 | カスタムエラーレスポンス | 404 → /404.html を返す |
CI/CD による同時デプロイ方式を採用する
| 方式 | 採否 | 理由 |
|---|---|---|
| GitHub Actions から両バケットへ aws s3 sync | 採用 | デプロイ完了 = 両リージョン同一が保証される |
| S3 Cross-Region Replication(CRR) | 不採用 | ラグにより切替時に古い内容が配信される恐れ |
用途ごとに S3 バケットを分離する。公開バケットは作らない。
| # | バケット | リージョン | バージョニング |
|---|---|---|---|
| 1 | nttdata-ccs-prod-web-tokyo | 東京 | 有効 |
| 2 | nttdata-ccs-prod-web-osaka | 大阪 | 有効 |
| 3 | nttdata-ccs-stg-web-tokyo | 東京 | 無効 |
| 4 | nttdata-ccs-prod-logs | 東京 | 無効 |
全バケット共通でブロックパブリックアクセスを全項目有効、SSE-S3 暗号化を適用する。
| 対象 | ルール |
|---|---|
| コンテンツバケットの旧バージョン | 30日後に削除(デプロイ事故時の復元用に保持) |
| アクセスログ | 30日後に Glacier IR → 90日後に削除 |
| 不完全なマルチパートアップロード | 7日後に削除 |
| 項目 | 方針 |
|---|---|
| CMS 掲載画像 | microCMS の画像 API から配信(AWS を経由しない) |
| サイト固定画像 | ビルド時に最適化(WebP 変換・リサイズ)し S3 へ配置 |
microCMS 上の画像は microCMS 側の CDN から直接配信される。表示速度・可用性は microCMS の SLA に依存し、本設計の対象外となる。
DNS は親会社が管理しており変更できない。現行の www.nttdata-ccs.co.jp を踏襲し、親会社の作業を CNAME 1件に最小化する。
上記により、本設計ではDNS レコードを一度設定したら二度と触らないことを前提とする。
| パターン | 配信ドメイン | 親会社の作業 | 評価 |
|---|---|---|---|
| A. www 配信 | www.nttdata-ccs.co.jp | CNAME 1件の追加のみ | 採用。現行踏襲かつ作業が最小 |
| B. Route 53 へ委任 | nttdata-ccs.co.jp | NS レコードの委任 | 承認ハードルが高い |
| C. 現行 DNS で ALIAS 相当 | nttdata-ccs.co.jp | CNAME flattening 設定 | DNS 基盤の対応が必要 |
ACM で無料発行し自動更新する。ただし検証用 CNAME を削除されると1年後に失効する。
| 項目 | 内容 |
|---|---|
| 発行元 | ACM(AWS Certificate Manager)/ 費用無料 |
| 発行リージョン | us-east-1(バージニア北部) ※CloudFront の制約 |
| 対象ドメイン | www.nttdata-ccs.co.jp、stg.nttdata-ccs.co.jp【要確認】 |
| 検証方式 | DNS 検証(CNAME レコードによる検証) |
| 更新 | 自動(検証用 CNAME の維持が条件) |
ACM の検証用 CNAME レコードを削除すると、証明書が自動更新されず、最長1年後にサイトが閲覧不能になる。
| リスク | 対策 |
|---|---|
| 親会社の DNS 整理時に用途不明として削除される | 「削除禁止レコード」として書面で申し送る |
| 削除されても失効直前まで気づけない | CloudWatch で有効期限を監視し失効60日前に通知 |
| 失効後の再検証にも親会社の作業が必要 | 保守の年次チェック項目に組み込む |
GitHub Actions がビルドからデプロイまでを自動実行する。手作業を介在させない。
| ブランチ | デプロイ先 | 契機 |
|---|---|---|
| main | 本番環境 | マージ時に自動 |
| develop | ステージング環境 | マージ時に自動 |
| feature/* | なし | ビルド確認のみ |
デプロイ中のサイト停止はなし(ファイル差し替えのみ)/ 削除ファイルは --delete で除去 / 同時実行は concurrency で最新のみ/ 片方の sync が失敗した場合はジョブを失敗させ通知する(両リージョンの内容差異を放置しない)
microCMS の公開操作を Webhook で受け、自動でビルド・デプロイする。編集者は AWS を意識しない。
| 項目 | 内容 |
|---|---|
| 通知元 | microCMS(コンテンツ公開・更新・削除時) |
| 通知先 | GitHub API(repository_dispatch)/ 認証は GitHub App トークン |
| 対象 API | 【要確認】全コンテンツ API を対象とするか |
| 項目 | 方針 |
|---|---|
| microCMS API キー | GitHub Secrets に保管。AWS 側には保持しない |
| 権限 | 読み取り専用(GET のみ)のキーを使用 |
| ローテーション | 【要確認】年1回を推奨 |
編集者の作業は microCMS の操作のみで完結する。AWS の操作は一切不要。
ステップ1〜4は NTTデータCCS 様/ ステップ5はシステムが自動実行(約5〜8分)
未公開コンテンツの確認はステージング環境で行う。本番環境に下書きが露出しない構成とする。
| 手段 | 用途 | 反映時間 | アクセス制限 |
|---|---|---|---|
| ステージング環境 | 公開前の最終確認 | 約5〜8分 | Basic 認証 |
| microCMS プレビュー | 執筆中の表示確認 | 即時 | microCMS のログイン |
| 項目 | 方式 |
|---|---|
| アクセス制限 | CloudFront Functions による Basic 認証 |
| 検索エンジン対策 | X-Robots-Tag: noindex をレスポンスヘッダーで付与 |
| robots.txt | 全クローラーを Disallow |
| 認証情報の管理 | 【要確認】共有アカウント1つ / 担当者別 |
ステージング環境が検索エンジンにインデックスされると、本番サイトとの重複コンテンツ扱いとなり SEO 上の不利益が生じる。Basic 認証だけでは認証前のレスポンスがクロールされる可能性が残るため、noindex ヘッダーとの併用を必須とする。
【要確認】microCMS 更新時にステージングもビルドするか。実施する場合、ビルド回数が倍になる。
異常を自動検知して通知する。監視対象は「サイトが見えているか」に絞り、過剰なアラートを出さない。
| # | 監視対象 | 閾値【仮】 | 検知できる事象 |
|---|---|---|---|
| 1 | CloudFront 5xx エラー率 | 5% 超が 5分継続 | オリジン障害・配信障害 |
| 2 | CloudFront 4xx エラー率 | 10% 超が 15分継続 | リンク切れ・デプロイ漏れ |
| 3 | CloudFront リクエスト数 | 平常時比 -80% | DNS 障害・サイト到達不能 |
| 4 | GitHub Actions ビルド失敗 | 失敗時 | コンテンツが更新されない状態 |
| 5 | ACM 証明書の有効期限 | 失効 60日前 | 検証用 CNAME 削除による更新失敗 |
| 6 | AWS Budgets | 月額 $50 超 | 想定外の課金・攻撃の兆候 |
| 7 | 外形監視(死活監視) | 【要確認】 | 実際の閲覧可否 |
エラー率の監視では DNS 障害を検知できない(リクエストがそもそも到達しないため)。リクエスト数の急減は、こうした「エラーすら記録されない障害」を検知できる唯一の指標である。
メール(SNS)→ 【要確認】弊社保守担当 / Slack(AWS Chatbot)→ 【要確認】導入する場合 / NTTデータCCS 様へは弊社が一次判断後に連絡する(「障害対応フロー」参照)
ログは S3 に集約し、ライフサイクルで自動削除する。保管コストを抑える。
| ログ種別 | 保管先 | 保管期間 | 用途 |
|---|---|---|---|
| CloudFront アクセスログ | S3 | 90日 | アクセス解析・障害調査 |
| WAF ログ | S3 | 90日 | 攻撃の検証・誤検知調査 |
| CloudTrail(操作監査) | S3 | 1年【仮】 | 変更証跡 |
| GitHub Actions 実行ログ | GitHub | 90日(標準) | ビルド調査 |
| 経過日数 | 処理 |
|---|---|
| 30日 | Glacier Instant Retrieval へ移行(保管費用を削減) |
| 90日 | 削除(CloudTrail は1年後) |
| 用途 | 使用するもの |
|---|---|
| 日常のアクセス解析 | 【要確認】Google Analytics 等 |
| 障害調査・攻撃調査 | CloudFront ログ・WAF ログ |
保管期間を延ばすほど費用が増える。90日は「障害調査に必要な期間」として設定している。
自動検知から一次対応までを弊社が担う。NTTデータCCS 様への連絡は状況を確認したうえで行う。
| 段階 | 目標時間 | 備考 |
|---|---|---|
| 検知 | 5分以内(自動) | CloudWatch アラーム |
| 一次切り分け | 15分以内 | 原因の切り分け |
| 連絡(サイト閲覧不能時) | 30分以内 | 電話またはメール |
| 復旧(設定起因) | 4時間以内 | 切り戻しによる復旧(「切り分けと復旧手段」参照) |
【要確認】対応時間帯: 平日 9:00〜18:00 を想定。時間外対応は別途協議。
コンテンツの正本は microCMS にあるため、AWS 側にバックアップすべきデータは存在しない。復旧は再ビルドで完結する。
| データ | 正本の所在 | 復旧手段 | 復旧時間 |
|---|---|---|---|
| コンテンツ(記事・画像) | microCMS | 再取得して再ビルド | 約5〜10分 |
| ソースコード | GitHub | 任意のコミットから再ビルド | 約5〜10分 |
| 生成された HTML | S3(生成物) | 再ビルドで完全復元 | 同上 |
| AWS 設定 | AWS | 手動再設定(IaC 不採用) | 4〜8時間【仮】 |
| 優先 | 手段 | 所要時間 |
|---|---|---|
| 第1 | 問題のない過去コミットで再デプロイ | 約5〜10分 |
| 第2 | microCMS でコンテンツを修正し再ビルド | 約10分 |
| 第3 | S3 バージョニングから旧オブジェクトを復元 | 30分〜【仮】 |
| 障害 | 対応手段 | 自動/手動 |
|---|---|---|
| S3 リージョン障害 | オリジンフェイルオーバー(「オリジン冗長化」) | 自動 |
| デプロイ内容の不具合 | 再デプロイ(フェイルオーバーでは復旧しない) | 手動 |
| 画像だけ表示されない | microCMS 側の障害(対象外) | — |
| フォームが動作しない | 外部 SaaS 側の障害(対象外) | — |
各作業の責任所在を明確にする。DNS 関連作業は親会社の担当となる。
| # | 作業項目 | 弊社 | NTTデータCCS 様 | 親会社 | AWS |
|---|---|---|---|---|---|
| 構築フェーズ | |||||
| 1 | AWS リソースの構築・設定 | ◎ | - | - | - |
| 2 | DNS レコードの設定変更 | ○ | ○ | ◎ | - |
| 3 | ACM 検証用 CNAME の追加 | ○ | ○ | ◎ | - |
| 4 | ドメインの管理・更新 | - | ○ | ◎ | - |
| 5 | 設計書・手順書の作成 | ◎ | ○ | - | - |
| 運用フェーズ | |||||
| 6 | コンテンツの作成・公開 | - | ◎ | - | - |
| 7 | microCMS のアカウント管理 | ○ | ◎ | - | - |
| 8 | 障害の検知・一次切り分け | ◎ | - | - | - |
| 9 | AWS 起因の障害復旧 | ○ | - | - | ◎ |
| 10 | 設定・コード起因の障害復旧 | ◎ | ○ | - | - |
| 11 | コンテンツ起因の不具合修正 | ○ | ◎ | - | - |
| 12 | 検証用 CNAME レコードの維持 | ○ | ○ | ◎ | - |
| 13 | AWS 利用料の支払い | 【要確認】 | 【要確認】 | - | - |
| 14 | セキュリティパッチ適用 | - | - | - | ◎ |
| 15 | 証明書の更新 | ○ | - | ○ | ◎ |
| 16 | サイト改修・機能追加 | ◎ | ○ | - | - |
項目14 が弊社・NTTデータCCS 様の対象外となるのは、適用すべきサーバーが存在しないためである。契約に関わる確認事項は 09章「今後の課題・未決事項」に集約している。
さくらのレンタルサーバーから DNS 切替で移行する。DNS 作業は親会社依頼となるためリードタイムを確保する。
| # | ステップ | 担当 | 目安 |
|---|---|---|---|
| 1 | AWS 環境構築 | 弊社 | 切替 4週間前 |
| 2 | DNS 作業の事前依頼(作業内容・日程の承認) | NTTデータCCS 様/弊社 | 4週間前 |
| 3 | 証明書発行・検証用 CNAME 追加 | 親会社 | 3週間前 |
| 4 | コンテンツ移行(microCMS への入稿完了) | NTTデータCCS 様 | 2週間前 |
| 5 | 検証環境で全ページ確認 | 双方 | 1〜2週間前 |
| 6 | TTL 短縮(300秒へ変更) | 親会社 | 48時間前 |
| 7 | 最終ビルド・本番デプロイ | 弊社 | 前日 |
| 8 | DNS 切替(CloudFront へ変更) | 親会社 | 当日 |
| 9 | 切替後確認(表示・SSL・リダイレクト) | 双方 | 当日 |
| 10 | 監視開始 | 弊社 | 当日 |
| 11 | TTL 復旧 | 親会社 | 1週間後 |
【要確認】ステップ 3・6・8・11 はすべて親会社作業である。各作業の依頼リードタイムを確認し、上記日程を実態に合わせて調整する必要がある。
切替時のサイト停止は発生しない。旧環境と新環境を並行稼働させた状態で DNS を切り替えるため、閲覧者から見た停止時間はゼロとなる。
切替前に確認すべき項目。DNS 切り戻しが困難なため、事前確認を徹底する。
DNS 切り戻しは親会社作業となり即時実行できない。切り戻しを前提としない移行とする。
「切り戻しを前提としない移行」を基本方針とする
| 優先 | 復旧手段 | 所要時間 | 親会社作業 |
|---|---|---|---|
| 第1 | 前進復旧(新環境で修正し再デプロイ) | 約5〜10分 | 不要 |
| 第2 | 前回ビルド成果物へ再デプロイ | 約5〜10分 | 不要 |
| 第3 | DNS を旧環境(さくら)へ戻す | 親会社の作業次第 | 必要 |
静的サイトは再デプロイが5〜10分で完了するため、実際には DNS 切り戻しより前進復旧の方が速い。
本構成には以下の制約がある。要件が変わる場合は設計の見直しが必要となる。
| # | 制約 | 内容 |
|---|---|---|
| 1 | 動的処理を持てない | 閲覧者ごとに内容を変える処理(ログイン・会員機能等)は実現できない |
| 2 | 更新反映に約5〜8分かかる | サイト全体を再生成する方式のため。即時反映はできない |
| 3 | 公開予約時刻に正確に反映されない | 予約時刻+ビルド時間後の反映となる |
| # | 制約 | 閾値【仮】 |
|---|---|---|
| 4 | 記事数の増加でビルド時間が伸びる | 3,000ページ超で方式の見直しが必要 |
| 5 | 検索インデックスの容量上限 | 1MB 超で外部検索サービスの検討が必要 |
| # | 制約 | 内容 |
|---|---|---|
| 6 | IaC を採用しない | AWS 設定は手動構築。設定の復旧・複製は手作業となる |
| 7 | CloudFront 全体障害には対応できない | 発生可能性は極めて低いが、復旧には DNS 変更が必要となる |
| 8 | DNS 変更に親会社の作業が必要 | 変更のリードタイムが弊社では制御できない |
本設計は以下の前提のうえに成立する。未達の場合は公開または運用継続ができない。
| # | 前提 | 未達の場合の影響 |
|---|---|---|
| 1 | 移行時に DNS レコードを変更してもらえること | 公開できない |
| 2 | ACM 検証用 CNAME を削除せず維持してもらえること | 最長1年後にサイトが閲覧不能になる |
| 3 | 移行時に TTL を短縮してもらえること | 切り戻しに 24時間以上を要する |
| 4 | 依頼から作業完了までのリードタイムが計画内に収まること | 移行日程が後ろ倒しになる |
| # | 前提 | 未達の場合の影響 |
|---|---|---|
| 5 | 親会社への DNS 作業依頼を取り次いでいただけること | 公開できない |
| 6 | 旧環境(さくら)を切替後 1ヶ月は維持すること | 切り戻しができない |
| 7 | microCMS の契約が継続されること | ビルドが失敗する |
| 8 | 外部フォーム SaaS の契約・設定 | フォームが機能しない |
| 9 | コンテンツの入稿が移行日程内に完了すること | 移行日程が後ろ倒しになる |
microCMS の稼働・障害 → microCMS 社 / 外部フォーム SaaS → 各提供元 / AWS 自体の障害 → Amazon Web Services / GitHub の稼働 → GitHub 社 / コンテンツの内容・著作権 → NTTデータCCS 様 ※本設計は AWS の 2026年8月時点の仕様・料金体系に基づく
設計確定に必要な確認事項と、将来的な検討課題を整理する。
| # | 確認事項 | 影響範囲 |
|---|---|---|
| 1 | 配信ドメイン(Apex か www か。現行踏襲が最も安全) | DNS 構成・作業手順 |
| 2 | 親会社への DNS 変更依頼のリードタイム | 移行日程の全体 |
| 3 | 親会社の緊急時対応可否 | 復旧手段の設計・切り戻し方針 |
| 4 | AWS アカウントの所有者 | 請求・権限設計 |
| 5 | 障害対応の時間帯(時間外対応の要否) | 保守契約・費用 |
6. 月間 PV・ピーク時アクセス数 7. 外部フォーム SaaS の選定 8. アクセス解析ツールの選定 9. 外形監視の採用可否(+$5/月)
10. URL 構造の変更有無(301 リダイレクト要否) 11. 多言語対応の有無 12. IAM ユーザー発行の要否・範囲 13. マルチアカウント方針の有無
| # | 課題 | 発生条件 | 対応方針 |
|---|---|---|---|
| 1 | ビルド時間の増大 | ページ数 3,000超【仮】 | 差分ビルド方式への移行を検討 |
| 2 | 検索インデックスの肥大化 | 1MB 超【仮】 | 外部検索サービスの導入を検討 |
| 3 | 動的機能の追加要望 | 会員機能等 | アーキテクチャの再設計が必要 |
| 4 | AWS 設定の再現性 | 環境追加・災害復旧時 | IaC 導入の再検討 |
| 5 | 検証用 CNAME の維持確認 | 年次 | 保守の年次チェック項目に組み込み |
| 6 | DNS 管理の移管 | 親会社と調整可能な場合 | Route 53 委任により即時性を確保 |
主要リソースの設定値。IaC を採用しないため、本表が構築・復旧時の手順書を兼ねる。
| バケット | リージョン | バージョニング | 暗号化 |
|---|---|---|---|
| nttdata-ccs-prod-web-tokyo | ap-northeast-1 | 有効 | SSE-S3 |
| nttdata-ccs-prod-web-osaka | ap-northeast-3 | 有効 | SSE-S3 |
| nttdata-ccs-stg-web-tokyo | ap-northeast-1 | 無効 | SSE-S3 |
| nttdata-ccs-prod-logs | ap-northeast-1 | 無効 | SSE-S3 |
全バケット共通:ブロックパブリックアクセス 全4項目有効
| 項目 | 設定値 |
|---|---|
| 代替ドメイン名 | www.nttdata-ccs.co.jp |
| 証明書 / 価格クラス | ACM(us-east-1) / PriceClass_200 |
| オリジングループ / フェイルオーバー条件 | プライマリ: 東京、セカンダリ: 大阪 / 500, 502, 503, 504 |
| ビューワープロトコル / 最小 TLS / 圧縮 | Redirect HTTP to HTTPS / TLSv1.2_2021 / 有効 |
| # | メトリクス | 閾値【仮】 | 評価期間 |
|---|---|---|---|
| 1 | 5xxErrorRate | > 5% | 5分 × 1回 |
| 2 | 4xxErrorRate | > 10% | 5分 × 3回 |
| 3 | Requests | < 平常時の20% | 15分 × 1回 |
| 4 | DaysToExpiry(ACM) | < 60日 | 1日 × 1回 |
構築完了後に実際の値へ更新し、以降も設定変更のたびに本表を更新すること。
SSG のサブディレクトリ対応に必須の処理。本番・ステージング共通で使用する。
関数名: nttdata-ccs-prod-fn-rewrite / イベント: Viewer Request / 適用先: Default(*)ビヘイビア
function handler(event) {
var request = event.request;
var uri = request.uri;
// 末尾がスラッシュの場合は index.html を付与
if (uri.endsWith('/')) {
request.uri = uri + 'index.html';
}
// 拡張子を持たない場合は /index.html を付与
else if (!uri.includes('.')) {
request.uri = uri + '/index.html';
}
return request;
}
構築時に以下5パターンすべての表示確認を行うこと。 / → /index.html | /about/ → /about/index.html | /about → /about/index.html | /news/2026/ → /news/2026/index.html | /assets/logo.svg → 変更なし
ステージング環境の保護に使用する。URL 書き換えと同一関数内で処理する。
関数名: nttdata-ccs-stg-fn-auth / イベント: Viewer Request / 適用先: ステージング環境のみ
function handler(event) {
var request = event.request;
var headers = request.headers;
var expected = 'Basic 【構築時に設定】'; // Base64 エンコード値
if (!headers.authorization || headers.authorization.value !== expected) {
return {
statusCode: 401, statusDescription: 'Unauthorized',
headers: { 'www-authenticate': { value: 'Basic realm="Staging"' } }
};
}
// 認証通過後、A-2 の URL 書き換え処理を続けて実行する
return request;
}
CloudFront Functions のコード内に認証情報が平文で保存される。本番相当の機密情報を扱う用途には使用しない。検索エンジンからの保護と関係者外の閲覧防止を目的とする。
併せて X-Robots-Tag: noindex, nofollow をレスポンスヘッダーポリシーで付与し、認証前のレスポンスがクロールされた場合にも対応する。
マネージドルールの構成と、導入時の段階適用手順。
| 項目 | 設定値 |
|---|---|
| 名称 / スコープ | nttdata-ccs-prod-webacl / CLOUDFRONT(us-east-1) |
| デフォルトアクション | Allow |
| ログ出力先 / メトリクス | nttdata-ccs-prod-logs / CloudWatch メトリクス有効 |
| 優先度 | ルール名 | 種別 | 最終アクション |
|---|---|---|---|
| 1 | AWSManagedRulesAmazonIpReputationList | マネージド | Block |
| 2 | AWSManagedRulesKnownBadInputsRuleSet | マネージド | Block |
| 3 | AWSManagedRulesCommonRuleSet | マネージド | Block |
| 4 | RateLimitRule(5分間 2,000超)【仮】 | レートベース | Block |
| 段階 | 期間 | 設定 |
|---|---|---|
| 1. 検証 | 公開前〜公開後1週間 | 全ルール Count |
| 2. 段階適用 | 公開後 1〜2週目 | 優先度 1・2 を Block |
| 3. 本適用 | 公開後 2週目以降 | 全ルール Block |
除外候補: CommonRuleSet の SizeRestrictions_BODY(大きなリクエスト時)/ NoUserAgent_HEADER(監視ツール・クローラー該当時)。 除外は誤検知が実際に確認された場合のみ行い、除外項目と理由を記録する。
本設計の根拠とした公式ドキュメントと関連資料。
| # | 資料 | 参照箇所 |
|---|---|---|
| 1 | AWS Well-Architected Framework | 全体 |
| 2 | Amazon CloudFront 開発者ガイド | 06 配信設計 |
| 3 | CloudFront Origin Failover | 6-6 / 6-7 |
| 4 | Amazon S3 Origin Access Control (OAC) | 5-4 |
| 5 | AWS WAF デベロッパーガイド | 05 セキュリティ設定 |
| 6 | CloudFront Functions デベロッパーガイド | A-2 / A-3 |
| 7 | AWS 料金計算ツール(Pricing Calculator) | 2-4 / 2-5 |
| 資料 | 備考 |
|---|---|
| CMS設計書 | 別紙。microCMS の設計はこちらを参照 |
| サイト構造設計書 | 別紙 |
| 保守運用契約書 | 別途締結 |
ガイドライン: OWASP Top 10 → 05 セキュリティ設定 / Core Web Vitals(Google)→ 06 配信設計
更新契機: 構成変更時・AWS 仕様変更時・年次レビュー時 / 更新責任: 弊社(保守契約期間中) / 版管理: 表紙の版数・発行日を更新する