Upgrade to Pro — share decks privately, control downloads, hide ads and more …

re:Invent 2023 コンテナイメージスキャンどうなった!?

takakuni
December 14, 2023
1.4k

re:Invent 2023 コンテナイメージスキャンどうなった!?

takakuni

December 14, 2023
Tweet

Transcript

  1. 6 イメージのリスク ‧イメージの脆弱性 → イメージスキャン ‧イメージの設定の不備 → イメージの作り⽅ ‧埋め込まれたマルウェア →

    マルウェアスキャン ‧埋め込まれた平⽂の秘密情報 → Systems Manager ‧信頼できないイメージの使⽤ → イメージの署名 NIST SP 800-190
  2. 7 イメージのリスク ‧イメージの脆弱性 → イメージスキャン ‧イメージの設定の不備 → イメージの作り⽅ ‧埋め込まれたマルウェア →

    マルウェアスキャン ‧埋め込まれた平⽂の秘密情報 → Systems Manager ‧信頼できないイメージの使⽤ → イメージの署名 NIST SP 800-190
  3. 9 コンテナイメージスキャン ECR ベーシックスキャン Inspector v2 拡張スキャン エンジン Clair Inspector

    v2 スキャン範囲 OS のみ OS, 言語パッケージ スキャン頻度 手動 / 自動 初回プッシュ時 / 継続的 CI / CD 組み込める 頑張れば組み込める☆ 料金 無料   初回スキャン:$ 0.11 / 1イメージ 再スキャン:$ 0.01 / 1回
  4. 10 コンテナイメージスキャン ECR ベーシックスキャン Inspector v2 拡張スキャン エンジン Clair Inspector

    v2 スキャン範囲 OS のみ OS, 言語パッケージ スキャン頻度 手動 / 自動 初回プッシュ時 / 継続的 CI / CD 組み込める 頑張れば組み込める☆ 料金 無料   初回スキャン:$ 0.11 / 1イメージ 再スキャン:$ 0.01 / 1回
  5. 12 ベーシックスキャンの CI / CD パターン version: '0.2' phases: #

    抜粋 build: commands: # 抜粋 # イメージスキャンの実施 - 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 # 結果の取得 - aws ecr describe-image-scan-findings --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID --query 'imageScanFindings.findings' --output text
  6. 13 ベーシックスキャンの CI / CD パターン version: '0.2' phases: #

    抜粋 build: commands: # 抜粋 # イメージスキャンの実施 - 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 # 結果の取得 - aws ecr describe-image-scan-findings --repository-name $ECR_REPO_NAME --image-id imageDigest=$IMAGE_ID --query 'imageScanFindings.findings' --output text
  7. 16 (再掲)コンテナイメージスキャン ECR ベーシックスキャン Inspector v2 拡張スキャン エンジン Clair Inspector

    v2 スキャン範囲 OS のみ OS, 言語パッケージ スキャン頻度 手動 / 自動 初回プッシュ時 / 継続的 CI / CD 組み込める 頑張れば組み込める☆ 料金 無料   初回スキャン:$ 0.11 / 1イメージ 再スキャン:$ 0.01 / 1回
  8. 17 コンテナイメージスキャン ECR ベーシックスキャン Inspector v2 拡張スキャン エンジン Clair Inspector

    v2 スキャン範囲 OS のみ OS, 言語パッケージ スキャン頻度 手動 / 自動 初回プッシュ時 / 継続的 CI / CD 組み込める よりシンプルに組み込める☆ 料金 無料   初回スキャン:$ 0.11 / 1イメージ 再スキャン:$ 0.01 / 1回
  9. ‧AWS CLI, SDK で利⽤可能 ‧ScanSbom アクション  ‧SBOM ファイルから脆弱性を検出 ※ SBOM(Software

    Bill of Materials) ソフトウェア部品表:ソフトウェアに含まれるコン ポーネントや依存関係を⼀覧化したリスト 22 inspector-scan API
  10. Amazon Inspector SBOM Generator ‧SBOM 作成ツール ‧CycloneDX 1.5 形式での出⼒に対応 ‧対応リソース

     ‧コンテナイメージ  ‧localhost  ‧バイナリ(Go か Rust でコンパイルされたもの) 24 inspector-sbomgen
  11. 推奨スペック ‧4x core CPU ‧8 GB RAM その他 ‧Linux(AMD, ARM)コンテナのみ対応

    ‧プライベートレジストリ対応  ‧docker login または環境変数 25 Amazon Inspector SBOM Generator
  12. Inspector v2 SBOM Export ‧Inspector v2 で管理しているリソースの SBOM ⽣成 ‧Organizations

    や リソース単位でエクスポート可能 ‧Athena, QuickSight で分析可能 27 あれ?Inspector v2 って SBOM Export できるよね?
  13. Inspector v2 SBOM Export ‧Inspector v2 で管理しているリソースの SBOM ⽣成 ‧Organizations

    や リソース単位でエクスポート可能 ‧Athena, QuickSight で分析可能 ‧出⼒形式  ‧CycloneDX 1.4(1.5 が必要)  ‧SPDX 2.3 28 あれ?Inspector v2 って SBOM Export できるよね?
  14. アクションレベル変数の利⽤(ビルドステージ) 37 ビルドしたイメージタグ情報の受け渡し version: 0.2 env: # 省略 exported-variables: -

    IMAGE_URL phases: pre_build: commands: - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-10) - IMAGE_TAG=${COMMIT_HASH:=latest} # 省略 post_build: commands: # 省略 - IMAGE_URL=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  15. アクションレベル変数の利⽤(ビルドステージ) 38 ビルドしたイメージタグ情報の受け渡し version: 0.2 env: # 省略 exported-variables: -

    IMAGE_URL phases: pre_build: commands: - COMMIT_HASH=$(echo $CODEBUILD_RESOLVED_SOURCE_VERSION | cut -c 1-10) - IMAGE_TAG=${COMMIT_HASH:=latest} # 省略 post_build: commands: # 省略 - IMAGE_URL=$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
  16. 42 トリアージどうするのか aws inspector-scan scan-sbom --sbom file:///tmp/sbom.json --output-format INSPECTOR --query

    'sbom.vulnerabilities[?severity==`critical` || severity==`high`]' critical または high のみフィルターする例
  17. 44