[GitHub/CodeBuild] 解析結果の保存について

GitHubおよびAWS CodeBuild向けのQuick Start Guideでは解析結果の詳細画面に関連するファイルをAWS S3に保存することを想定して説明いたしました。そこでは詳細画面を誰でも閲覧可能な状態となっていますと注釈しました。

このページでは、その詳細画面をアクセス制限するいくつかの方法について説明します。

  • 方法1: S3のバケットポリシーでバケットへのアクセスに IP 制限をかける(特定の IP アドレスだけにアクセスを許可する)
  • 方法2: S3に保存した詳細画面をCloudFrontで公開しBasic認証によりアクセス制限する
  • 方法3: 詳細画面をS3の代わりにNetlifyにデプロイしパスワード認証によりアクセス制限する

方法1: S3のバケットポリシーでバケットへのアクセスに IP 制限をかける(特定の IP アドレスだけにアクセスを許可する)

S3のバケットポリシーでバケットへのアクセスに IP 制限をかけることで、会社内からのアクセスに限り閲覧可能といった制限をかけることができます。

Sider Scanの結果を保存するバケットを選択し、[アクセス許可] – [バケットポリシー] をクリックします。この記事を参考にバケット ポリシーを作成して[保存] してください。

方法2: S3に保存した詳細画面をCloudFrontで公開しBasic認証によりアクセス制限する

CloudFront OAIを作成して、ユーザーは S3 バケットへ直接アクセスではなく、CloudFront 経由でのみアクセスできるようにします。ディストリビューションを作成するときに以下の設定に留意してください。

  • オリジンドメイン: Sider Scanの結果を保存するバケット
  • S3バケットアクセス: はい、OAIを使用します
  • 新しいOAIを作成
  • バケットポリシー: はい、バケットポリシーを自動で更新します
  • キャッシュポリシー: CachingDisabled

さらに、Lambda@EdgeでBasic認証する関数を作成します。キーワード「cloudfront lambda basic auth」などで検索すると、それを実現するソースコードを見つけることができます。この関数を上記のディストリビューションにデプロイしてください。そのとき以下の設定に留意してください。

  • CloudFrontイベント: ビューアーリクエスト

最後に、ビルドスクリプト(もしくは.siderscan.json)の以下の項目を変更してください。

  • scan.result.urlの${S3の公開URL}の部分を「CloudFrontのURL」に置換

以上により、Sider Scanのメールレポートに記載されているURLにアクセスするとBasic認証により制限されます。

方法3: 詳細画面をS3の代わりにNetlifyにデプロイしパスワード認証によりアクセス制限する

あらかじめNetlifyにサインアップし、Sider Scanの結果をデプロイするサイトを作成してください。さらに、Netlifyのユーザー設定画面でパーソナルアクセストークンを作成してください。

サイトをパスワード制限するには、この記事を参照してください。なお、パスワード制限は有償プランで有効な機能です。

次に、ビルドスクリプト(もしくは.siderscan.json)の以下の項目を変更してください。

  • scan.result.urlの${S3の公開URL}の部分を「Netlifyで作成したサイトのURL」に置換
  • S3にアップロードしているコードを削除し、代わりにNetlifyにデプロイするコードに置換。以下はGitHub Actionの例です。NetlifyのサイトのIDおよび先に作成したパーソナルアクセストークンをそれぞれNETLIFY_SITE_IDおよびNETLIFY_AUTH_TOKENとしてGitHubプロジェクトの”Secrets”に登録してください。
      - run: mkdir publish_scan_result && mv scan_result publish_scan_result/
      - name: Publish to Netlify
        uses: netlify/actions/cli@master
        with:
          args: deploy --prod --dir=publish_scan_result
        env:
          NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}
          NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}

以上により、Sider Scanのメールレポートに記載されているURLにアクセスするとパスワード認証により制限されます。

注意点

NetlifyにはSider Scanの最新の結果のみデプロイされます。新たな解析が実行すると、過去の結果は削除されて閲覧できません。しかし、Netlifyには過去のデプロイに手動で復元できる機能がありますので、必要に応じて、過去の結果を手動で復元して閲覧することができます。