現象
docs/setup.md の手順通りにデプロイした直後、html-share review pair <code> を実行すると Request failed になり、ペアリングできません。結果として /mobile ・ /inbox スキルが一切使えない状態でした。
curl で直接 POST https://<consoleDomain>/api/pairings/claim を叩くと、Lambda関数に届く前に CloudFront から以下が返っています。
HTTP/2 403
x-amzn-errortype: InvalidSignatureException
{"message":"The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details."}
ボディなしのPOST(api/device/reviewsのGETなど)は正常に通り、Lambda側のロジックにも問題はありません(AWS SigV4で正しく署名した生リクエストを同じFunction URLへ直接送ると成功します)。ボディ付きのPOST/PUTがCloudFrontのOrigin Access Control(OAC)経由でLambda Function URLへ渡る際にのみ発生します。
原因
CloudFrontのOACでLambda Function URLへ署名付きリクエストを送る場合、ボディを持つPOST/PUTは呼び出し側で x-amz-content-sha256 ヘッダー(ボディのSHA256ハッシュ)を明示的に付与する必要があります(AWS公式ドキュメント)。
src/review-client.ts の request() 内で、このヘッダーが x-content-sha256 という誤った名前で送られています(amz- が抜けています)。
https://github.com/minorun365/html-share/blob/main/src/review-client.ts#L70
'x-content-sha256': createHash('sha256').update(serialized).digest('hex'),
正しくは
'x-amz-content-sha256': createHash('sha256').update(serialized).digest('hex'),
確認した修正
上記1行を x-amz-content-sha256 に直してビルドし直したところ、review pair / review push / review pull / review complete すべて正常に動作し、/mobile の一連のフロー(ペアリング → カード送信 → スマホでの承認 → 完了)を最後まで確認できました。
再現環境
- 新規AWSアカウント、リージョン
ap-northeast-1(CloudFront証明書のみ us-east-1)
docs/setup.md 通りに npm install → npm run build → npm link → keys init/store → npm run deploy(CDK) でデプロイ
- Node.js v22.23.1
このIssueはClaude Code(Anthropic製のコーディングエージェント)を使ったセットアップ作業中に発見し、Claude Codeを使って調査・報告しています。
現象
docs/setup.mdの手順通りにデプロイした直後、html-share review pair <code>を実行するとRequest failedになり、ペアリングできません。結果として/mobile・/inboxスキルが一切使えない状態でした。curlで直接POST https://<consoleDomain>/api/pairings/claimを叩くと、Lambda関数に届く前に CloudFront から以下が返っています。ボディなしのPOST(
api/device/reviewsのGETなど)は正常に通り、Lambda側のロジックにも問題はありません(AWS SigV4で正しく署名した生リクエストを同じFunction URLへ直接送ると成功します)。ボディ付きのPOST/PUTがCloudFrontのOrigin Access Control(OAC)経由でLambda Function URLへ渡る際にのみ発生します。原因
CloudFrontのOACでLambda Function URLへ署名付きリクエストを送る場合、ボディを持つPOST/PUTは呼び出し側で
x-amz-content-sha256ヘッダー(ボディのSHA256ハッシュ)を明示的に付与する必要があります(AWS公式ドキュメント)。src/review-client.tsのrequest()内で、このヘッダーがx-content-sha256という誤った名前で送られています(amz-が抜けています)。https://github.com/minorun365/html-share/blob/main/src/review-client.ts#L70
正しくは
確認した修正
上記1行を
x-amz-content-sha256に直してビルドし直したところ、review pair/review push/review pull/review completeすべて正常に動作し、/mobileの一連のフロー(ペアリング → カード送信 → スマホでの承認 → 完了)を最後まで確認できました。再現環境
ap-northeast-1(CloudFront証明書のみus-east-1)docs/setup.md通りにnpm install→npm run build→npm link→keys init/store→npm run deploy(CDK) でデプロイこのIssueはClaude Code(Anthropic製のコーディングエージェント)を使ったセットアップ作業中に発見し、Claude Codeを使って調査・報告しています。