エンジニアになった元数学教師の記録

x-amz-meta-codebuild-buildarnがついていることに気が付いた話

June 02, 2024 19:11
March 23, 2025 03:18

概要

あるとき、このブログのcurlを叩いてレスポンスヘッダーを調べてみると、何やらx-amz-meta-codebuild-buildarnなるヘッダーがついていることに気が付きました。

このブログはNext.jsで作成したコードをCodeBuildでビルド→S3に配置する構成をとっているのですが、このS3にアーティファクトを配置する際にこのヘッダーが自動付与されるみたいです。

とくに問題なさそうならよかったのですが、このヘッダーばっちりAWSアカウントIDを載せてちゃってました。

1x-amz-meta-codebuild-buildarn: arn:aws:codebuild:Region:XXXXXXXXXXXX:build/ProjectName:CodebuildIdentifier

数か月気が付かずほったらかしにしてたの、今更ながら恐ろしい・・・

さすがにセキュリティ的にまずいと思い、このヘッダーを削除しておこう、というのが今回の内容になります。

対応方法

アプローチ

アプローチについてはいくつかあると思われます。

  1. アーティファクトの出力先としてS3を直指定から、aws s3 cpを使ってアップロードに変更

    こちらは上記に記載させていただいた2つ目のブログに記載があった方法になりますが、構成自体に大きく変更を加えることは避けたかったため今回この方法は見送ることにしました。

  2. CloudFront Functionsの利用

    こちらの方法だと関数を作成するぐらいになるので、構成変更もなく比較的取り組みやすいですが、コード作成の労力もそれなりにかかると思ったため他が見当たらなければこの方法にしようとしていました。

  3. CloudFrontのレスポンスヘッダー削除の利用

    結論から言うと今回はこの方法を採用しました。
    CloudFrontでは以前からレスポンスヘッダーの追加ができるようになるResponse headers policiesがサポートされていましたが、2023年1月頭にレスポンスヘッダーの削除もできるように機能追加されていました。(恥ずかしながらこのポリシー自体今回初めて知りました・・・笑)

    こちらだとコンソール上から消したいヘッダーを指定するだけで設定が完了しますので、即採用です。

実装

今回はいつもお世話になっているDevelopersIOでの検証記事を基に実装しました。

① 左ペイン「ポリシー」→「レスポンスヘッダー」タブへと移動し、「レスポンスヘッダーポリシーを作成」をクリック

② 名前を入力後、下部にある「ヘッダーを削除」欄の「ヘッダーを追加」ボタンをクリックし、x-amz-meta-codebuild-buildarnを記載
完了したら「作成」ボタンをクリックする

③ 左ペイン「ディストリビューション」→ 対象のディストリビューションをクリック →「ビヘイビア」タブへ移動し、対象となるビヘイビアを選択後「編集」ボタンをクリック

④ 「キャッシュキーとオリジンリクエスト」欄にある「レスポンスヘッダーポリシー」から先ほど作成したポリシーを選択し、「変更を保存」をクリック

設定はこれだけです。すごい簡単ですね~

その後再度curlで確認してみると、指定したヘッダーが消えていることが確認できます。
※今回は他にも別のヘッダーを削除しています。

1$ curl -I https://mathenglog.net
2HTTP/1.1 200 OK
3Server: CloudFront
4Content-Type: text/html
5Content-Length: 17406
6Connection: keep-alive
7Date: Sat, 01 Jun 2024 18:11:01 GMT
8Last-Modified: Sat, 04 May 2024 15:24:52 GMT
9Accept-Ranges: bytes
10X-Cache: Hit from cloudfront
11Via: 1.1 6f829fd5f4986144adb37b6a46c04276.cloudfront.net (CloudFront)
12X-Amz-Cf-Pop: KIX50-P1
13Alt-Svc: h3=":443"; ma=86400
14X-Amz-Cf-Id: y8cvOQ1B0CzustHAdb0OsSQ5UTPXW4t0Yhx_i_Qx8ZzEEw-10nvgMQ==
15Age: 57610

注意点

DevelopersIOの記事にもありますが、ヘッダーによっては削除できないものがあります。

これらのヘッダーについてはこのCloudFrontのポリシー削除からは削除不可能なので、別途CloudFront FunctionsやLambda@Edgeなどの代用が必要になります。

まとめ

こういうのは気が付いたら時すでに遅しということも少なくありません。

たとえアカウントIDだけでもセキュリティインシデントにつながりかねないので、多方面からサイトを確認して皆さんも気を付けましょう!