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 & Xray Connector brings that visibility into Qualys Enterprise TruRisk Management (ETM) by ingesting Artifactory inventory and 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.

Note: 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)

Category

Application Security

Works With

Qualys Enterprise TruRisk Management (ETM)

Connector Type

Third-Party Integration

Supported Assets

Container Images (Docker), Binary Repositories

Findings Support

Yes

Supported Version & Type

SaaS (Latest)

Integration Type

API Integration (REST)

Authentication Type

REST API Token (Access Token)

Direction

Unidirectional (JFrog Artifactory & Xray → Qualys)

Incremental Sync (Delta)

Not Supported

Import of Installed Software

Not Supported

Import of Source Tags

Not Supported

Filters / Filter Query

Not Supported

Configure the Connector

The connector setup wizard in Qualys ETM walks through the following steps. Complete each step before proceeding to the next.

Before You Begin - AuthenticationBefore You Begin - Authentication

Complete the following preparation steps before configuring the connector in Qualys ETM.

  1. Ensure you have access to the JFrog platform with Administrator-level permissions.
  2. Generate an Access Token in JFrog (see the procedure below).
  3. Copy the generated token immediately – it cannot be retrieved later.
  4. Have your JFrog instance base URL ready (for example, https://yourorg.jfrog.io).

Generate an Access Token in JFrog

  1. Log in to your JFrog platform instance.
  2. Navigate to Administration > User Management > Access Tokens.
  3. Click Generate Token.
  4. Enter a description for the token.
  5. Set the token scope to Admin.
  6. Under services, select All to include both Artifactory and Xray.
  7. Click Generate and copy the token value immediately – it is only shown once and cannot be retrieved later. Store it in a secure location.

Important: The token value is shown only once. If you navigate away from the page without copying the token, you must generate a new one. Qualys recommends using a dedicated service account for this integration rather than a personal administrator account.

Note: If you already have an existing Admin-scoped Access Token with access to all services (Artifactory and Xray), you may use it directly without generating a new one.

Permissions Required

The JFrog Access Token must have Admin-level scope with access to all services (Artifactory and Xray). This is required to retrieve Docker image and repository data as well as Xray vulnerability findings.

Entity Type Required Permission
JFrog Access Token Admin

Scope and Data Access

The connector retrieves two types of data from JFrog, depending on the asset type configured in the connector profile:

  • Docker Image – Full asset records and associated vulnerability findings from Xray. Findings include vulnerability details such as CVE IDs, CWE IDs, CVSS v3 scores, severity, and remediation information.
  • Repositories – Asset records only. Vulnerability findings are not supported for this asset type.

The data flow is unidirectional, from JFrog to Qualys ETM. Delta synchronization is not supported; all data within the JFrog instance is retrieved on each connector run.

Key Rotation

When rotating the Access Token, generate a new token in JFrog under Administration > User Management > Access Tokens. Update the connector configuration in Qualys ETM with the new token using the Edit Connector option. Revoke the old token in JFrog only after confirming the new token is working correctly.

Create a Profile & ConnectionCreate a Profile & Connection

In this step, provide the connector name, description, and authentication credentials used to connect to JFrog.

  1. Log in to Qualys ETM.
  2. Navigate to Connectors > Integration tab and locate the JFrog Artifactory & Xray connector tile in the Connector Marketplace.
  3. Click Manage from the ellipsis menu on the connector tile.
  4. Complete the Connector Details fields (see table below).
  5. Complete the Authentication Details fields (see table below).
  6. Click Test Connection to validate the credentials before proceeding.
  7. Click Next to continue to Step 2.

Connector Details

Name

A display name for this connector instance.

Description

An optional description identifying the purpose or environment of this connector.

Authentication Details

Field Type Description
Domain Name String Base URL of the JFrog instance. Example: https://yourorg.jfrog.io
API Token Encrypted String Access Token generated in JFrog with Admin scope and access to all services (Artifactory and Xray).

Important: The API Token field accepts an Encrypted String. Once saved, the token value is not displayed again within Qualys ETM. If the token is lost, generate a new one in JFrog and update the connector.

When you click Test Connection, the connector runs the following checks:

  • Network Reachability
  • TLS Handshake
  • Authentication Credential Check
  • Authorization Scope Check
  • Data Fetch

All five checks must pass before the connector can be saved. If a check fails, refer to the Troubleshooting section for resolution steps.

Set the Scope & ScheduleSet the Scope & Schedule

In this step, select the asset types to synchronize and configure the connector execution schedule.

  1. Under Data to Sync, select the asset type(s) to include:
    1. Docker Image – Imports asset records and vulnerability findings from Xray.
    2. Repositories – Imports asset records only (no vulnerability findings).
    3. Both asset types may be selected simultaneously.
  2. If the Docker Image type is selected, also select Vulnerability as the finding type to enable Xray vulnerability ingestion.
  3. Select the required Transform Map for each selected asset type.
  4. Configure the Schedule:
    1. Select Single Occurrence or Recurring.
    2. Set the start date, end date, and execution time.
  5. Click Next to proceed to the Review step.
  6. Review the changes and create your connector.

Note: Delta synchronization is not supported. Each scheduled execution performs a complete data pull from JFrog. Schedule frequency should be set based on how often the JFrog environment changes.

Advanced Settings

Advanced settings are available after the connector is created. Access them by selecting the connector from the Connections list and navigating to the relevant tab.

Note: After modifying any Advanced Settings, click Save to apply the changes before navigating away.

Filters Tab

The Filters tab is present in the connector configuration. However, filter queries are not currently supported for the JFrog Artifactory & Xray Connector. The connector retrieves all accessible Docker images and repositories from the configured JFrog instance on each run.

Transform Map Tab

The Transform Map tab displays the active transformation maps applied to ingested data. The following default transform maps are provided:

  • JFrog Docker Image Asset – Maps Docker image asset fields from JFrog to the Qualys ETM container image asset data model.
  • JFrog Repository Asset – Maps repository asset fields from JFrog to the Qualys ETM repository asset data model.
  • JFrog Docker Image Vulnerability – Maps Xray vulnerability findings to the Qualys ETM findings data model.

Transform maps can be cloned and customized. To create a custom map, click Create New, provide a Transform Map Name, select a Source Data Model, and select a Target Data Model, then save. Alternatively, use Clone from the quick menu to copy and adjust an existing default map.

How the Connection Works

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 applicable asset, applies the configured transform map, and imports the results into ETM. Each execution performs a full pull; incremental (delta) synchronization is not supported.

Connector States

The connector transitions through the following states during execution:

  • Registered – The connector has been created and registered to fetch data from JFrog. It will execute on its next scheduled run.
  • Scheduled – The connector is queued and waiting for its next scheduled execution window.
  • Processing – The connector is actively fetching asset and findings data from JFrog via the REST API.
  • Processed – Asset data has been fetched and imported successfully. Findings processing may still be in progress; allow additional time for findings to appear in ETM.
  • Errored – The connector encountered an error during execution. Check the connector log and refer to the Troubleshooting section.

Note: On the first run, the full import of assets and findings – particularly for large JFrog environments – may take up to 2 hours to complete. The connector will show Processed once the asset fetch is complete, but findings may continue processing in the background.

Viewing Assets and Findings in ETM

After a successful connector run, JFrog assets and findings are available in Qualys ETM as follows:

  • Assets: Navigate to Inventory > Assets. Use the following filter to list assets imported from this connector:
    inventory:(source:"JFrog")

    JFrog assets displayed in Qualys ETM Inventory
  • Findings: Navigate to Risk Management > Findings > Vulnerability. Use the following filter to list vulnerability findings from this connector:
    findings.vendorProductname:"JFrog Artifactory & Xray"

    JFrog vulnerability findings displayed in Qualys ETM Risk Management

Troubleshooting

Use the following table to resolve common issues encountered with the JFrog Artifactory & Xray Connector.

Issue Resolution
Authentication failure on connector run Verify the Domain Name and API Token entered in Qualys ETM are correct. Confirm the token has not expired or been revoked in JFrog under Administration > User Management > Access Tokens. Verify the token has Admin scope and includes access to all services.
No assets imported after first run The connector transitions through Registered, Scheduled, Processing, and Processed states. The entire process may take up to 2 hours to complete. Verify that Docker images or repositories exist in JFrog Artifactory and that the correct asset type is selected in the connector profile.
Connection test fails Verify the Domain Name is correct and accessible from the Qualys cloud over HTTPS. Confirm the JFrog instance base URL format is correct (for example, https://yourorg.jfrog.io). Check that the Qualys cloud IP ranges are not blocked by your JFrog instance's network policies.
Vulnerability findings not imported Vulnerability findings are only supported for the Docker Image asset type – they are not available for Repositories. Confirm that JFrog Xray is enabled on your JFrog instance and that Xray scanning is configured for the repositories containing the Docker images. Verify that the Vulnerability finding type is selected in the connector profile.

Additional Information

API Reference

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

Operation Endpoint
Authentication / Base URL https://yourorg.jfrog.io
Fetch asset list (repositories) /artifactory/api/repositories
Fetch Docker image blob config /artifactory/api/docker/{repoKey}/v2/{imageName}/blobs/{configDigest}
Fetch asset details and vulnerability findings /xray/api/v1/summary/artifact

Transformation Maps

The following default transformation maps are provided for the JFrog Artifactory & Xray Connector. Each map defines how source fields from the JFrog API response are mapped to target fields in the Qualys ETM data model.

Docker Image Asset TransformationDocker Image Asset Transformation

Source Field Target Field
container-image (constant) asset.assetHeader.assetTypeName
imageName asset.assetDetail.name (Required)
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 (Required)
evalVendorAssetId asset.assetHeader.vendorAssetId (Required)
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

Binary Repository Asset TransformationBinary Repository Asset Transformation

Source Field Target Field
binary-repository (constant) asset.assetHeader.assetTypeName
key asset.assetHeader.externalAssetId (Required)
key asset.assetHeader.vendorAssetId (Required)
key asset.assetDetail.name (Required)
packageType asset.assetDetail.repositoryAssetClass.repositoryPackageType
url asset.assetDetail.repositoryAssetClass.repoUrl
description asset.assetDetail.typedAttributes.jfrog_artifact_description
type asset.assetDetail.typedAttributes.jfrog_artifact_type

Docker Image Vulnerability TransformationDocker Image Vulnerability Transformation

Source Field Target Field
container-image (constant) asset.assetHeader.assetTypeName
imageName asset.assetDetail.name (Required)
evalExternalId asset.assetHeader.externalAssetId (Required)
evalVendorAssetId asset.assetHeader.vendorAssetId (Required)
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
storageManifest.created (formatted → 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[].severity findingGroup.findings[].severity
vulnerabilities[].externalFindingId findingGroup.findings[].externalFindingId (Required)
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