[速報] 拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!#AWSreInvent

とうとうきたぞ!Inspector の拡張イメージスキャンが CI/CD 対応しました!
2023.12.01

こんにちは! AWS 事業本部コンサルティング部のたかくに(@takakuni_)です。

re:Invent 2023 でラスベガスにきています。最終日のキーノートにて、 拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!

今までどんな状態だったか

まず初めに、AWS で提供されているコンテナイメージスキャンをおさらいしてみます。

AWS では、 ECR ベーシックスキャンと、Inspector v2 を利用した拡張スキャンの2種類が提供されています。

オンデマンドスキャン

使っている DB 等、いくつか違いがあるのですが、「CI に組み込めるか?」と言った目線だと、 ベーシックスキャンはオンデマンドスキャンが可能なため、 CI に組み込めて、拡張スキャンは対応していなかったため、組み込めませんでした。

追記

厳密には組み込めたのですが、複数のサービスを組み合わせて実装するため複雑なことをしていました。そのあたりは以下のブログで話していますので、もしよろしければご覧ください。

以下は BuildSpec でベーシックスキャンを CI に組み込む際のスクリプト例です。

basic_buildspec.yaml

version: '0.2'
phases:
  pre_build:
    commands:
      - echo Logging in to Amazon ECR...
      - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
      - IMAGE_TAG=$CODEBUILD_RESOLVED_SOURCE_VERSION
  build:
    commands:
      - docker build -t $ECR_REPO_URI:latest .
      - docker tag $ECR_REPO_URI:latest $ECR_REPO_URI:$IMAGE_TAG
  post_build:
    commands:
      # レジストリへのプッシュ
      - docker push $ECR_REPO_URI:latest
      - docker push $ECR_REPO_URI:$IMAGE_TAG
      - IMAGE_ID=$(aws ecr list-images --repository-name $ECR_REPO_NAME --query 'imageIds[?imageTag==`latest`].imageDigest' --output text)
      # イメージスキャンの実施
      - aws ecr start-image-scan --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID
      # ecr wait で結果を待つ
      - aws ecr wait image-scan-complete --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID
      # 結果の取得
      - FINDINGS=$(aws ecr describe-image-scan-findings --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID --query 'imageScanFindings.findings' --output text)
      - echo 'Check for ECR console to see vulnerability status of your image repository'
      - '[ -z "$FINDINGS" ] || exit 55'

以前 LT をしたことがあるので、その他の違いについては以下をご覧ください。

今回のアップデート

今回のアップデートで、拡張スキャンも CI/CD パイプラインに組み込むことができるようになりました。

動作としては直接コンテナイメージをスキャンするのではなく、 inspector-scan API と inspector-sbomgen を利用して、 SBOM からスキャンを行うようです。 AWS SDK と AWS CLI にて実行可能で、 Jenkins と TeamCity に関しては、 CI/CD プラグインが用意されているようです。

We provide ready-to-use CI/CD plugins for Jenkins and JetBrain’s TeamCity, with more to come. There is also a new API (inspector-scan) and command (inspector-sbomgen) available from our AWS SDKs and AWS Command Line Interface (AWS CLI). This new API allows you to integrate Amazon Inspector in the CI/CD tool of your choice.

API が提供されているので、 CodeBuild や GitHub Actions でも実行可能ですね。

追記

早速、 CodeBuild 上で動かしてみました。

参考

まとめ

以上、速報レベルにはなりますが「拡張イメージスキャンが CI/CD パイプラインに組み込めるようになりました!」でした。

次回は CodeBuild に実際に組み込んでみようと思います!この記事がどなたかの参考になれば幸いです。

以上、AWS 事業本部コンサルティング部のたかくに(@takakuni_)でした!