Artifact Registry#

Google Cloud Artifact Registry manages container images and language packages. Cartography models repositories, repository-scoped image references, digest-scoped images, image layers, Helm charts, language packages, and generic artifacts.

        graph LR
    Project[GCPProject] -->|RESOURCE| Repository[GCPArtifactRegistryRepository]
    Repository -->|CONTAINS| RepositoryImage[GCPArtifactRegistryRepositoryImage]
    Repository -->|CONTAINS| HelmChart[GCPArtifactRegistryHelmChart]
    Repository -->|CONTAINS| LanguagePackage[GCPArtifactRegistryLanguagePackage]
    Repository -->|CONTAINS| GenericArtifact[GCPArtifactRegistryGenericArtifact]
    RepositoryImage -->|IMAGE| Image[GCPArtifactRegistryImage]
    TrivyFinding[TrivyImageFinding] -->|AFFECTS| Image
    PackageVersion[PackageVersion] -->|DEPLOYED| Image
    

Tagged DockerImage API records are expanded into one GCPArtifactRegistryRepositoryImage node per tag. These nodes preserve the repository-scoped, pullable image identity. Each repository-image node resolves through IMAGE to digest-scoped GCPArtifactRegistryImage content, so multiple tags, repositories, or projects may resolve to the same immutable image node.

OCI image layers are modeled independently by uncompressed diff ID. The current model does not create a relationship between an image and its layer nodes.

Trivy integration queries#

Find all vulnerabilities affecting Artifact Registry container images:

MATCH (vuln:TrivyImageFinding)-[:AFFECTS]->(img:GCPArtifactRegistryImage)<-[:IMAGE]-(repo_img:GCPArtifactRegistryRepositoryImage)
RETURN vuln.name, vuln.severity, repo_img.uri, img.digest
ORDER BY vuln.severity DESC

Find packages deployed in Artifact Registry images with their vulnerabilities:

MATCH (pkg:PackageVersion)-[:DEPLOYED]->(img:GCPArtifactRegistryImage)<-[:IMAGE]-(repo_img:GCPArtifactRegistryRepositoryImage)
OPTIONAL MATCH (vuln:TrivyImageFinding)-[:AFFECTS]->(pkg)
RETURN repo_img.uri, pkg.name, pkg.version, collect(vuln.name) AS vulnerabilities

Find critical vulnerabilities in Artifact Registry images with available fixes:

MATCH (vuln:TrivyImageFinding {severity: 'CRITICAL'})-[:AFFECTS]->(img:GCPArtifactRegistryImage)<-[:IMAGE]-(repo_img:GCPArtifactRegistryRepositoryImage)
MATCH (vuln)-[:AFFECTS]->(pkg:PackageVersion)
OPTIONAL MATCH (pkg)-[:SHOULD_UPDATE_TO]->(fix:TrivyFix)
RETURN vuln.name, repo_img.uri, pkg.name, pkg.version, fix.version AS fixed_version