<h2>Software decomposition of container images using Kubernetes Visibility Agent and Syft</h2><br/><div style="overflow-x:auto"><style type="text/css"><!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } </style> <div class="ns-kb-css-body-editor-container"> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 24pt 0cm 0cm; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: bold;">Table of Contents</p> <p style="margin: 6pt 0cm 0cm; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif; font-weight: bold; font-style: italic;"><a href="#_Toc231216001">Scanning Container Images using Kubernetes Visibility Agent</a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216002">Solution Architecture<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">2</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216003">Pre-Requisites<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216004">Store Applications:<span style="color: windowtext; display: none;"> </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216005">Network Access<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216006">Installation<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216007">The Syft container image<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216008">Helm Chart<span style="color: windowtext; display: none;"> </span><span style="color: windowtext; display: none;">3</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216009">K8s_informer.yaml<span style="color: windowtext; display: none;"> </span><span style="color: windowtext; display: none;">4</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216010">Configuration<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">4</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216011">System Properties<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">4</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216012">Credentials<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">4</span></a></p> <p style="margin: 0cm 0cm 0cm 36pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216013">Secret of Type Docker Registry<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">4</span></a></p> <p style="margin: 0cm 0cm 0cm 36pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216014">Accessing Private Repository in ECR (AWS Elastic Container Registry)<span style="color: windowtext; display: none;"> </span><span style="color: windowtext; display: none;">5</span></a></p> <p style="margin: 0cm 0cm 0cm 36pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216015">Accessing Private Repository in ACR (Azure Container Registry)<span style="color: windowtext; display: none;"> </span><span style="color: windowtext; display: none;">6</span></a></p> <p style="margin: 0cm 0cm 0cm 36pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216016">Accessing Private Repository in Google Artifact Registry<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">7</span></a></p> <p style="margin: 0cm 0cm 0cm 36pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216017">Accessing Private Repository in Openshift<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">8</span></a></p> <p style="margin: 0cm 0cm 0cm 24pt; line-height: 115%; font-size: 10pt; font-family: Aptos, sans-serif;"><a href="#_Toc231216018">Advanced Configuration<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">9</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216019">The Informers Page and Form<span style="color: windowtext; display: none;">... </span><span style="color: windowtext; display: none;">10</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216020">The Informer Selection Algorithm<span style="color: windowtext; display: none;">... </span><span style="color: windowtext; display: none;">11</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216021">Fields Populated on cmdb_ci_docker_image<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">11</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216022">Software Packages<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">12</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216023">Platforms Supported<span style="color: windowtext; display: none;">.. </span><span style="color: windowtext; display: none;">12</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216024">Scan Status<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">12</span></a></p> <p style="margin: 6pt 0cm 0cm 12pt; line-height: 115%; font-size: 11pt; font-family: Aptos, sans-serif; font-weight: bold;"><a href="#_Toc231216025">Upgrades<span style="color: windowtext; display: none;">. </span><span style="color: windowtext; display: none;">13</span></a></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <h1 id="_Toc231216001" style="margin: 18pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 20pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216001"></a>Scanning Container Images using Kubernetes Visibility Agent</h1> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Kubernetes Visibility Agent is currently used to populate the CMDB with Kubernetes resources as well as minimal information about the container images used in the Kubernetes cluster</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Customers need information on the container images such as:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Operating system and its version</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Software and packages that are part of the image</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><a href="https://github.com/anchore/syft">Syft</a> is an open-source tool used to scan container images. Syft is not detecting vulnerabilities and is looking only at the image itself. It does not have dependencies on any external databases and is totally independent.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">ServiceNow already has integration with the Trivy CLI tool. This however requires a MID server and installation of the Trivy tool on that MID server. For customers that are not using Kubernetes Visibility Agent (KVA), the Trivy integration is the only option. For customers that do use KVA, this feature is the preferred option as it does not require any additional components and installations.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Syft was approved by legal in <a href="https://buildtools1.service-now.com/nav_to.do?uri=x_snc_open_src_lib_master.do?sys_id=6926dcf5473fbed462f3908f746d43b6">this 3<sup>rd</sup> party ticket</a>.</p> <h2 id="_Toc231216002" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216002"></a><a id="solution-architecture" name="solution-architecture"></a>Solution Architecture</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When the user chooses to install KVA with the Syft integration option, the system will create an additional sidecar container within the informer pod.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">This container will contain the Syft CLI tool that will be wrapped by code that accept scan instructions from the main informer and runs the scan. The results will be reported back to the main informer and from there via the ECC queue to the instance.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The Syft container exposes an http endpoint only to localhost, meaning only the informer container can call it. The scan instructions are sent using a synchronous http call from the main informer container to the Syft container.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">On the instance, the system will populate the same model and status table as done by the Trivy flow.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><img style="width: 75%; height: auto; display: block; margin: 0 auto;" src="/sys_attachment.do?sys_id=13854364c3fec310a9ea601bb0013168" border="0" /></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The image scanning orchestration is managed by a script called Scan Container Images executed from a scheduled job that runs every minute and picks 10 images that were not scanned yet. If the scan of the previous batch has not completed yet, the system will not start a new batch. Based on the <a href="#_System_Properties">system properties</a> described in later section, the system decides if scan is required, and if it should use KVA or MID. If KVA, the system will pick a KVA informer based on the informer selection algorithm described in the <a href="#_The_Informer_Selection">section</a> below.</p> <h2 id="_Toc231216003" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216003"></a><a id="pre-requisites" name="pre-requisites"></a>Pre-Requisites</h2> <h3 id="_Toc231216004" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216004"></a>Store Applications:</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Kubernetes Visibility Agent version >=3.16.x</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Discovery and Service Mapping Patterns version >=1.32.x (September 2026 release)</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Informer Version >= 2.9.x</p> <h3 id="_Toc231216005" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216005"></a>Network Access</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The informer pod should be able to access the image registries used by the customer. The Syft container will respect the proxy setting if such was configured (--set proxyUrl with the Helm installation)</p> <h2 id="_Toc231216006" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216006"></a><a id="installation" name="installation"></a>Installation</h2> <h3 id="_Toc231216007" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216007"></a>The Syft container image</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The Syft container image will be published in servicenowdocker/informer_syft:2.9.x</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Customers that use their own private image registries should copy this image to their registries in the same way they copy the main informer's image.</p> <h3 id="_Toc231216008" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216008"></a>Helm Chart</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When installing the informer with Helm chart, users should add the parameter:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">--set runSyftScanner=true</p> <h3 id="_Toc231216009" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216009"></a>K8s_informer.yaml</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">We do not provide k8s_informer.yaml that supports the image scanning functionality.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Customers that do not want to use Helm for installations, should still use "helm template" command to render the Helm chart into a single Kubernetes manifest and then use this manifest for installation.</p> <h2 id="_Toc231216010" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216010"></a><a id="configuration" name="configuration"></a>Configuration</h2> <h3 id="_Toc231216011" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216011"></a><a id="_System_Properties" name="_System_Properties"></a>System Properties</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The following system properties should be set to true</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">sn_itom_pattern.container_image_scan</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">sn_acc_visibility.image_scan_enabled</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The first one is telling the system to enable to image scanning mechanism. By default, this mechanism is using the Trivy CLI tool. The second one is telling the system to use the Syft scanner. Note that mixing the methods is not possible. Either use Trivy or Syft within Kubernetes Visibility Agent.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">sn_acc_visibility.image_scan_exclude_artifacts - should we exclude packages from being reported to the instance based on regex. Default is true.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">sn_acc_visibility.image_scan_exclude_artifacts_regex - Regular expression of packages that should be excluded and not reported to the instance. Default is:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">apk|deb|rpm|portage|alpm</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The regex is applied to the artifact.type field in the Syft SBOM.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">sn_acc_visibility.scan_timeout_minutes - The number of minutes after which a request in status "in_progress" is declared as timed out and its status is changed to "error".</p> <h3 id="_Toc231216012" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216012"></a>Credentials</h3> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">To access images in private repositories, we provide few options.</p> <h4 id="_Toc231216013" style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"><a name="_Toc231216013"></a>Secret of Type Docker Registry</h4> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Create a secret in the same namespace as the informer with the credentials for accessing a specific registry. The system will read all named secrets of this type in the namespace and use the one that matches the image URL. The secret name should be provided in the Helm variable syftScanner.pullSecrets (see later in configuration options)</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Example:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><em>kubectl create secret docker-registry releases-repo-cred --docker-server registry-releases.devsnc.com --docker-username <USERNAME> --docker-password <PASSWORD> --docker-email=tal.kapon@servicenow.com -n <NAMESPACE></em></p> <h4 id="_Toc231216014" style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"><a name="_Toc231216014"></a>Accessing Private Repository in ECR (AWS Elastic Container Registry)</h4> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u> </u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u>EKS Clusters:</u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If the cluster is EKS, the preferred method is IRSA (IAM Roles for Service Accounts). With this method, the AWS administrator should grant access to registries to a given IAM role and tie this IAM role with a service account in a given namespace. Once this is done, the role is set on the informer's ServiceAccount using the helm parameter:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">--set syftScanner.awsRegistryRoleArn=<ARN the role></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u>Non EKS Clusters </u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Options are:</p> <ul style="margin-bottom: 0cm; margin-top: 0px; list-style-position: inside;"><li style="margin: 0cm 0cm 0cm 0px; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Use IRSA plus AWS pod identity webhook (Recommended)</li><li style="margin: 0cm 0cm 8pt 0px; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Use static credentials of the AWS User/IAM Role</li></ul> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>IRSA with webhook (using community Helm chart, requires cert-manager:</u></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"># Install cert-manager</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"># Wait for cert-manager to be fully ready before proceeding</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"># Now the Helm install</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">helm install amazon-eks-pod-identity-webhook \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> jkroepke/amazon-eks-pod-identity-webhook \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --namespace kube-system \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --set config.defaultAwsRegion=<your-region></span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">During the information installation:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt; line-height: 115%;">--set awsSecretManagerRoleArn=<ARN of the role></span></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>Static AWS Credentials:</u></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If the Kubernetes cluster in which the informer is running is not EKS, the other way is to provide static credentials of the AWS User/IAM Role that is allowed to pull images from the registry.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The same user/IAM role should be allowed to pull images from all relevant accounts.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">To provide the credentials, create a secret called aws-credentials in the same namespace as the informer. The secret should contain two keys: access_key and secret_key.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Example:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">k<em>ubectl create secret generic aws-credentials --from-literal=access_key=<ACCESS_KEY> --from-literal=secret_key=<SECRET_KEY> --from-literal=role_arn=<Assumed role ARN> -n <NAMESPACE></em></p> <h4 id="_Toc231216015" style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"><a name="_Toc231216015"></a>Accessing Private Repository in ACR (Azure Container Registry)</h4> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u> </u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u>AKS clusters:</u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When the informer runs in AKS cluster, the recommended way to use workload identity and grant access to relevant registries.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">On the informer side, the serviceaccount and the pod should be annotated with client_id of the workload entity. This should be done by setting the helm parameter --set syftScanner.azureRegistryClientId=<Azure Client ID></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u>For non-AKS clusters</u></strong>, customers have several options:</p> <ul style="margin-bottom: 0cm; margin-top: 0px; list-style-position: inside;"><li style="margin: 0cm 0cm 0cm 0px; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Define service principal and create a Kubernetes secret that holds its credentials</li><li style="margin: 0cm 0cm 0cm 0px; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Use workload identity on Azure side plus admission webhook on the informer side (recommended)</li><li style="margin: 0cm 0cm 8pt 0px; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Use static Azure user credentials</li></ul> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>Define Service Principal:</u></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If the Kubernetes cluster in which the informer is running is not AKS, customers should create service principal, grant AcrPull access on relevant repositories, and create a Kubernetes secret of type docker-registry. Example:</p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">SP=$(az ad sp create-for-rbac --name $SP_NAME --skip-assignment)</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">SP_APP_ID=$(echo $SP | jq -r '.appId')</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">SP_PASSWORD=$(echo $SP | jq -r '.password')</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"># Assign AcrPull on the ACR</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">ACR_ID=$(az acr show --name $ACR_NAME --query id -o tsv)</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">az role assignment create \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --assignee $SP_APP_ID \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --role AcrPull \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --scope $ACR_ID</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">Then:</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">kubectl create secret docker-registry acr-secret \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --docker-server=talkaponacr1.azurecr.io \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --docker-username=$SP_APP_ID \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --docker-password=$SP_PASSWORD \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --docker-email=any@email.com \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> -n <namespace></span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">In case a single service principal is allowed to access all private repos in ACR, we should place in docker-server the string azurecr.io. The system will know how to prepend to that the requested registry name.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Workload Identity plus Webhook (for cluster with public K8s API server endpoint)</p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">helm repo add azure-workload-identity \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> https://azure.github.io/azure-workload-identity/charts</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">helm repo update</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">helm install workload-identity-webhook \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> azure-workload-identity/workload-identity-webhook \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --namespace azure-workload-identity-system \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --create-namespace \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --set azureTenantID="<your-tenant-id>"</span></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Note that the issuer configured on the federated entity should be the URL send on the Oauth request from the foreign cluster. In case of EKS, it looks like:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt; line-height: 115%;">https://oidc.eks.us-east-1.amazonaws.com/id/F5FEB2039434BC0664E826BED1961FF6</span></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>Static Azure User Credentials</u></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Create a Kubernetes secret of type docker-registry in the same namespace as the informer.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The docker-server would be azure.io</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Docker-username would be the client_id</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Docker-password would be the client_secret</p> <h4 style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"> </h4> <h4 id="_Toc231216016" style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"><a name="_Toc231216016"></a>Accessing Private Repository in Google Artifact Registry</h4> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><u>GKE clusters:</u></strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When the informer runs in GKE cluster, the recommended way to use workload identity and grant access to relevant repositories.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">On the informer side, the serviceaccount should be annotated with google service account. This should be done by setting the helm parameter --set syftScanner. gcpRegistryServiceAccount=<Google Registry Service Account></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">For example:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">--set syftScanner.gcpRegistryServiceAccount= <a href="mailto:gcr-pull-sa@deductive-reach-207607.iam.gserviceaccount.com">gcr-pull-sa@deductive-reach-207607.iam.gserviceaccount.com</a></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Following is an example on how to create a service account in GCP and establish trust with a Kubernetes service account.</p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">// Creating the Google Service account</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">gcloud iam service-accounts create gcr-pull-sa \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --display-name="Artifact Registry Pull SA" \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --project=deductive-reach-207607</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">// Granting the google service account read access to the repository</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">gcloud artifacts repositories add-iam-policy-binding talkapon-gcp-repo \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --location=us-east1 \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --project=deductive-reach-207607 \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --member="serviceAccount:gcr-pull-sa@deductive-reach-207607.iam.gserviceaccount.com" \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --role="roles/artifactregistry.reader"</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">// Have the Google service account trust the Kubernetes service account servicenow-cnotal5 in namespace k8s-informer-cnotal5</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;">gcloud iam service-accounts add-iam-policy-binding \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> gcr-pull-sa@deductive-reach-207607.iam.gserviceaccount.com \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --role="roles/iam.workloadIdentityUser" \</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 10.0pt;"> --member="serviceAccount:deductive-reach-207607.svc.id.goog[k8s-infomer-cnotal5/servicenow-cnotal5]"</span></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <h4 id="_Toc231216017" style="margin: 4pt 0cm 2pt; line-height: 115%; break-after: avoid; font-size: 12pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal; font-style: italic;"><a name="_Toc231216017"></a>Accessing Private Repository in Openshift</h4> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Openshift is coming out-of-box with a secret called pull-secret in the namespace openshift-config. This secrets provides access to well-known Redhat registries like registry.redhat.io</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When the informer runs in Openshift, use the flag --set syftScanner.runningInOpenshift=true</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">This will grant the informer access to the secret pull-secret in the namespace openshift-config.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When the informer runs in non Openshift cluster, copy the secret to the informer's namespace.</p> <h3 id="_Toc231216018" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 14pt; font-family: Aptos, sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216018"></a>Advanced Configuration</h3> <table class="MsoTableGrid" style="width: 100%; border-collapse: collapse; border: none;" border="1" cellspacing="0" cellpadding="0"><tbody><tr><td style="width: 38%; border: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><span style="font-size: 11pt;">Helm parameter</span></strong></p> </td><td style="width: 42%; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><span style="font-size: 11pt;">Description</span></strong></p> </td><td style="width: 20%; border: solid windowtext 1.0pt; border-left: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><strong><span style="font-size: 11pt;">Default value</span></strong></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.memoryRequest</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">The memory requested for the syft scanner container</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">100Mi</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.memoryLimit</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Memory limit for the syft scanner container</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">1Gi</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.imageMaxSizeBytes</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Maximum size (in bytes) of an image we are willing to scan. Images larger than this are skipped.</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Note: the total size of an image may exceed the container memory limit since layers are downloaded and scanned one by one.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">2147483648</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.cpuRequest</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">CPU request for the syft scanner container</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">100m</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.cpuLimit</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">CPU limit for the syft scanner container</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">300m</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.queueMaxSize</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Maximum number of pending image scan requests</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">1000</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.timeoutSec</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Maximum time in seconds to wait for Syft to scan an image</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">600</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.maxRetry</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Maximum number of times the informer retries a scan request after the syft sidecar rejects it with a 429 (Retry-After). Once this many retries are exhausted, the scan request is aborted and reported as a failure.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">5</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.enrich</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Controls syft's --enrich flag, which enables online enrichment of catalog results by fetching extra metadata from upstream sources. "all" turns on every enricher; it can also be a comma-separated list of specific enrichers (e.g. "java,golang") or "none" to disable enrichment entirely.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">all</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.parallelism</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">number of cataloger workers to run in parallel</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">1</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.gogc</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Sets the GOGC garbage-collection target for the syft Go process. Lower values make the GC run more frequently, reducing peak memory at the cost of CPU. Left empty by default so Go's built-in default (100) applies; set an explicit value (e.g. "20") only when tuning memory usage.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.searchRemoteLicenses</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">When true, syft resolves Go module licenses by fetching/cloning their source repositories over the network. Disabled by default because cloning large upstream repos (e.g. oracle/oci-go-sdk) into memory causes dramatic memory spikes; turning it off only drops the license field on Go packages, not their presence, version, or PURL. (Overrides what enrich=all would otherwise enable.)</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">false</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.azureRegistryClientId</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">The client ID of the Azure user-assigned managed identity that has AcrPull permissions on the target ACR. Setting this turns on Azure Workload Identityfor the syft-scanner container.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.awsRegistryRoleArn</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">ARN of the AWS IAM role with permission to pull from the target ECR registries. The role must trust the EKS pod service account. Setting this adds an eks.amazonaws.com/role-arn annotation to the informer ServiceAccount.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.gcpRegistryServiceAccount</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Email of the GCP IAM service account that has Artifact Registry Reader permissions. The GKE pod service account must be bound to this GCP SA via Workload Identity. Setting this adds an iam.gke.io/gcp-service-account annotation to the informer ServiceAccount.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.pullSecrets</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Comma-separated list of Secret names (in the informer's own namespace) that the informer is allowed to read as docker-registry pull credentials. The informer Role is scoped to `get` on exactly these names (via resourceNames), so only these secrets can be read. Each is fetched by name and used only if it contains a .dockerconfigjson key.</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">IMPORTANT: When providing value in the Helm command every comma should be escaped with a backslash. For example:</span></p> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">helm install k8s-informer k8s-informer-chart --set syftScanner.pullSecrets="secret1\,secret2\,secret3"</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">aws-credentials,azure-credentials,gcp-credentials,pull-secret</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.openShiftPullSecret.enabled</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">When enabled, the informer reads the OpenShift pull-secret and adds its credentials to the registry auth chain used by the syft scanner. This enables pulling images from registry.redhat.io, quay.io, and other Red Hat registries on OpenShift clusters. The informer first looks for a secret specified in the parameter `secretName` in its own namespace; if that lookup fails it falls back to the cluster-wide openshift-config/pull-secret (the chart also renders a Role + RoleBinding granting get on that single named secret in openshift-config).</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">false</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.openShiftPullSecret.secretName</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Name of the dockerconfigjson secret in the informer's own namespace to use as the primary source for the OpenShift pull-secret.</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr><tr><td style="width: 38%; border: solid windowtext 1.0pt; border-top: none; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">syftScanner.openShiftPullSecret.runningInOpenshift</span></p> </td><td style="width: 42%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">Set to true only when installing on an OpenShift cluster. When true, the chart also renders a Role + RoleBinding granting `get` on openshift-config/pull-secret. On non-OpenShift clusters this must remain false, otherwise the install fails because the openshift-config namespace </span><span style="font-size: 11pt;">does not exist</span></p> </td><td style="width: 20%; border-top: none; border-left: none; border-bottom: solid windowtext 1.0pt; border-right: solid windowtext 1.0pt; padding: 0cm 5.4pt 0cm 5.4pt;" valign="top"> <p style="margin: 0cm; line-height: normal; font-size: 12pt; font-family: Aptos, sans-serif;"><span style="font-size: 11pt;">None</span></p> </td></tr></tbody></table> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <h2 id="_Toc231216019" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216019"></a><a id="informers-page-and-form" name="informers-page-and-form"></a>The Informers Page and Form</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">We are adding two new fields to the informer record. Both will be hidden by default in the informers list and shown in the Informer's form.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>Image Scanner Enabled</u> - values are true/false. This field is showing which informers are configured to run image scan.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><u>Image Scan Registries</u> - this is comma separated list of image registries the informer declared are covered via credential-less trust relationship. Optional values are: ecr, acr, google. If the field is not empty, and the instance needs to scan an image in one of those registries, the system will send the instruction to one of the informers that declared on it. If no informer declared on it, the instruction will be sent to an arbitrary informer that supports image scanning. See more details in the section "The informer selection algorithm".</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">When an informer is configured to scan images a new UI action called "Get Syft Scanner Logs" will be available. When pressing on this action, the system will request the informer to send the logs. The logs will be attached to the form as file named k8s_informer_syft.log.<br /><br /></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><img style="width: 75%; height: auto; display: block; margin: 0 auto;" src="/sys_attachment.do?sys_id=c895c364c3fec310a9ea601bb00131b4" border="0" /></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <h2 id="_Toc231216020" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216020"></a><a id="_The_Informer_Selection" name="_The_Informer_Selection"></a><a id="informer-selection-algorithm" name="informer-selection-algorithm"></a>The Informer Selection Algorithm</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The informer will report it supports a certain cloud registry via credential-less trust relationship based on the following parameters:</p> <p style="margin: 0cm 0cm 8pt 36pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If syftScanner.awsRegistryRoleArn is set: ecr</p> <p style="margin: 0cm 0cm 8pt 36pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If syftScanner.azureRegistryClientId is set: acr</p> <p style="margin: 0cm 0cm 8pt 36pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If syftScanner.gcpRegistryServiceAccount is set: google</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If more than one of the above parameters is set, then the value reported will be comma separated.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The backend will select an informer for scanning a given image based on the following decision flow:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><img style="width: 75%; height: auto; display: block; margin: 0 auto;" src="/sys_attachment.do?sys_id=6f85c364c3fec310a9ea601bb0013184" border="0" /></p> <h2 id="_Toc231216021" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216021"></a><a id="fields-populated-on-cmdb_ci_docker_image" name="fields-populated-on-cmdb_ci_docker_image"></a>Fields Populated on cmdb_ci_docker_image</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The following fields are populated by the software on cmdb_ci_docker_image. Note that not all fields might be available on every image.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">os (Label "Operating System").</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">os_version (Label "OS Version")</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">architecture (Label "Architecture"). Examples: amd64, arm64</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">size_bytes (Label "Size (bytes)")</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">os_family (Label "OS Family"). Examples: rhel, centos, alpine, azurelinux, windows</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">image_created_at (Label "Image created")</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">command (Label "Command")</p> <h2 id="_Toc231216022" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216022"></a><a id="software-packages" name="software-packages"></a>Software Packages</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">As with the Trivy integration, software packages contained in images are modeled in table sn_itom_pattern_container_image_os_packages and show in the related list of cmdb_ci_docker_image:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><img style="width: 75%; height: auto; display: block; margin: 0 auto;" src="/sys_attachment.do?sys_id=7f85c364c3fec310a9ea601bb00131a4" border="0" /></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><strong>Important Note: We rely on Syft to provide the information on maintainer and version. We cannot guarantee that those fields will be populated in all cases.</strong></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <h2 id="_Toc231216023" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216023"></a><a id="platforms-supported" name="platforms-supported"></a>Platforms Supported</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The scanner will support both Linux based images and Windows based. However, the support for Windows images is partial because of Syft limitations. We do not support Windows images that contain non-distributable base layers. With other images, Syft catalogers have partial support for Windows.</p> <h2 id="_Toc231216024" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216024"></a><a id="scan-status" name="scan-status"></a>Scan Status</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">The table sn_itom_pattern_container_image_scan_status continues to maintain the scan status of images, as with the Trivy integration.</p> <h2 id="_Toc231216025" style="margin: 8pt 0cm 4pt; line-height: 115%; break-after: avoid; font-size: 16pt; font-family: 'Aptos Display', sans-serif; color: rgb(15, 71, 97); font-weight: normal;"><a name="_Toc231216025"></a><a id="upgrades" name="upgrades"></a>Upgrades</h2> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Helm upgrades can be executed using the helm upgrade command as before.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">Upgrade from the instance is possible only if the previous version was installed using helm and already installed using the runSyftScanner option.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">A new property is added to the Kubernetes Visibility Agent properties screen. Users should fill in Syft container box, if the location of the desired image is not in the same location as the main informer image, while adding the "_syft" suffix to the repository name.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">For example:</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;">If the main informer image location is "my_org/informer:2.9.0" and the syft image is "my_org/informer_syft:2.9.0", there is no need to fill in this field. Only if the location is different, then this field should be edited.</p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"><img style="width: 75%; height: auto; display: block; margin: 0 auto;" src="/sys_attachment.do?sys_id=ff85c364c3fec310a9ea601bb0013194" border="0" /></p> <p style="margin: 0cm 0cm 8pt; line-height: 115%; font-size: 12pt; font-family: Aptos, sans-serif;"> </p> <span id="ns-kb-css-end-div-identifier" style="display: none; pointer-events: none;"></span></div></div>