Artifact Registry

Deploying and managing Google Artifact Registry for container images and packages

Google Artifact Registry is a universal package manager that lets you store and manage container images and language packages (such as Maven and npm). It's an evolution of Container Registry, offering better management and security features.

Key Features

  • Multi-format support: Container images, language packages (Maven, npm, Python, etc.)

  • Regional storage: Store artifacts close to your deployments

  • VPC Service Controls: Restrict access to your artifacts

  • Integration with IAM: Fine-grained access control

  • Container Analysis: Vulnerability scanning

  • CMEK support: Customer-managed encryption keys

  • Artifact dependencies: View artifact dependencies

  • Binary Authorization: Enforce security policies

Deploying Artifact Registry with Terraform

Basic Repository Creation

resource "google_artifact_registry_repository" "my_repo" {
  provider = google-beta
  
  location      = "us-central1"
  repository_id = "my-repo"
  description   = "Docker repository for my applications"
  format        = "DOCKER"
}

# IAM policy for the repository
resource "google_artifact_registry_repository_iam_member" "repo_access" {
  provider = google-beta
  
  location   = google_artifact_registry_repository.my_repo.location
  repository = google_artifact_registry_repository.my_repo.name
  role       = "roles/artifactregistry.reader"
  member     = "serviceAccount:${google_service_account.service_account.email}"
}

# Service account that needs access
resource "google_service_account" "service_account" {
  account_id   = "artifact-user"
  display_name = "Artifact Registry User"
}

Advanced Repository with CMEK

Multiple Format Repository Configuration

Managing Artifact Registry with gcloud CLI

Creating Repositories

Managing Access

Working with Docker Images

Working with Maven Packages

Working with NPM Packages

Real-World Example: CI/CD Pipeline with Artifact Registry

This example demonstrates a complete CI/CD pipeline using Artifact Registry:

Step 1: Infrastructure Setup with Terraform

Step 2: Cloud Build Configuration (cloudbuild.yaml)

Step 3: Promotion to Production (promotion.yaml)

Best Practices

  1. Repository Organization

    • Create separate repositories for different artifact types

    • Consider environment-based repositories (dev, staging, prod)

    • Use consistent naming conventions

    • Tag images with both specific versions and "latest"

  2. Security

    • Use fine-grained IAM roles for access control

    • Enable vulnerability scanning for container images

    • Consider VPC Service Controls for sensitive repositories

    • Implement Binary Authorization in production

    • Use immutable tags for production repositories

  3. Performance

    • Create repositories in regions close to your build and deployment environments

    • Implement caching strategies for build pipelines

    • Use regional repositories to reduce latency

    • Consider replication for disaster recovery

  4. Operations

    • Implement lifecycle policies to manage artifact retention

    • Set up monitoring and alerts for repository quotas

    • Track dependency graphs for complex packages

    • Regularly scan for and remediate vulnerabilities

  5. Cost Management

    • Clean up unused artifacts regularly

    • Implement lifecycle policies to automatically delete old artifacts

    • Monitor storage usage across repositories

    • Consider compressing artifacts when possible

Common Issues and Troubleshooting

Authentication Problems

  • Check service account permissions

  • Verify that the correct authentication method is being used

  • For Docker: Ensure gcloud auth configure-docker has been run

  • For language packages: Check credential helper configuration

Access Control Issues

  • Review IAM roles assigned to users/service accounts

  • Verify that repository permissions are correctly set

  • Check if VPC Service Controls are blocking access

  • Ensure that service accounts have the necessary permissions

Image Push/Pull Failures

  • Verify network connectivity to the repository

  • Check for quota limits or restrictions

  • Ensure proper authentication is configured

  • Verify that the repository exists in the correct location

Vulnerability Scanning

  • Ensure Container Scanning API is enabled

  • Check for false positives in scan results

  • Implement appropriate remediation strategies

  • Consider using distroless or minimal base images

Further Reading

Last updated