JFrog Artifactory & Xray Connector

Security teams operating in software-driven environments often lack visibility into vulnerabilities embedded within the artifacts, packages, and container images that make up their software supply chain. The JFrog Artifactory and Xray Connector brings that visibility into Qualys Enterprise TruRisk Management by ingesting Artifactory inventory & software composition analysis findings from Xray's binary-level scans into a centralized risk platform. This allows practitioners to correlate application-layer vulnerabilities discovered in build artifacts and container images with the broader asset inventory already tracked in Qualys ETM. By consolidating software supply chain risk alongside cloud and endpoint security data, security teams can prioritize remediation based on true organizational risk rather than managing findings in isolation across separate toolchains.

Qualys ETM is compatible with JFrog Artifactory and JFrog Xray. JFrog is not affiliated with or endorsing this integration.

Connector Details

The following table provides a comprehensive overview of what the JFrog Artifactory & Xray Connector supports.

Vendor

JFrog

Product Name

JFrog Artifactory & JFrog Xray (JFrog Security Essentials)

Connector Category

Application Security

Asset Types Supported

Code Repository, Container images (Docker)

Finding Types Supported

Yes

Supported Version & Type

SaaS (Latest)

Integration Method

API Integration (REST)

Direction

Unidirectional (JFrog Artifactory & Xray to Qualys)

Incremental Sync (Delta)

Not Supported

Import of Installed Software

Not Supported

Import of Source Tags

Not Supported

Filters / Filter Query

Not Supported

Connection Settings

User Roles and Permissions

The JFrog Artifactory & Xray Connector requires an access token with administrative scope to retrieve asset and vulnerability data from Artifactory and Xray APIs.

To generate an access token in JFrog:

  1. Log in to your JFrog instance.
  2. Navigate to Administration > User Management > Access Tokens.
    JFrog Access Token Generation - Step 1
  3. Click Generate Token.
  4. Provide a token description and set the expiry as required.
  5. Set Token Scope to Admin.
  6. Under Services, select All or select both Artifactory and Xray.
  7. Click Generate and copy the token value. This value is shown only once.
    JFrog Access Token Generation - Step 2

The following permission is required:

Entity Type Required Permission
Access Token Admin

Authentication Details

Provide the following credentials in the connector configuration screen:

Name Key Type Description
Domain Name domainName String Base URL of the JFrog instance. Example: https://yourcompany.jfrog.io
API Token password Encrypted Access token generated in JFrog with Admin scope

Connector Configuration

Basic Details

  1. Log in to Qualys ETM.
  2. Navigate to Connectors > Integration tab and locate the JFrog Artifactory & Xray Connector from the Connector Marketplace.
  3. Next, to the JFrog connector tile, click Manage from the ellipses menu.
  4. Provide a Name and Description for the connector.
  5. Select the supported findings type: Vulnerability / Host Asset.
  6. Enter the Domain Name and API Token.

JFrog Connector - Basic Details Configuration

Mapping Details

Data Model

The JFrog Artifactory & Xray Connector provides out-of-the-box data model mappings for the following asset types: container images (Docker) and binary repositories. Vulnerability findings are supported for container image assets. View the models in ETM to see all supported fields.

Transform Maps

Default transform maps are provided for each asset and findings type. Transform maps can be created or cloned to customize field transformations.

  1. Click Create New to add a new transform map.
  2. Provide a Transform Map Name, select a Source Data Model, and select a Target Data Model.
  3. Save the map.
  4. Alternatively, use Clone from the quick menu to copy and adjust an existing default transform map.

Data Model Mapping – Container Image (Docker Image) Asset Transformation

Source Field Target Field

container-image

asset.assetHeader.assetTypeName

imageName

asset.assetDetail.name

IMAGE_DIGEST

asset.assetDetail.containerImageAssetClass.digestType

imageRegistry

asset.assetDetail.containerImageAssetClass.registry

imageRepository

asset.assetDetail.containerImageAssetClass.repository

imageName

asset.assetDetail.containerImageAssetClass.name

imageTag

asset.assetDetail.containerImageAssetClass.tag

blobConfig.architecture

asset.assetDetail.containerImageAssetClass.architecture

config.digest

asset.assetDetail.containerImageAssetClass.digest

storageManifest.checksums.sha256

asset.assetDetail.containerImageAssetClass.manifestDigest

ImageSize

asset.assetDetail.containerImageAssetClass.sizeInBytes

blobConfig.created 

asset.assetDetail.containerImageAssetClass.creationDate

layers[].digest

asset.assetDetail.containerImageAssetClass.layers[].digest

layers[].size

asset.assetDetail.containerImageAssetClass.layers[].sizeInBytes

evalExternalId

asset.assetHeader.externalAssetId

evalVendorAssetId

asset.assetHeader.vendorAssetId

storageManifest.downloadUri

asset.assetDetail.typedAttributes.jfrog_artifactory_manifestUrl

storageManifest.createdBy

asset.assetDetail.typedAttributes.jfrog_artifactory_createdBy

storageManifest.modifiedBy

asset.assetDetail.typedAttributes.jfrog_artifactory_modifiedBy

blobConfig.config.Cmd

asset.assetDetail.untypedAttributes.jfrog_container_cmd

blobConfig.config.Env

asset.assetDetail.untypedAttributes.jfrog_container_env

blobConfig.config.WorkingDir

asset.assetDetail.typedAttributes.jfrog_container_workingDir

blobConfig.os

asset.assetDetail.typedAttributes.jfrog_container_os

blobConfig.docker_version

asset.assetDetail.typedAttributes.jfrog_container_dockerVersion

blobConfig.rootfs

asset.assetDetail.untypedAttributes.jfrog_container_uncompressed_layers

blobConfig.history

asset.assetDetail.untypedAttributes.jfrog_container_history

Data Model Mapping – Binary Repository (Application) Asset Transformation

Source Field Target Field

(constant) "binary-repository"

asset.assetHeader.assetTypeName

key

asset.assetHeader.externalAssetId

key

asset.assetHeader.vendorAssetId

key

asset.assetDetail.name

packageType

asset.assetDetail.repositoryAssetClass.repositoryPackageType

url

asset.assetDetail.repositoryAssetClass.repoUrl

description

asset.assetDetail.typedAttributes.jfrog_artifact_description

type

asset.assetDetail.typedAttributes.jfrog_artifact_type

Data Model Mapping – Container Image Vulnerability Transformation

Source Field Target Field

container-image

asset.assetHeader.assetTypeName

imageName

asset.assetDetail.name

vulnerabilities[].severity 

findingGroup.findings[].severity

evalExternalId

asset.assetHeader.externalAssetId

evalVendorAssetId

asset.assetHeader.vendorAssetId

imageRegistry

asset.assetDetail.containerImageAssetClass.registry

imageRepository

asset.assetDetail.containerImageAssetClass.repository

imageName

asset.assetDetail.containerImageAssetClass.name

imageTag

asset.assetDetail.containerImageAssetClass.tag

dockerManifest.config.digest

asset.assetDetail.containerImageAssetClass.imageDigest

dockerManifest.layers[].digest

asset.assetDetail.containerImageAssetClass.layers[].digest

dockerManifest.layers[].size

asset.assetDetail.containerImageAssetClass.layers[].sizeInBytes

dockerManifest.config.size

asset.assetDetail.containerImageAssetClass.sizeInBytes

storageManifest.checksums.sha256

asset.assetDetail.containerImageAssetClass.manifestDigest

(date_format) storageManifest.
created → ISO8601

asset.assetDetail.containerImageAssetClass.creationDate

storageManifest.downloadUri

asset.assetDetail.typedAttributes.jfrog_artifactory_manifestUrl

storageManifest.createdBy

asset.assetDetail.typedAttributes.jfrog_artifactory_createdBy

storageManifest.modifiedBy

asset.assetDetail.typedAttributes.jfrog_artifactory_modifiedBy

vulnerabilities[].externalFindingId

findingGroup.findings[].externalFindingId

vulnerabilities[].cve

findingGroup.findings[].name

vulnerabilities[].summary

findingGroup.findings[].description

vulnerabilities[].severity

findingGroup.findings[].sourceSeverity

vulnerabilities[].cve

findingGroup.findings[].findingType.vulnerability.cveId

vulnerabilities[].cwe

findingGroup.findings[].findingType.vulnerability.cweIds

vulnerabilities[].cwe

findingGroup.findings[].findingType.vulnerability.cweId

vulnerabilities[].cvss_v3

findingGroup.findings[].findingType.vulnerability.cvss.cvss3Base

vulnerabilities[].created 

findingGroup.findings[].firstFoundOn

vulnerabilities[].findingDetectionUrl

findingGroup.findings[].findingDetectionURL

vulnerabilities[].extended_information.
remediation

findingGroup.findings[].solutionRecommendation

vulnerabilities[].extended_information.
full_description

findingGroup.findings[].attributes.jfrog_fullDescription

vulnerabilities[].extended_information.
short_description

findingGroup.findings[].attributes.jfrog_shortDescription

vulnerabilities[].extended_information.
jfrog_research_severity

findingGroup.findings[].attributes.jfrog_researchSeverity

vulnerabilities[].provider

findingGroup.findings[].attributes.jfrog_provider

vulnerabilities[].impact_path

findingGroup.findings[].attributes.jfrog_impactPath

Schedule

Schedules control the execution of the connector, including scheduling and the data types that are synchronized.

  1. Click + to add a new profile.
  2. Provide a Name and Description.
  3. Select the required Transform Map.
  4. Select the findings type: Asset and/or Vulnerability.
  5. Set Status to Active or Inactive.
  6. Configure a Schedule: select Single Occurrence or Recurring, then set the start and end date and time.
  7. Click Next to proceed.

JFrog Connector - Profile Configuration

How Does a Connection Work?

The JFrog Artifactory & Xray Connector executes on a configured schedule or on demand, based on the active profile. On each execution, the connector authenticates to the JFrog REST API using the configured domain and access token, fetches the list of repositories and container images, retrieves vulnerability data from JFrog Xray for each asset, applies the configured transform map, and imports the results into ETM.

Each execution performs a full pull. Incremental (delta) synchronization is not supported. The connector transitions through the following states during execution:

  1. Registered – The connector has been created and registered to fetch data from JFrog.
  2. Scheduled – The connector is queued for its next execution.
  3. Processing – The connector is actively fetching asset and findings data from JFrog.
  4. Processed – Asset data has been fetched successfully. Findings processing may still be in progress; allow additional time for findings to appear in ETM.

The Processed state indicates the connector completed its asset fetch. Full import of assets and findings, particularly for large environments, may take up to 2 hours. Once complete, the imported data is available in ETM.

In the Connector screen, the configured connector will appear with the state Processed once execution completes.

Viewing Assets and Findings in ETM

After a successful run, JFrog assets and findings appear in ETM as follows:

  • Assets: Navigate to Inventory > Assets. Select the relevant asset type (for example, Container Image or Repository). Filter with tags.name:"JFrog Artifactory & Xray" to list assets imported from this connector.
    JFrog Assets in ETM Inventory
  • Findings: Navigate to Risk Management > Findings > Vulnerability. Filter with finding.vendorProductName:"JFrog Artifactory & Xray" to list vulnerability findings from this connector.
    JFrog Findings in ETM Risk Management

API Endpoints

The connector uses the following JFrog REST API endpoints to retrieve data.

Name

Endpoint

 
Auth API baseurl  example https://qualysjfrog.jfrog.io  
Fetch asset list
https://qualysjfrog.jfrog.io/artifactory/api/repositories
https://qualysjfrog.jfrog.io/artifactory/api/docker/${repoKey}/v2/${imageName}/blobs/${configDigest}
 
Fetch asset details and vulns
https://qualysjfrog.jfrog.io/xray/api/v1/summary/artifact'