オペレーションコンテナのスキャニング

  • GitLab 14.8で導入されました
  • GitLab 15.4でstarboardディレクティブを廃止。GitLab16.0でstarboardディレクティブを廃止予定。

オペレーションコンテナのスキャンを有効にしました。

運用コンテナスキャンを使用すると、クラスター内のコンテナイメージをスキャンしてセキュリティ脆弱性を検出できます。agent config で設定したケイデンスでスキャナを実行できるようにするか、エージェントを収容するプロジェクト内でscan execution policies を設定します。

note
agent configscan execution policies の両方が設定されている場合は、scan execution policy の設定が優先されます。

エージェント設定による有効化

エージェント設定を介してKubernetesクラスタ内のすべてのイメージのスキャンを有効にするには、スキャンを実行するときのCRON式を含むcadence フィールドを持つcontainer_scanning 設定ブロックをエージェント設定に追加します。

container_scanning:
  cadence: '0 0 * * *' # Daily at 00:00 (Kubernetes cluster time)

cadence フィールドは必須です。GitLabはcadenceフィールドに対して以下のタイプのCRON構文をサポートしています:

  • 例えば、1日1回、1時間に1回、指定された時間に、といった具合です:0 18 * * *
  • 週に一度、指定された日に、指定された時間に:0 13 * * 0
note
私たちが実装で使っているcronがサポートしていれば、CRON 構文の他の要素も cadence フィールドで使えるかもしれませんが、GitLab では公式にテストやサポートを行っていません。
note
CRON式は、Kubernetes-エージェントのポッドのシステム時間を使用してUTCで評価されます。

デフォルトでは、オペレーショナルコンテナスキャンは、すべてのネームスペースのワークロードの脆弱性のスキャンを試みます。スキャンするネームスペースを制限するために使用できるnamespaces フィールドでvulnerability_report ブロックを設定できます。たとえば、defaultkube-system のネームスペースだけをスキャンしたい場合は、この設定を使用できます:

container_scanning:
  cadence: '0 0 * * *'
  vulnerability_report:
    namespaces:
      - default
      - kube-system

スキャン実行ポリシーで有効にします。

スキャン実行ポリシー経由でKubernetesクラスタ内のすべてのイメージのスキャンを有効にするには、スキャン実行ポリシーエディタを使って新しいスケジュールルールを作成します。

note
実行中のコンテナイメージをスキャンするには、Kubernetesエージェントがクラスター内で実行されている必要があります。

以下は、Kubernetesエージェントが接続されているクラスター内で運用コンテナスキャンを有効にするポリシーの例です:

- name: Enforce Container Scanning in cluster connected through my-gitlab-agent for default and kube-system namespaces
  enabled: true
  rules:
  - type: schedule
    cadence: '0 10 * * *'
    agents:
      <agent-name>:
        namespaces:
        - 'default'
        - 'kube-system'
  actions:
  - scan: container_scanning

スケジュールルールのキーは次のとおりです:

  • cadence (必須): スキャンを実行するcron式
  • agents:<agent-name> (必須):スキャンに使用するエージェント名
  • agents:<agent-name>:namespaces (オプション):スキャンするKubernetes名前空間。省略された場合、すべての名前空間がスキャンされます。
note
私たちが実装で使っているcronがサポートしていれば、CRON 構文の他の要素も cadence フィールドで使えるかもしれませんが、GitLab では公式にテストやサポートを行っていません。
note
CRON式は、Kubernetes-エージェントのポッドのシステム時間を使用してUTCで評価されます。

完全なスキーマはスキャン実行ポリシーのドキュメントで見ることができます。

スキャナのリソース要件の設定

スキャナポッドのデフォルトのリソース要件は次のとおりです:

requests:
  cpu: 100m
  memory: 100Mi
limits:
  cpu: 500m
  memory: 500Mi

resource_requirements フィールドでカスタマイズできます。

container_scanning:
  resource_requirements:
    requests:
      cpu: 200m
      memory: 200Mi
    limits:
      cpu: 700m
      memory: 700Mi
note
リソース要件は、エージェント設定を使用してのみ設定できます。Operational Container Scanning からscan execution policies を有効にした場合、エージェント設定ファイル内でリソース要件を定義する必要があります。

クラスターの脆弱性の表示

GitLabで脆弱性情報を見るには:

  1. 左のサイドバーで、Search を選択するか、エージェント設定ファイルを含むプロジェクトを検索してください。
  2. オペレーション > Kubernetesクラスターを選択します。
  3. エージェントタブを選択します。
  4. エージェントを選択して、クラスターの脆弱性を表示します。

Cluster agent security tab UI

この情報は、オペレーションの脆弱性でも確認できます。

note
少なくとも開発者ロールを持っている必要があります。

非公開画像のスキャン

非公開画像をスキャンするには、スキャナは画像のプルシークレット(直接参照とサービスアカウントからの参照)を頼りに画像をプルします。