静的ウェブサイトが必要になった経緯
個人開発している Web サービスで決済機能として Stripe を導入予定です。同社の審査は大きく分けて「本人証明」と「ビジネス証明」の 2 つがあり、後者で特商法のページが必要になります。この特商法のページを静的なウェブサイトとして構築するのが本記事の主旨となります。
設計
基本的には S3 の静的ウェブサイト機能 を使用します。ただし、S3 の同機能は HTTPS に対応していないので前段に Cloudfront + Certificate Manager を設置する必要があります。使用する AWS はサービスは以下になります。
サービス | 用途 | リソースを所有するアカウント | リソースを作成するアカウント | AWS Organizations の OU |
---|---|---|---|---|
Route53 | ドメイン取得, DNS 管理 | マネジメントアカウント | メンバーアカウント | OU: Infrastructure/Pord/website-prd |
S3 | オブジェクトストレージ | マネジメントアカウント | メンバーアカウント | OU: Infrastructure/Pord/website-prd |
Cloudfront | CDN | マネジメントアカウント | メンバーアカウント | OU: Infrastructure/Pord/website-prd |
Certificate Manager | SSL 証明書管理 | マネジメントアカウント | メンバーアカウント | OU: Infrastructure/Pord/website-prd |
AWS Organizations のベストプラクティス に則り OU: Infrastructure/Prod/website-prd という メンバーアカウント で構築します。
本来であれば上記のリソースはマネジメントアカウントではなくメンバーアカウントに所有させたかったのですが、構築に AWS から提供されている CloudFormation のテンプレートである amazon-cloudfront-secure-static-site を使用しているため *1 、このような設計としています(ベストプラクティス上はマネジメントアカウントは 同アカウントで必要な最小限のリソースのみを所有するのみにとどめ、ほとんどのリソースはメンバーアカウントが所有する ことが推奨されていますが、これは数少ない例外かもしれません)
今回はメンバーアカウントからマネジメントアカウントの強めの権限を設定した Role に Switch Role して CloudFormation を実行しています。具体的には以下のような設定になります。
マネジメントアカウント > IAM
- マネジメントアカウントの IAM で Role: ManagementAccountAdministrator を作成する。同 Role には AWS Managed Policy: AdministratorAccess を付与する。Trusted relationships としてメンバーアカウントを Principal に追加する。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account_id_of_member_account>:root" }, "Action": "sts:AssumeRole", "Condition": {} } ] }
マネジメントアカウント > IAM Identity Center
- メンバーアカウントの IAM Identity Center の Permission Set: Administrator *2 に Inline Policy でマネジメントアカウントで作成した Role: ManagementAccountAdministrator への STS 権限を付与する。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PrivilegeEscalationToManagementAccountAdministrator", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::<account_id_of_management_account>:role/ManagementAccountAdministrator" } ] }
以下は IAM Identity Center で管理している User: kyagi がメンバーアカウント: B の Adminitrator グループからマネジメントアカウント: A の Role: ManagementAccountAdministrator にスイッチした例です。
スイッチ前のマネージメントコンソロールのヘッダです。
スイッチする時のダイアログです。
スイッチ後のマネージメントコンソロールのヘッダです。
実装
S3 を使用した静的ウェブサイト構築については AWS にドキュメントが用意されています。S3 発のドキュメントや Cloudfront 発のドキュメント があります。設定をひとつひとつ確認しながらマニュアルで進めるなら前者ですが、ここでは Cloudformation のテンプレートを紹介している後者を使用しています。
このテンプレートではドメインを取得したアカウントの Route53 から取得した HOSTED ZONE ID を入力として求められます。またリージョンは us-west-1 を想定した実装になっています。私の場合、Route53 のドメイン取得はマネジメントアカウントで管理するようにしているので、ここでは上記で言及したようにメンバーアカウントからマネジメントアカウントに switch role して CloudFormation を実行しています。
所感
一口に、特商法のサイトを構築すると言っても、なかなか手間がかかることがわかりました。今回は AWS から提供されている CloudFormation のテンプレートを使用したのでだいぶ楽でしたが手動で設定する場合はめんどくさそうです。
特商法のサイトに載せるべき主な情報をクラウドサービスに対応させると以下になります。所在地の記載は DMM バーチャルオフィスを契約予定です。
ID | 項目 | 説明 | 例 | クラウドサービス |
---|---|---|---|---|
1 | 所在地 | 事業所の住所(登記簿上の住所)*個人事業主の場合は「請求があったら遅滞なく開示します」で省略可。 | 〒123-4567 東京都渋谷区○○町○○丁目12-3 | DMM バーチャルオフィス |
2 | 電話番号 | 顧客からの日本語の問い合わせに対応できる電話番号*個人事業主の場合は「請求があったら遅滞なく開示します」で省略可。 | 03-1234-5678 受付時間 10:00-18:00(土日祝を除く) | DMM バーチャルオフィス、もしくは、専用のスマフォ + SIM |
3 | メールアドレス | 顧客からの問い合わせに対応できるメールアドレス | contact@example..jp | AWS Workmail |
参考情報
「特定商取引法に基づく表記」ページの作成方法
- Stripe
- DMM バーチャルオフィス
静的ウェブサイト構築
- Cloudfront のドキュメントから
- S3 のドキュメントから
- IAM
- AWS Organizations
- Route53