セキュリティ
Workflow Webhooksがどのような基盤で構築されているか、どこで実行されるか、Webhook、シークレット、配信データがどのように暗号化・隔離されているか、そしてアプリをどのように最新の状態に保っているかについてご説明します。PHPは一切使用していません。
「Workflow Webhooks」は、Code Creation Labs によって開発・運営されています。このページでは、このアプリの構成、実行環境、ストアデータの保護方法、およびシステムの最新状態を維持する方法について説明しています。このページは、ストアオーナーの方や、セキュリティに関するアンケートにご回答いただくすべての方を対象に作成されています。 法的事項(プライバシーポリシー、データ処理契約、サブプロセッサー)については、法的事項およびデータ保護をご覧ください。
このアプリがどのような基盤で構築されているか
| レイヤー | 使用しているもの |
|---|---|
| アプリケーションコード | Node.js上のTypeScriptで、現在提供されている長期サポート(LTS)リリースです。管理画面、Webhookを受信するエンドポイント、およびそれらをShopify Flowに引き渡すワーカーは、すべて単一のコードベースで構成されています。 |
| データベースとキャッシュ | PostgreSQL(Google Cloud SQL)とRedis(Google Cloud Memorystore) |
| キュー | 着信は受け付けられ、Google Cloud Pub/Subにキューに入れられ、別のワーカーによって処理されるため、着信が集中したり、Shopifyからの応答が遅くなったりしても、配信が失われることはありません。 |
| ホスティング | Google Cloudのリージョン「europe-west1(ベルギー、欧州連合)」にあるGoogle Kubernetes Engine上のコンテナです。データベース、キャッシュ、キューは、そのリージョン内に配置されています。 |
| Shopifyとの連携 | Shopifyの公式アプリライブラリ、Shopify Flowのトリガーとアクション、およびShopifyのWebhook |
| 貴店のストアフロント | テーマ内では何も実行されません。ブラウザからのリクエスト用のオプションのアプリプロキシ URL(CORS、アプリのプロキシURL、およびブラウザからの呼び出し を参照)は、Shopify によってお客様のドメイン上で提供され、Shopify の署名によって検証されます。 |
本サービスには、PHP、WordPress、Java、その他のランタイム環境が一切使用されていません。本アプリはShopify App Storeに掲載されており、Shopifyのセキュリティ要件および顧客データの保護に関する要件を網羅したShopifyのアプリ審査に合格しています。
お客様のデータの保護について
**転送中。**お使いのブラウザ、Shopify、Webhookを呼び出すシステム、およびアプリ間のすべての通信にはTLSが使用されています。データベース、キャッシュ、キューにはパブリックアドレスがなく、当社のプライベートネットワーク内からのみアクセス可能です。
**保存時。**すべてのデータベースおよびストレージは、Google Cloud KMSで当社が管理する鍵を用いて、保存時に暗号化されます。
**さらに、フィールドレベルの暗号化も施されています。**最も機密性の高い値には、2層目の保護が適用されます。具体的には、ストアのShopifyアクセストークン、各Webhookの認証シークレット、および変換関数用に保存されているすべてのシークレットです。 各値は、Cloud KMS内の個別の鍵を用いてAES-256-GCMで個別に暗号化され、自動鍵ローテーションが行われます。また、必要な瞬間にのみメモリ上で復号化されます。シークレットはログに書き込まれることはなく、Developer APIやSidekickに返されることもありません。
**シークレット。**サービス自体のAPI認証情報やキーはGoogle Secret Managerに格納されており、サービスの起動時に読み込まれます。これらはコード内にも、コンテナイメージ内にも、ビルドパイプライン内にも含まれていません。
**データの最小化。**このアプリは、インストール時にストアのデータへのアクセスを一切要求しません。Shopify Flowのワークフローを開始するのに権限は必要なく、また、このアプリが独自に商品、注文、お客様情報を読み取ることも一切ありません。配信されるペイロードは、呼び出し元システムから送信された内容と完全に一致しています。
誰が何にアクセスできるか
- **そのストアのみです。**すべてのレコードには所属するストア情報が含まれており、すべてのクエリは認証されたストアの範囲内に限定されます。あるストアが別のストアのWebhookや配信内容を読み取ったり変更したりすることは決してできず、同期レスポンスはそれを要求したストアをキーとして返されます。
- **認証済みのリクエストのみ受け付けます。**Shopify管理画面内のページは、Shopifyのセッショントークンによって認証されます。データにアクセスする前に、Shopify FlowのコールバックおよびShopify独自のWebhookはShopifyのHMAC署名によって、内部メッセージはGoogleによる署名付きIDによってそれぞれ検証されます。
- **Webhookもルールも、すべてご自身で設定いただけます。**各WebhookのURLは推測不可能なものであり、呼び出し元が身元を証明する方法もご自身で選択できます。静的トークン、ボディに対するHMAC署名、あるいは署名できない送信元の場合は何も要求しない、といった選択肢があります。 オプションのIP許可リストを使用すると、呼び出し元をさらに制限できます。呼び出し元のアドレスはヘッダーではなくネットワーク接続から取得されるため、偽造されることはありません。重複した配信は認識され、1回のみ処理されます。認証をご参照ください。
- 変換関数。変換関数用に記述したJavaScriptは、時間およびメモリの制限が設けられた隔離されたサンドボックス内で、アプリ自身のサーバーとは別のインフラストラクチャ上で実行されます。このコードは、アプリの認証情報やShopifyアクセストークンを一切参照せず、外部へのリクエストは接続前にプライベートネットワークの範囲に対してチェックされます。
- アウトバウンドリクエスト。定期的なURLポーリングおよびShopify FlowからWebhookを呼び出すに関して、アプリがユーザーに代わって呼び出すURLは、接続前にチェックされます。ループバック、リンクローカル、クラウドメタデータ、およびプライベートネットワークのアドレスへのアクセスは、リダイレクトを経由する場合も含め、拒否されます。
- **当社のチームについて。**本番システムへのアクセスは、個別のアカウントを用いたGoogle Cloud IAMを通じてのみ行われます。社内のメンテナンスツールはインターネットに公開されていません。
アプリの最新状態を維持する方法
- **すべての変更は、リリースされる前にスキャンされます。**パイプラインでは、型チェックやリンティング、静的アプリケーションセキュリティテスト(SAST)、シークレットの検出、依存関係の脆弱性スキャン、およびコンテナイメージのスキャンが実行されます。当社のリリース基準は、依存関係およびイメージ内に既知の脆弱性がゼロであることです。
- **ランタイムとオペレーティングシステム。**Alpine LinuxをベースとしたNode.jsのコンテナイメージは、リリースごとに再構築されるため、ランタイムとオペレーティングシステムのパッチが継続的に提供されます。マネージドKubernetesプラットフォームにより、基盤となるノードには常に最新のパッチが適用された状態が維持されます。
- **Shopifyプラットフォームです。**弊社では、ShopifyのAPIバージョンおよびShopifyのアプリライブラリに関するセキュリティアドバイザリを常に把握し、更新を速やかに適用しております。本アプリは、最新のAdmin APIバージョンで動作しています。
- **セキュリティレビュー。**当社は、すべてのルート、データパス、およびデータベースクエリについて、定期的に包括的な内部レビューを実施しており、直近では2026年10月に実施いたしました。
- **監視。**可用性は24時間体制で監視されており、当社のステータスページで公開されています。また、エラーが発生した場合はアラートが送信されます。運用ログは最長30日間保存されますが、トークンやシークレットは一切含まれていません。
保存と削除
- アプリがインストールされている間は配信履歴が保存されるため、通話を確認したり再生したりすることができ、また、いつでもエントリを削除することができます。認証情報を含む可能性のあるヘッダーは、配信データが保存される前にマスクされます。
- アプリをアンインストールすると、そのアプリによるストアへのアクセス権は直ちに削除されます。アンインストールから48時間後に実行されるShopifyのshop/redactリクエストにより、変換関数に保存されていたすべてのデータを含め、ストアに残っているデータがすべて消去されます。
- Shopify
- 下請け処理業者および完全な保存期間については、privacypolicyに記載されています。署名済みのデータ処理契約書については、workflow-webhooks.app/dpaよりご請求いただけます。
セキュリティ上の問題を報告する
脆弱性を見つけたと思われる場合、またはセキュリティに関する質問票への回答が必要な場合は、support@codecreationlabs.com までメールをお送りください。セキュリティに関する報告については、優先的に確認・対応させていただきます。
