株式会社NTTデータCCS 御中

AWS設計書

大伸社コミュニケーションデザイン

2026/MM/DD

Index

01目的・スコープ
02AWS概要
03基本設定
04権限管理
05セキュリティ設定
06配信設計
07運用設計
08移行設計
09制約事項・課題
Appendix
2
01
目的・スコープ

現状の課題

全員

現行サイトはサーバー障害時の復旧手段を持たない。DNS も自社で変更できないため、障害発生時に取れる対応が存在しない。

現行環境

さくらのレンタルサーバー

課題
  1. サーバーダウン時に取れる対応がない
    • 復旧をホスティング事業者に委ねるしかなく、復旧見込みが立たない
  2. DNS を親会社が管理しており、障害時にレコードを変更できない
    • 別サーバーへ退避する手段が取れない
  3. 冗長構成を組めない
    • 単一障害点をそのまま抱え続けている
課題の本質

課題1と2が重なることで、「障害が起きたら復旧を待つしかない」状態となっている。
これが本件の最も重要な解決対象である。

4

目的

全員

DNS レコードの変更なしで可用性を確保することを最大の目的として AWS を採用する。

目的
  1. サーバー障害という概念をなくす
    • サーバーを持たない構成(S3 + CloudFront)とし、維持管理の対象を排除する
  2. リージョン障害でもサイトを落とさない
    • S3 を東京・大阪の2リージョンに配置し、自動フォールバックさせる
  3. DNS レコードの変更なしで可用性を保つ
    • 障害時の切り替えを CloudFront 内部で完結させ、親会社への作業依頼を発生させない
現行との比較
観点現行(さくら)新構成(AWS)
障害時の切り替え主体(DNS 変更が必要)CloudFront(自動)
親会社への依頼必須(実質不可)不要
切り替え所要時間数時間〜数日(DNS 伝播)数秒(自動)
DNS レコードの変更必要一切不要
補足

DNS の宛先は CloudFront に固定されたまま変わらない。オリジン(S3)の切り替えは CloudFront の内部で完結する。

5

スコープ

全員

本書は AWS 上のインフラ構成を定義する。CMS 内部の設計・コンテンツ制作は対象外とする。

対象
  • AWS 上のインフラ構成(配信基盤・CI/CD・監視・セキュリティ)
  • ヘッドレス CMS(microCMS)との連携方式
  • 公開までの運用フロー・障害時の対応フロー
  • 現行環境からの移行計画
対象外
区分対象外の内容参照先
CMSmicroCMS のスキーマ・権限・運用設計別紙「CMS設計書」
制作サイトのデザイン・情報設計・コンテンツ制作別途
実装アプリケーション内部の実装詳細別途
外部外部フォーム SaaS の内部構成・SLA各提供元
環境NTTデータCCS 様の社内ネットワーク・端末環境
対応できない
範囲
事象対応発生可能性
S3 リージョン障害自動フォールバックで継続
デプロイ内容の不具合再デプロイで復旧(「切り分けと復旧手段」)
CloudFront 全体の障害DNS 変更なしでは復旧不可極めて低い
6
02
AWS概要

選定理由

全員

静的配信に必要な要素が揃い、かつ DNS 変更なしで冗長化できる構成を組めるのは AWS である。

選定理由
  1. サーバーを持たない構成が組める
    • ファイル保管(S3)と配信(CloudFront)のみで完結する
    • OS・ミドルウェアの保守、脆弱性対応、スケーリング設計が不要になる
  2. DNS 変更なしでオリジンを冗長化できる
    • CloudFront の Origin Group により、切り替えを内部で完結できる
    • 本件の最重要要件を満たす唯一の現実的な手段
  3. 配信に必要な要素を統合管理できる
    • CDN・WAF・証明書・監視・監査ログが同一基盤上で一元管理できる
  4. アクセス変動に自動で追従する
    • 事前のサイジングが不要。プレスリリース公開時などの急増にも自動対応する
他構成との比較
選択肢課題
レンタルサーバー(現行)アクセス集中で不安定。CDN・WAF を組み込めない。冗長化不可
VPS・専用サーバーOS とミドルウェアの保守が継続的に発生する
Amplify Hosting設定自由度が低く、オリジン冗長化に対応できない
8

サービス構成

技術

採用する AWS サービスは11種。静的配信に必要な最小構成に絞り込んでいる。

採用サービス
#サービスリージョン役割
1S3東京 / 大阪静的ファイル配信元
2CloudFrontグローバルCDN・TLS 終端
3CloudFront FunctionsグローバルURL 書き換え・Basic 認証
4Route 53グローバルDNS ※親会社管理
5ACMus-east-1TLS 証明書
6AWS WAFus-east-1Web 攻撃対策
7CloudWatch東京監視・アラーム
8SNS東京アラート通知
9CloudTrail東京操作監査ログ
10IAM(OIDC)グローバルCI/CD 認証
11AWS Budgetsグローバルコスト監視
採用しない
サービス
サービス不採用の理由
EC2 / ECS / LambdaSSG のため実行環境が不要
RDS / DynamoDBコンテンツの正は microCMS のため不要
API Gatewayフォームは外部 SaaS、検索は静的インデックスで実現

ACM と AWS WAF は us-east-1(バージニア北部)に作成する。CloudFront に紐づくリソースはこのリージョンにしか作成できない AWS の制約による。

9

全体構成図

全員

CloudFront + S3 による静的配信構成。サーバーを持たないため、障害点と運用負荷が構造的に最小化される。

オリジン(2リージョン) サイト閲覧者 Route 53 / DNS ※親会社が管理 CloudFront + AWS WAF + ACM 証明書 + Functions(URL書換) S3 東京 プライマリ S3 大阪 セカンダリ コンテンツ編集者 microCMS GitHub Actions 外部フォーム SaaS CloudWatch SNS S3 ログ保管 通常 障害時 Webhook デプロイ キャッシュ削除 問い合わせ ログ・メトリクス AWS サービス 外部サービス(管理対象外) 利用者
10

ランニングコスト

全員
要確認

サーバー費用が発生せず、CloudFront の無料枠に収まるため、月額 3,400円程度で運用できる。

前提

月間 20万 PV / 転送量 約 60GB / リクエスト 約 300万(1 PV あたり15リクエストで算定)
サイト容量 100MB(東京・大阪とも) / 1 USD = 155円  【要確認】月間 PV は現行サイトの実績値でご確認いただきたい

月額試算
#サービス内訳月額(USD)
1CloudFront転送量 60GB$0.00 ※無料枠 1TB 内
2CloudFrontリクエスト 300万$0.00 ※無料枠 1,000万 内
3CloudFront Functions300万回(無料枠 200万の超過分)$0.10
4S3(東京)ストレージ 100MB$0.01
5S3(大阪)ストレージ 100MB$0.01
6S3リクエスト・ログ保管$0.20
7AWS WAFWeb ACL $5 + ルール4種 $4 + リクエスト課金$11.00
8Route 53ホストゾーン 1件$1.00
9CloudWatchアラーム 4件$0.40
10ACM / CloudTrail / Budgets$0.00
本番環境 小計約 $13
11ステージング環境WAF $9 + CloudFront・S3約 $9
合計約 $22 / 月額 約 3,400円
費用に
含まれないもの

microCMS 利用料 / 外部フォーム SaaS 利用料 / ドメイン更新料 / 保守運用費(別途お見積)

11

コスト増減シナリオ

全員

想定の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. 費目のほぼ全額が WAF である 本番・ステージング合わせて $20。アクセス数に関わらず固定的に発生する
  2. 配信費用はほぼ発生しない CloudFront の無料枠(転送1TB・リクエスト1,000万)に収まるため
  3. ストレージ費用は無視できる サイト容量 100MB では月 $0.01 程度にとどまる
無料枠の上限

転送量よりもリクエスト数が先に上限に達する。1 PV あたり15リクエストで算定すると、月間約65万 PV が無料枠の境界となる。現行想定(20万 PV)の3倍以上にあたるため、当面の超過は見込まれない。

AWS Budgets により月額 $50 超で通知する設定とし、攻撃による異常なアクセス増も早期に検知する。

12
03
基本設定

初期設定

技術

単一 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 の制約による
14

アカウント方針

技術
要確認

単一 AWS アカウントを採用する。マルチアカウントは本件の規模に対して過剰と判断した。

方針
  • 単一 AWS アカウントを使用する
  • 環境分離はリソースの命名規則とタグで行う
  • マルチアカウント(AWS Organizations)は採用しない
判断理由
  1. 環境間の相互影響が発生しにくい 静的ファイルの配信のみで、環境間で共有するデータベース等が存在しない
  2. リソース数が限定的である 使用するのは11サービス。アカウントを分けて管理する規模ではない
  3. 管理コストを簡素化できる アカウント間のスイッチロール設計・一括請求設定が不要になる
マルチアカウント
との比較
項目単一アカウント(採用)マルチアカウント
環境の分離命名規則・タグによる論理分離物理的に完全分離
誤操作の防止命名規則と権限設計で低減構造的に防止できる
管理コスト低い高い(権限・請求の設計が必要)
本件での適合適合過剰
再検討が
必要なケース
  • NTTデータCCS 様の社内方針でマルチアカウント構成が定められている場合
  • 将来的に本サイト以外のシステムを同一アカウントで運用する場合

上記に該当する場合は構成を見直す。【要確認】社内方針の有無をご確認いただきたい。

15

環境方針

技術
要確認

本番・ステージングの2環境を整備する。ステージングは Basic 認証で保護する。

環境

2環境を整備

環境役割ドメインアクセス制限
本番環境公開サイトを配信www.nttdata-ccs.co.jpなし(WAF による防御のみ)
ステージング環境公開前の表示確認stg.nttdata-ccs.co.jp【要確認】Basic 認証 + noindex
環境ごとの
構成差異
リソース本番ステージング
S3 バケット東京 + 大阪(2式)東京のみ(1式)
CloudFront1式1式
AWS WAF1式1式
オリジン冗長化ありなし
追加コスト月額 約 $8
環境追加・削除
  • ステージング環境の追加・削除は本番サイトに影響しない
  • ただし本番環境のリソースは削除しないこと。削除するとサイトが停止する
  • 操作習得用・開発用の環境が必要な場合は都度調整する
16

命名規約

技術

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
CloudFrontnttdata-ccs-prod-cf / nttdata-ccs-stg-cf
CloudFront Functionsnttdata-ccs-prod-fn-rewrite
WAF Web ACLnttdata-ccs-prod-webacl
IAM ロールnttdata-ccs-github-actions-prod
SNS トピックnttdata-ccs-prod-alerts
CloudWatch アラームnttdata-ccs-prod-alarm-5xx
運用ルール
  • 命名規約から外れたリソースは作成しない
  • 設定変更を行った場合は Appendix A-1 のパラメータ一覧を更新する
17

タグ設計

技術
要確認

全リソースにタグを必須で付与する。コスト配分と管理主体の明示に使用する。

必須タグ
タグキー値の例用途
Projectnttdata-ccs-siteプロジェクト識別
Environmentprod / stg環境識別
ManagedBy大伸社コミュニケーションデザイン管理主体の明示
CostCenter【要確認】コスト配分レポートでの集計
CreatedAt2026-MM作成時期の記録
運用ルール
  1. リソース作成時に必ずタグを付与する。後付けにしない
  2. 手動で作成した一時的なリソースには Temporary: true を付与し、用済み後に削除する
  3. タグの追加・変更を行った場合は Appendix A-1 に反映する
注意事項

IaC を採用しない構成では、設定のドリフト(実際の設定と設計書の乖離)が発生しやすい。タグとパラメータ一覧の更新徹底が運用品質を左右する。

18
04
権限管理

権限管理方針

技術
要確認

最小権限の原則に従う。CI/CD には長期の認証情報を発行しない。

前提
  • AWS の権限管理は IAM(Identity and Access Management)で行う
  • 権限はロール単位で設計し、必要最小限のアクションのみを許可する
  • 設定できるロール数に上限はない
方針
  1. 最小権限の原則 各ロールには、実行に必要なアクションのみを許可する
  2. 長期認証情報を発行しない CI/CD は OIDC による一時認証を使用する
  3. ルートユーザーは通常運用で使用しない MFA を必須とし、初期設定後は使用を封印する
  4. 人が使う権限と、機械が使う権限を分離する 運用者アカウントと CI/CD ロールは別に管理する
権限の種類
種別対象認証方式
CI/CD ロールGitHub ActionsOIDC(一時認証)
運用者アカウント弊社保守担当IAM ユーザー + MFA
閲覧専用アカウントNTTデータCCS 様【要確認】IAM ユーザー + MFA
20

CI/CD の認証(OIDC)

技術

GitHub Actions から AWS への認証は OIDC で行う。アクセスキーを一切発行しない。

方式

GitHub OIDC Provider + IAM Role(AssumeRoleWithWebIdentity)を使用する

採用理由
  1. GitHub 上にアクセスキーを保管しない キー漏洩のリスクを構造的に排除できる
  2. 一時認証情報のみを使用する セッション時間は1時間。期限切れ後は自動的に無効になる
  3. リポジトリとブランチを限定できる 想定外のブランチからのデプロイを防止できる
ロール構成
ロール名信頼条件(ブランチ限定)権限範囲
nttdata-ccs-github-actions-prodrefs/heads/main のみ本番リソースのみ
nttdata-ccs-github-actions-stgrefs/heads/develop のみステージングリソースのみ
注意事項

信頼ポリシーでブランチを限定しない場合、任意のブランチから本番デプロイが可能になる。ブランチ限定は必須の設定とする。

21

IAM ロール・ポリシー

技術

CI/CD ロールに付与するのはデプロイに必要な4アクションのみ。

CI/CD ロールに
付与する権限
サービスアクション対象リソース
S3PutObject該当環境のバケットのみ
S3DeleteObject同上
S3ListBucket同上
CloudFrontCreateInvalidation該当ディストリビューションのみ
付与しない権限

バケットの作成・削除 / バケットポリシーの変更 / CloudFront の設定変更 / 他リソースへのアクセス全般

S3 バケット
ポリシー(OAC 用)
許可対象アクション条件
CloudFront サービスプリンシパルs3:GetObject該当ディストリビューション ARN からのみ
CloudFront サービスプリンシパルs3:ListBucket同上
注意事項

s3:ListBucket は必須である。付与しない場合、オブジェクト不在時に 403 が返り、オリジンフェイルオーバーが誤動作する(詳細は「フェイルオーバー時の注意事項」)。

22

運用者アカウント

技術
要確認

人が使うアカウントは MFA を必須とする。NTTデータCCS 様への発行範囲は要確認。

アカウント一覧
用途権限範囲MFA発行
弊社保守担当運用に必要な範囲必須構築時
NTTデータCCS 様(閲覧)ReadOnlyAccess必須【要確認】
NTTデータCCS 様(操作)【要確認】必須【要確認】
ルートユーザー全権限必須初期設定のみ使用
確認事項
  1. NTTデータCCS 様側の担当者へ IAM ユーザーを発行するか
  2. 発行する場合、閲覧のみか操作も許可するか
  3. 発行対象の人数・氏名
運用ルール
  • ルートユーザーは初期設定後、通常運用では使用しない
  • 退任・異動時は速やかにアカウントを削除する
  • アクセスキーの発行は原則行わない
補足

AWS の操作は日常運用では発生しない。コンテンツ更新は microCMS のみで完結するため、NTTデータCCS 様が AWS を操作する機会は通常ない。

23
05
セキュリティ設定

セキュリティ方針

全員

攻撃対象領域を構造的に最小化する。サーバーを持たないため、OS・ミドルウェアの脆弱性リスクが存在しない。

方針

多層防御を採用し、6つの層で保護する

対策内容
1. 通信TLS 1.2 以上必須HTTP は HTTPS へ強制リダイレクト
2. アプリ層AWS WAFマネージドルールで主要攻撃を遮断
3. オリジンOACS3 への直接アクセスを完全に遮断
4. データSSE-S3 暗号化保管データの暗号化
5. 権限最小権限 IAMCI/CD は OIDC。長期キーを発行しない
6. 監査CloudTrail全 API 操作の記録
静的配信構成で
発生しないリスク
一般的なリスク本構成での状況
OS・ミドルウェアの脆弱性サーバーが存在しないため発生しない
SQL インジェクションDB が存在しないため発生しない
管理画面への不正ログインAWS 側に管理画面が存在しない
不正なファイルアップロードアップロード機能が存在しない
25

WAF ルール構成

技術

AWS マネージドルールを基本とする。個別のルール作成は行わず、運用負荷を抑える。

Web ACL 設定
項目設定値
名称nttdata-ccs-prod-webacl
スコープCLOUDFRONT(us-east-1)
デフォルトアクションAllow
ログ出力先S3(nttdata-ccs-prod-logs)
ルール構成
優先度ルール名種別目的
1AWSManagedRulesAmazonIpReputationListマネージド攻撃元として既知の IP
2AWSManagedRulesKnownBadInputsRuleSetマネージド既知の脆弱性を狙う入力
3AWSManagedRulesCommonRuleSetマネージドXSS・パストラバーサル等
4RateLimitRule(5分間 2,000超)【仮】レートベース大量アクセスの抑制
IP 制限について

IP 制限はかけない。

CMS設計書と同様、閲覧者向けの公開サイトであるため IP 制限は行わない。ステージング環境のみ Basic 認証で保護する(「プレビュー・下書き」)。

26

WAF 導入時の運用

技術

導入時は Count モードで誤検知を確認してから Block へ切り替える。いきなり Block にしない。

段階適用の手順
段階期間アクション設定作業
1. 検証公開前〜公開後1週間全ルール Countログを確認し誤検知を洗い出す
2. 段階適用公開後 1〜2週目優先度 1・2 を Block影響を確認
3. 本適用公開後 2週目以降全ルール Block継続的にログを監視
理由

いきなり Block モードで導入すると、正規のアクセスを遮断して公開直後に障害となる。Count モードで実際のトラフィックを観測してから適用する。

除外を
検討する項目
ルール除外候補理由
CommonRuleSetSizeRestrictions_BODY大きなリクエストを扱う場合
CommonRuleSetNoUserAgent_HEADER監視ツール・クローラーが該当する場合

除外設定は誤検知が実際に確認された場合のみ行う。予防的な除外は行わない。除外した項目と理由は必ず記録する。

27

オリジンアクセス制御

技術

S3 バケットは一切公開しない。CloudFront 経由のみでアクセス可能とする。

方針

Origin Access Control(OAC)により、CloudFront からのみ S3 へアクセスさせる

S3 の設定
項目設定値
ブロックパブリックアクセス全4項目 有効
バケットポリシーCloudFront サービスプリンシパルのみ許可
暗号化SSE-S3(AES-256)
S3 静的ウェブサイトホスティング無効
静的ウェブサイト
ホスティングを
使わない理由

この機能を使う場合、バケットを公開する必要がある。その結果、CloudFront と WAF を迂回して S3 へ直接アクセスできる経路が生まれる。

方式WAF の適用評価
OAC(採用)必ず適用されるS3 への直接アクセスが不可能
S3 静的ウェブサイトホスティング迂回可能攻撃者が WAF を回避できる
28

通信・レスポンスヘッダー

技術
要確認

全通信を HTTPS に強制する。セキュリティヘッダーは CloudFront で付与する。

通信設定
項目設定値
HTTP アクセスHTTPS へリダイレクト
最小 TLS バージョンTLSv1.2_2021
対応プロトコルHTTP/2、HTTP/3
セキュリティ
レスポンスヘッダー
ヘッダー目的
Strict-Transport-Securitymax-age=31536000; includeSubDomainsHTTPS 強制
X-Content-Type-OptionsnosniffMIME スニッフィング防止
X-Frame-OptionsSAMEORIGINクリックジャッキング防止
Referrer-Policystrict-origin-when-cross-originリファラ情報の制限
X-Robots-Tag(ステージングのみ)noindex, nofollow検索エンジン除外
Content-Security-Policy【要確認】外部リソースの制限
CSP について

CSP は許可する外部ドメインを列挙する必要がある。外部フォーム SaaS / アクセス解析タグ / microCMS の画像配信ドメインの確定後に設定する。

29

監査ログ

技術

AWS 上の全操作を CloudTrail で記録する。納品後の変更証跡として保管する。

取得するログ
ログ種別内容保管先保管期間
CloudTrailAWS の全 API 操作S31年【仮】
CloudFront アクセスログ閲覧者のアクセス記録S390日
WAF ログ遮断・検知の記録S390日
CloudTrail
の設定
項目設定値
証跡の対象管理イベント(読み取り・書き込み)
対象リージョン全リージョン
ログファイルの検証有効(改ざん検知)
費用無料(1つ目の証跡)
記録内容と用途

記録内容: 誰が(IAM ユーザー・ロール)/ いつ / どこから(送信元 IP)/ 何を(実行した API・対象リソース)

用途: 設定変更時の変更証跡 / 意図しない変更の原因調査 / 保守契約終了時の引き継ぎ資料

30
06
配信設計

配信方式

技術

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 ファイルを返すだけである。

この方式の利点
  1. アクセスが集中しても処理が重くならない
  2. 実行環境がないため脆弱性対応が発生しない
  3. ビルドが失敗してもサイトは停止しない(前回の内容が配信され続ける)
32

利用・非利用機能

技術

Static Export では利用できない Next.js 機能がある。代替手段を明記する。

利用可能機能
  • 静的ページ生成(全ページのビルド時生成)
  • 動的ルート(generateStaticParams で全パスを事前生成)
  • クライアントサイドの JavaScript 処理
  • サイト内検索(静的インデックス方式)
非利用機能
(利用不可)
利用不可の機能代替手段
API Routes / Route Handlers外部フォーム SaaS を利用
Server Actions同上
ISR(増分再生成)Webhook による全体再ビルド
MiddlewareCloudFront Functions で代替
next/image の動的最適化ビルド時最適化で代替
閲覧者ごとに内容を変える処理実現不可(会員機能・パーソナライズ等)
サイト内検索
の実現方式
項目内容
方式静的インデックス方式(クライアントサイド検索)
検索処理閲覧者のブラウザ上で実行。サーバー通信なし
制約インデックスは 1MB を上限の目安とする【仮】
33

CloudFront 基本設定

技術

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.html404300秒
403/404.html404300秒
価格クラスの
選定理由

PriceClass_All(全世界)は南米・アフリカ・オセアニアを含むが、コーポレートサイトの閲覧者は国内が中心であるため不要と判断した。

34

URL 書き換え

技術

SSG のサブディレクトリ対応には CloudFront Functions が必須である。実装漏れは下層ページの全滅につながる。

課題

Next.js の Static Export は /about/ に対して /about/index.html を出力する。一方 CloudFront の Default Root Object はルート直下にしか適用されない。

このため書き換えを行わない場合、下層ページはすべてエラーとなる。

方式

CloudFront Functions(Viewer Request イベント)で URI を書き換える

書き換えの動作
リクエスト URI書き換え後処理
//index.htmlDefault Root Object
/about//about/index.htmlFunctions で付与
/about/about/index.htmlFunctions で付与
/news/2026//news/2026/index.htmlFunctions で付与
/assets/logo.svg変更なし拡張子ありは対象外

実装コードは Appendix A-2 を参照。Lambda@Edge より高速かつ約 1/6 の費用で実現できる。

35

キャッシュ戦略

技術

ファイル種別ごとに TTL を分ける。HTML は短く、ハッシュ付きアセットは永続キャッシュとする。

TTL 設定
対象パスTTL理由
/_next/static/*1年ファイル名にハッシュを含むため永続キャッシュ可能
画像・フォント30日更新頻度が低い
HTML(上記以外)5分【仮】更新反映速度と負荷のバランス
キャッシュ無効化
項目方針
実行タイミングデプロイ完了時に GitHub Actions から自動実行
対象パス/*(全体)
コスト月 1,000 パスまで無料。/* は 1 パスとして計上されるため実質無料
HTML の TTL を
5分とする理由

デプロイ時にキャッシュ無効化を実行するため、通常は即座に反映される。TTL 5分は、無効化が失敗した場合でも最大5分で最新化される安全弁として設定している。

静的配信ではオリジン負荷が問題にならないため、短めの設定を優先する。

36

オリジン冗長化

全員

S3 を東京・大阪の2リージョンに配置し、CloudFront が自動でフェイルオーバーする。DNS 変更は発生しない。

構成
CloudFront Origin Group S3 プライマリ ap-northeast-1 東京 S3 セカンダリ ap-northeast-3 大阪 GitHub Actions 通常時 5xx 検知時 sync
設定内容
項目設定値
フェイルオーバー条件500 / 502 / 503 / 504
対象メソッドGET / HEAD / OPTIONS
切替時間数秒以内(自動)
本件における
意義

DNS を変更せずにリージョン障害へ対応できる。親会社への作業依頼が発生しないため、現行環境の課題(01章「現状の課題」)が解決される。大阪リージョンは東京との距離が最も近く、切替時のレイテンシ影響が最小となる。

37

フェイルオーバー時の注意事項

技術

OAC 構成では 403 の扱いに注意が必要。設定を誤るとセカンダリへ無駄な問い合わせが発生する。

課題
403 の罠

OAC + 非公開バケット構成では、存在しないファイルへのアクセスに 403 が返る。s3:GetObject のみ許可の場合、オブジェクト不在と権限不足を区別できないためである。

このまま 403 をフェイルオーバー条件に含めると、通常の 404 ページ表示のたびにセカンダリオリジンへ無駄な問い合わせが発生する。

対策
#対策内容
1バケットポリシーs3:ListBucket を追加付与し、オブジェクト不在時に 404 を返させる
2フェイルオーバー条件403 を含めない(5xx のみを対象とする)
3カスタムエラーレスポンス404 → /404.html を返す
2バケット間の
同期方式

CI/CD による同時デプロイ方式を採用する

方式採否理由
GitHub Actions から両バケットへ aws s3 sync採用デプロイ完了 = 両リージョン同一が保証される
S3 Cross-Region Replication(CRR)不採用ラグにより切替時に古い内容が配信される恐れ
38

ストレージ設計

技術

用途ごとに S3 バケットを分離する。公開バケットは作らない。

バケット構成
#バケットリージョンバージョニング
1nttdata-ccs-prod-web-tokyo東京有効
2nttdata-ccs-prod-web-osaka大阪有効
3nttdata-ccs-stg-web-tokyo東京無効
4nttdata-ccs-prod-logs東京無効

全バケット共通でブロックパブリックアクセスを全項目有効SSE-S3 暗号化を適用する。

ライフサイクル
対象ルール
コンテンツバケットの旧バージョン30日後に削除(デプロイ事故時の復元用に保持)
アクセスログ30日後に Glacier IR → 90日後に削除
不完全なマルチパートアップロード7日後に削除
画像・アセット
項目方針
CMS 掲載画像microCMS の画像 API から配信(AWS を経由しない)
サイト固定画像ビルド時に最適化(WebP 変換・リサイズ)し S3 へ配置

microCMS 上の画像は microCMS 側の CDN から直接配信される。表示速度・可用性は microCMS の SLA に依存し、本設計の対象外となる。

39

DNS 構成

技術
要確認

DNS は親会社が管理しており変更できない。現行の www.nttdata-ccs.co.jp を踏襲し、親会社の作業を CNAME 1件に最小化する。

前提となる制約
  1. DNS は親会社が管理し、弊社・NTTデータCCS 様は変更できない
  2. Apex ドメイン(nttdata-ccs.co.jp)に CNAME は設定できない(RFC 1034)
  3. 障害時の緊急レコード変更は期待できない

上記により、本設計ではDNS レコードを一度設定したら二度と触らないことを前提とする。

構成パターン
パターン配信ドメイン親会社の作業評価
A. www 配信www.nttdata-ccs.co.jpCNAME 1件の追加のみ採用。現行踏襲かつ作業が最小
B. Route 53 へ委任nttdata-ccs.co.jpNS レコードの委任承認ハードルが高い
C. 現行 DNS で ALIAS 相当nttdata-ccs.co.jpCNAME flattening 設定DNS 基盤の対応が必要
確認事項
  1. Apex(nttdata-ccs.co.jp)へのアクセスの扱い 現行の www へのリダイレクト設定を移行後も維持できるか
  2. 親会社への DNS レコード変更依頼のプロセスとリードタイム
  3. 障害時の緊急対応が可能か(可否により復旧手段の設計が変わる)/ ステージング用 stg.nttdata-ccs.co.jp の使用可否
40

TLS 証明書

技術
要確認

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日前に通知
失効後の再検証にも親会社の作業が必要保守の年次チェック項目に組み込む
41
07
運用設計

CI/CD デプロイ設計

技術

GitHub Actions がビルドからデプロイまでを自動実行する。手作業を介在させない。

パイプライン
Push / PR microCMS Webhook 手動実行 ビルドLint・型チェック OIDC 認証一時credential S3 東京へ sync S3 大阪へ sync CloudFrontキャッシュ無効化
ブランチ戦略
ブランチデプロイ先契機
main本番環境マージ時に自動
developステージング環境マージ時に自動
feature/*なしビルド確認のみ
デプロイ時の
考慮

デプロイ中のサイト停止はなし(ファイル差し替えのみ)/ 削除ファイルは --delete で除去 / 同時実行は concurrency で最新のみ/ 片方の sync が失敗した場合はジョブを失敗させ通知する(両リージョンの内容差異を放置しない)

43

CMS 連携・ビルドトリガ

技術
要確認

microCMS の公開操作を Webhook で受け、自動でビルド・デプロイする。編集者は AWS を意識しない。

連携フロー
編集者 microCMS GitHub Actions S3 東京・大阪 CloudFront 公開 Webhook sync 無効化 約5〜8分で反映
Webhook 設定
項目内容
通知元microCMS(コンテンツ公開・更新・削除時)
通知先GitHub API(repository_dispatch)/ 認証は GitHub App トークン
対象 API【要確認】全コンテンツ API を対象とするか
API キーの管理
項目方針
microCMS API キーGitHub Secrets に保管。AWS 側には保持しない
権限読み取り専用(GET のみ)のキーを使用
ローテーション【要確認】年1回を推奨
44

運用の流れ(コンテンツ公開)

全員

編集者の作業は microCMS の操作のみで完結する。AWS の操作は一切不要。

公開までの流れ
1. 記事を作成microCMS 2. 下書き保存 3. ステージングで表示確認 4. 公開ボタン 5. 自動ビルド約5〜8分 6. 本番サイトに反映
担当

ステップ1〜4は NTTデータCCS 様/ ステップ5はシステムが自動実行(約5〜8分)

運用上の
注意点
  1. 公開操作から反映まで約5〜8分かかる サイト全体を再生成するため。公開直後に見えなくても正常
  2. 公開予約時刻には反映されない 予約時刻+ビルド時間後に反映される。時間厳守の公開は余裕を持って設定する
  3. 短時間の連続公開は最後の1回のみ反映 ビルドの多重実行を防ぐ制御のため。すべての変更は最終ビルドに含まれる
  4. ビルドが失敗してもサイトは停止しない 更新前の内容が配信され続ける
45

プレビュー・下書き

全員
要確認

未公開コンテンツの確認はステージング環境で行う。本番環境に下書きが露出しない構成とする。

確認手段
手段用途反映時間アクセス制限
ステージング環境公開前の最終確認約5〜8分Basic 認証
microCMS プレビュー執筆中の表示確認即時microCMS のログイン
ステージング
環境の保護
項目方式
アクセス制限CloudFront Functions による Basic 認証
検索エンジン対策X-Robots-Tag: noindex をレスポンスヘッダーで付与
robots.txt全クローラーを Disallow
認証情報の管理【要確認】共有アカウント1つ / 担当者別
二重の対策と
する理由

ステージング環境が検索エンジンにインデックスされると、本番サイトとの重複コンテンツ扱いとなり SEO 上の不利益が生じる。Basic 認証だけでは認証前のレスポンスがクロールされる可能性が残るため、noindex ヘッダーとの併用を必須とする。

【要確認】microCMS 更新時にステージングもビルドするか。実施する場合、ビルド回数が倍になる。

46

監視設計

全員
要確認

異常を自動検知して通知する。監視対象は「サイトが見えているか」に絞り、過剰なアラートを出さない。

監視項目
#監視対象閾値【仮】検知できる事象
1CloudFront 5xx エラー率5% 超が 5分継続オリジン障害・配信障害
2CloudFront 4xx エラー率10% 超が 15分継続リンク切れ・デプロイ漏れ
3CloudFront リクエスト数平常時比 -80%DNS 障害・サイト到達不能
4GitHub Actions ビルド失敗失敗時コンテンツが更新されない状態
5ACM 証明書の有効期限失効 60日前検証用 CNAME 削除による更新失敗
6AWS Budgets月額 $50 超想定外の課金・攻撃の兆候
7外形監視(死活監視)【要確認】実際の閲覧可否
項目3を
設ける理由

エラー率の監視では DNS 障害を検知できない(リクエストがそもそも到達しないため)。リクエスト数の急減は、こうした「エラーすら記録されない障害」を検知できる唯一の指標である。

通知経路

メール(SNS)→ 【要確認】弊社保守担当 / Slack(AWS Chatbot)→ 【要確認】導入する場合 / NTTデータCCS 様へは弊社が一次判断後に連絡する(「障害対応フロー」参照)

47

ログ保管

技術
要確認

ログは S3 に集約し、ライフサイクルで自動削除する。保管コストを抑える。

保管するログ
ログ種別保管先保管期間用途
CloudFront アクセスログS390日アクセス解析・障害調査
WAF ログS390日攻撃の検証・誤検知調査
CloudTrail(操作監査)S31年【仮】変更証跡
GitHub Actions 実行ログGitHub90日(標準)ビルド調査
ライフサイクル
経過日数処理
30日Glacier Instant Retrieval へ移行(保管費用を削減)
90日削除(CloudTrail は1年後)
アクセス解析
との違い
用途使用するもの
日常のアクセス解析【要確認】Google Analytics 等
障害調査・攻撃調査CloudFront ログ・WAF ログ

保管期間を延ばすほど費用が増える。90日は「障害調査に必要な期間」として設定している。

48

障害対応フロー

全員
要確認

自動検知から一次対応までを弊社が担う。NTTデータCCS 様への連絡は状況を確認したうえで行う。

対応フロー
CloudWatch が異常検知 弊社担当へ自動通知 一次切り分け15分以内 AWS 起因 → 復旧を待機 設定・コード起因 → 再デプロイ コンテンツ起因 → 先方へ連絡 誤検知 → 閾値を調整 報告NTTデータCCS 様
対応時間の目標
段階目標時間備考
検知5分以内(自動)CloudWatch アラーム
一次切り分け15分以内原因の切り分け
連絡(サイト閲覧不能時)30分以内電話またはメール
復旧(設定起因)4時間以内切り戻しによる復旧(「切り分けと復旧手段」参照)

【要確認】対応時間帯: 平日 9:00〜18:00 を想定。時間外対応は別途協議。

49

切り分けと復旧手段

全員

コンテンツの正本は microCMS にあるため、AWS 側にバックアップすべきデータは存在しない。復旧は再ビルドで完結する。

データの所在と
復旧手段
データ正本の所在復旧手段復旧時間
コンテンツ(記事・画像)microCMS再取得して再ビルド約5〜10分
ソースコードGitHub任意のコミットから再ビルド約5〜10分
生成された HTMLS3(生成物)再ビルドで完全復元同上
AWS 設定AWS手動再設定(IaC 不採用)4〜8時間【仮】
切り戻し手順
優先手段所要時間
第1問題のない過去コミットで再デプロイ約5〜10分
第2microCMS でコンテンツを修正し再ビルド約10分
第3S3 バージョニングから旧オブジェクトを復元30分〜【仮】
障害別の
対応整理
障害対応手段自動/手動
S3 リージョン障害オリジンフェイルオーバー(「オリジン冗長化」)自動
デプロイ内容の不具合再デプロイ(フェイルオーバーでは復旧しない)手動
画像だけ表示されないmicroCMS 側の障害(対象外)
フォームが動作しない外部 SaaS 側の障害(対象外)
50

責任分界点(RACI)

全員
要確認

各作業の責任所在を明確にする。DNS 関連作業は親会社の担当となる。

責任分界点  凡例:◎ 実施責任/○ 支援・確認/- 対象外
#作業項目弊社NTTデータCCS 様親会社AWS
構築フェーズ
1AWS リソースの構築・設定---
2DNS レコードの設定変更-
3ACM 検証用 CNAME の追加-
4ドメインの管理・更新--
5設計書・手順書の作成--
運用フェーズ
6コンテンツの作成・公開---
7microCMS のアカウント管理--
8障害の検知・一次切り分け---
9AWS 起因の障害復旧--
10設定・コード起因の障害復旧--
11コンテンツ起因の不具合修正--
12検証用 CNAME レコードの維持-
13AWS 利用料の支払い【要確認】【要確認】--
14セキュリティパッチ適用---
15証明書の更新-
16サイト改修・機能追加--

項目14 が弊社・NTTデータCCS 様の対象外となるのは、適用すべきサーバーが存在しないためである。契約に関わる確認事項は 09章「今後の課題・未決事項」に集約している。

51
08
移行設計

移行ステップ

全員
要確認

さくらのレンタルサーバーから DNS 切替で移行する。DNS 作業は親会社依頼となるためリードタイムを確保する。

移行ステップ
#ステップ担当目安
1AWS 環境構築弊社切替 4週間前
2DNS 作業の事前依頼(作業内容・日程の承認)NTTデータCCS 様/弊社4週間前
3証明書発行・検証用 CNAME 追加親会社3週間前
4コンテンツ移行(microCMS への入稿完了)NTTデータCCS 様2週間前
5検証環境で全ページ確認双方1〜2週間前
6TTL 短縮(300秒へ変更)親会社48時間前
7最終ビルド・本番デプロイ弊社前日
8DNS 切替(CloudFront へ変更)親会社当日
9切替後確認(表示・SSL・リダイレクト)双方当日
10監視開始弊社当日
11TTL 復旧親会社1週間後
親会社作業の
リードタイム

【要確認】ステップ 3・6・8・11 はすべて親会社作業である。各作業の依頼リードタイムを確認し、上記日程を実態に合わせて調整する必要がある。

サイト停止
の有無

切替時のサイト停止は発生しない。旧環境と新環境を並行稼働させた状態で DNS を切り替えるため、閲覧者から見た停止時間はゼロとなる。

53

切替前チェックリスト

全員

切替前に確認すべき項目。DNS 切り戻しが困難なため、事前確認を徹底する。

表示・コンテンツ
  • 全ページの表示確認完了
  • 旧サイト(さくら)からの 301 リダイレクト設定確認(URL 変更がある場合)
  • robots.txt / sitemap.xml の内容確認
  • ステージング環境の noindex 設定確認
機能
  • アクセス解析タグの設置確認
  • 外部フォーム SaaS の動作確認 / サイト内検索の動作確認
  • microCMS からの公開 → 反映の一連確認
インフラ
  • 下層ページの表示確認(URL 書き換えの動作確認)
  • HTTPS リダイレクトの動作確認 / オリジンフェイルオーバーの動作確認
  • WAF が Count モードであることの確認 / CloudWatch アラームの設定確認
親会社関連
  • TTL 短縮の完了確認(親会社の作業完了報告を受領)
  • 親会社の緊急時連絡先・対応可能時間の確認
  • 検証用 CNAME の削除禁止の申し送り完了
54

切り戻し方針

全員

DNS 切り戻しは親会社作業となり即時実行できない。切り戻しを前提としない移行とする。

方針

「切り戻しを前提としない移行」を基本方針とする

復旧手段の
優先順位
優先復旧手段所要時間親会社作業
第1前進復旧(新環境で修正し再デプロイ)約5〜10分不要
第2前回ビルド成果物へ再デプロイ約5〜10分不要
第3DNS を旧環境(さくら)へ戻す親会社の作業次第必要

静的サイトは再デプロイが5〜10分で完了するため、実際には DNS 切り戻しより前進復旧の方が速い。

切り戻しを
前提としない
ための対策
  1. ステージング環境で全ページの確認を完了させてから切替を行う
  2. 切替は営業時間内・週の前半に実施し、前進復旧できる体制を確保する
  3. 旧環境(さくら)は 切替後 1ヶ月は解約しない
  4. 切替当日は弊社の対応要員を確保する
  5. 親会社の緊急時対応可否を事前に確認し、可能であれば連絡経路を確立しておく
55
09
制約事項・課題

制約事項

全員

本構成には以下の制約がある。要件が変わる場合は設計の見直しが必要となる。

機能面の制約
#制約内容
1動的処理を持てない閲覧者ごとに内容を変える処理(ログイン・会員機能等)は実現できない
2更新反映に約5〜8分かかるサイト全体を再生成する方式のため。即時反映はできない
3公開予約時刻に正確に反映されない予約時刻+ビルド時間後の反映となる
規模面の制約
#制約閾値【仮】
4記事数の増加でビルド時間が伸びる3,000ページ超で方式の見直しが必要
5検索インデックスの容量上限1MB 超で外部検索サービスの検討が必要
運用面の制約
#制約内容
6IaC を採用しないAWS 設定は手動構築。設定の復旧・複製は手作業となる
7CloudFront 全体障害には対応できない発生可能性は極めて低いが、復旧には DNS 変更が必要となる
8DNS 変更に親会社の作業が必要変更のリードタイムが弊社では制御できない
57

前提条件

全員

本設計は以下の前提のうえに成立する。未達の場合は公開または運用継続ができない。

親会社
(DNS 管理者)
側の前提
#前提未達の場合の影響
1移行時に DNS レコードを変更してもらえること公開できない
2ACM 検証用 CNAME を削除せず維持してもらえること最長1年後にサイトが閲覧不能になる
3移行時に TTL を短縮してもらえること切り戻しに 24時間以上を要する
4依頼から作業完了までのリードタイムが計画内に収まること移行日程が後ろ倒しになる
NTTデータCCS 様
側の前提
#前提未達の場合の影響
5親会社への DNS 作業依頼を取り次いでいただけること公開できない
6旧環境(さくら)を切替後 1ヶ月は維持すること切り戻しができない
7microCMS の契約が継続されることビルドが失敗する
8外部フォーム SaaS の契約・設定フォームが機能しない
9コンテンツの入稿が移行日程内に完了すること移行日程が後ろ倒しになる
責任範囲外
の事項

microCMS の稼働・障害 → microCMS 社 / 外部フォーム SaaS → 各提供元 / AWS 自体の障害 → Amazon Web Services / GitHub の稼働 → GitHub 社 / コンテンツの内容・著作権 → NTTデータCCS 様  ※本設計は AWS の 2026年8月時点の仕様・料金体系に基づく

58

今後の課題・未決事項

全員
要確認

設計確定に必要な確認事項と、将来的な検討課題を整理する。

構築着手前に
確定が必要
#確認事項影響範囲
1配信ドメイン(Apex か www か。現行踏襲が最も安全)DNS 構成・作業手順
2親会社への DNS 変更依頼のリードタイム移行日程の全体
3親会社の緊急時対応可否復旧手段の設計・切り戻し方針
4AWS アカウントの所有者請求・権限設計
5障害対応の時間帯(時間外対応の要否)保守契約・費用
設計確定前に
確認が必要

6. 月間 PV・ピーク時アクセス数 7. 外部フォーム SaaS の選定 8. アクセス解析ツールの選定 9. 外形監視の採用可否(+$5/月)
10. URL 構造の変更有無(301 リダイレクト要否) 11. 多言語対応の有無 12. IAM ユーザー発行の要否・範囲 13. マルチアカウント方針の有無

将来的な
検討課題
#課題発生条件対応方針
1ビルド時間の増大ページ数 3,000超【仮】差分ビルド方式への移行を検討
2検索インデックスの肥大化1MB 超【仮】外部検索サービスの導入を検討
3動的機能の追加要望会員機能等アーキテクチャの再設計が必要
4AWS 設定の再現性環境追加・災害復旧時IaC 導入の再検討
5検証用 CNAME の維持確認年次保守の年次チェック項目に組み込み
6DNS 管理の移管親会社と調整可能な場合Route 53 委任により即時性を確保
59
AP
Appendix

A-1 代表パラメータ一覧

技術
要確認

主要リソースの設定値。IaC を採用しないため、本表が構築・復旧時の手順書を兼ねる。

S3
バケットリージョンバージョニング暗号化
nttdata-ccs-prod-web-tokyoap-northeast-1有効SSE-S3
nttdata-ccs-prod-web-osakaap-northeast-3有効SSE-S3
nttdata-ccs-stg-web-tokyoap-northeast-1無効SSE-S3
nttdata-ccs-prod-logsap-northeast-1無効SSE-S3

全バケット共通:ブロックパブリックアクセス 全4項目有効

CloudFront
(本番)
項目設定値
代替ドメイン名www.nttdata-ccs.co.jp
証明書 / 価格クラスACM(us-east-1) / PriceClass_200
オリジングループ / フェイルオーバー条件プライマリ: 東京、セカンダリ: 大阪 / 500, 502, 503, 504
ビューワープロトコル / 最小 TLS / 圧縮Redirect HTTP to HTTPS / TLSv1.2_2021 / 有効
CloudWatch
アラーム
#メトリクス閾値【仮】評価期間
15xxErrorRate> 5%5分 × 1回
24xxErrorRate> 10%5分 × 3回
3Requests< 平常時の20%15分 × 1回
4DaysToExpiry(ACM)< 60日1日 × 1回

構築完了後に実際の値へ更新し、以降も設定変更のたびに本表を更新すること。

61

A-2 CloudFront Functions(URL 書き換え)

技術

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 → 変更なし

62

A-3 CloudFront Functions(Basic 認証)

技術

ステージング環境の保護に使用する。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 をレスポンスヘッダーポリシーで付与し、認証前のレスポンスがクロールされた場合にも対応する。

63

A-4 WAF ルール詳細

技術

マネージドルールの構成と、導入時の段階適用手順。

Web ACL
項目設定値
名称 / スコープnttdata-ccs-prod-webacl / CLOUDFRONT(us-east-1)
デフォルトアクションAllow
ログ出力先 / メトリクスnttdata-ccs-prod-logs / CloudWatch メトリクス有効
ルール構成
優先度ルール名種別最終アクション
1AWSManagedRulesAmazonIpReputationListマネージドBlock
2AWSManagedRulesKnownBadInputsRuleSetマネージドBlock
3AWSManagedRulesCommonRuleSetマネージドBlock
4RateLimitRule(5分間 2,000超)【仮】レートベースBlock
段階適用と
除外候補
段階期間設定
1. 検証公開前〜公開後1週間全ルール Count
2. 段階適用公開後 1〜2週目優先度 1・2 を Block
3. 本適用公開後 2週目以降全ルール Block

除外候補: CommonRuleSet の SizeRestrictions_BODY(大きなリクエスト時)/ NoUserAgent_HEADER(監視ツール・クローラー該当時)。 除外は誤検知が実際に確認された場合のみ行い、除外項目と理由を記録する。

64

A-5 参考資料

技術

本設計の根拠とした公式ドキュメントと関連資料。

AWS 公式
ドキュメント
#資料参照箇所
1AWS Well-Architected Framework全体
2Amazon CloudFront 開発者ガイド06 配信設計
3CloudFront Origin Failover6-6 / 6-7
4Amazon S3 Origin Access Control (OAC)5-4
5AWS WAF デベロッパーガイド05 セキュリティ設定
6CloudFront Functions デベロッパーガイドA-2 / A-3
7AWS 料金計算ツール(Pricing Calculator)2-4 / 2-5
関連資料
資料備考
CMS設計書別紙。microCMS の設計はこちらを参照
サイト構造設計書別紙
保守運用契約書別途締結

ガイドライン: OWASP Top 10 → 05 セキュリティ設定 / Core Web Vitals(Google)→ 06 配信設計

本書の更新

更新契機: 構成変更時・AWS 仕様変更時・年次レビュー時 / 更新責任: 弊社(保守契約期間中) / 版管理: 表紙の版数・発行日を更新する

65