securing-container-registry-with-harbor skill (Anthropic-Cybersecurity-Skills)

From Public Agent Wiki

What it does. Configures the security features of the Harbor open-source container registry - integrated Trivy scanning, Cosign and Notary content trust policies, project-level RBAC, immutable tag and retention rules, and OIDC authentication - to enforce provenance and block deployment of vulnerable images. Use when deploying or hardening Harbor, or when compliance requires that only signed and scanned images can be pulled. Keywords: Harbor, project policy, content trust, immutable tag, retention, robot account, OIDC, replication. Do not use for signing images with Cosign outside a registry - use implementing-image-provenance-verification-with-cosign. Part of mukul975/Anthropic-Cybersecurity-Skills (817 security skills) (mukul975/Anthropic-Cybersecurity-Skills).

Upstream mukul975/Anthropic-Cybersecurity-Skills
Skill file skills/securing-container-registry-with-harbor/SKILL.md
License Apache-2.0 (skill folder LICENSE)
Author mukul975
Fetched 2026-09-10

Install

  • npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill securing-container-registry-with-harbor, or copy the skill folder into ~/.claude/skills/securing-container-registry-with-harbor/.
  • Raw file: curl -sL https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/HEAD/skills/securing-container-registry-with-harbor/SKILL.md

SKILL.md (verbatim)

name: securing-container-registry-with-harbor
description: >-
  Configures the security features of the Harbor open-source container registry - integrated
  Trivy scanning, Cosign and Notary content trust policies, project-level RBAC, immutable tag
  and retention rules, and OIDC authentication - to enforce provenance and block deployment of
  vulnerable images. Use when deploying or hardening Harbor, or when compliance requires that
  only signed and scanned images can be pulled. Keywords: Harbor, project policy, content
  trust, immutable tag, retention, robot account, OIDC, replication. Do not use for signing
  images with Cosign outside a registry - use
  implementing-image-provenance-verification-with-cosign.
domain: cybersecurity
subdomain: container-security
tags:
- containers
- kubernetes
- docker
- security
- registry
- harbor
version: '1.0'
author: mahipal
license: Apache-2.0
nist_csf:
- PR.PS-01
- PR.IR-01
- ID.AM-08
- DE.CM-01
mitre_attack:
- T1610
- T1611
- T1609
- T1525
- T1190

Securing Container Registry with Harbor

Overview

Harbor is an open-source container registry that provides security features including vulnerability scanning (integrated Trivy), image signing (Notary/Cosign), RBAC, content trust policies, replication, and audit logging. Securing Harbor involves configuring these features to enforce image provenance, prevent vulnerable image deployment, and maintain registry access control.

When to Use

  • When deploying or configuring securing container registry with harbor capabilities in your environment
  • When establishing security controls aligned to compliance requirements
  • When building or improving security architecture for this domain
  • When conducting security assessments that require this implementation

Prerequisites

  • Harbor 2.10+ installed (Helm or Docker Compose)
  • TLS certificates for HTTPS
  • Trivy scanner integration
  • OIDC/LDAP for authentication
  • Kubernetes cluster (for deployment target)

Workflow

Step 1: Install Harbor with Security Configuration

# harbor-values.yaml for Helm deployment
expose:
  type: ingress
  tls:
    enabled: true
    certSource: secret
    secret:
      secretName: harbor-tls
      notarySecretName: harbor-tls
  ingress:
    hosts:
      core: harbor.example.com
      notary: notary.example.com

externalURL: https://harbor.example.com

persistence:
  enabled: true
  resourcePolicy: "keep"

harborAdminPassword: "<strong-password>"

trivy:
  enabled: true
  gitHubToken: "<github-token>"
  severity: "CRITICAL,HIGH,MEDIUM"
  autoScan: true

notary:
  enabled: true

core:
  secretKey: "<32-char-secret>"

database:
  type: external
  external:
    host: postgres.example.com
    port: "5432"
    username: harbor
    password: "<db-password>"
    sslmode: require
helm repo add harbor https://helm.getharbor.io
helm install harbor harbor/harbor -f harbor-values.yaml -n harbor --create-namespace

Step 2: Configure Vulnerability Scanning Policies

# Enable auto-scan on push (via Harbor API)
curl -k -X PUT "https://harbor.example.com/api/v2.0/projects/myproject" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "metadata": {
      "auto_scan": "true",
      "severity": "critical",
      "prevent_vul": "true",
      "reuse_sys_cve_allowlist": "true"
    }
  }'

Step 3: Configure Content Trust

# Enable content trust at project level
curl -k -X PUT "https://harbor.example.com/api/v2.0/projects/myproject" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "metadata": {
      "enable_content_trust": "true",
      "enable_content_trust_cosign": "true"
    }
  }'

# Sign image with Cosign
cosign sign --key cosign.key harbor.example.com/myproject/myapp:v1.0.0

# Verify signature
cosign verify --key cosign.pub harbor.example.com/myproject/myapp:v1.0.0

Step 4: Configure RBAC and Project Isolation

# Create project with private visibility
curl -k -X POST "https://harbor.example.com/api/v2.0/projects" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "production",
    "metadata": {
      "public": "false",
      "auto_scan": "true",
      "prevent_vul": "true",
      "severity": "high"
    }
  }'

# Harbor roles: ProjectAdmin, Maintainer, Developer, Guest, LimitedGuest
# Add member with specific role
curl -k -X POST "https://harbor.example.com/api/v2.0/projects/production/members" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "role_id": 3,
    "member_user": {"username": "developer1"}
  }'

Step 5: Configure Immutable Tags and Retention

# Create tag immutability rule (prevent overwriting release tags)
curl -k -X POST "https://harbor.example.com/api/v2.0/projects/production/immutabletagrules" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "tag_filter": "v*",
    "scope_selectors": {
      "repository": [{"kind": "doublestar", "decoration": "repoMatches", "pattern": "**"}]
    }
  }'

# Configure retention policy (keep last 10 tags, delete untagged after 7 days)
curl -k -X POST "https://harbor.example.com/api/v2.0/retentions" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "algorithm": "or",
    "rules": [
      {
        "action": "retain",
        "template": "latestPushedK",
        "params": {"latestPushedK": 10},
        "tag_selectors": [{"kind": "doublestar", "decoration": "matches", "pattern": "**"}],
        "scope_selectors": {"repository": [{"kind": "doublestar", "decoration": "repoMatches", "pattern": "**"}]}
      }
    ],
    "trigger": {"kind": "Schedule", "settings": {"cron": "0 0 * * *"}}
  }'

Step 6: OIDC Authentication Integration

# Harbor configuration for OIDC
auth_mode: oidc_auth
oidc_name: "Okta"
oidc_endpoint: "https://company.okta.com/oauth2/default"
oidc_client_id: "harbor-client-id"
oidc_client_secret: "harbor-client-secret"
oidc_groups_claim: "groups"
oidc_admin_group: "harbor-admins"
oidc_scope: "openid,profile,email,groups"
oidc_verify_cert: true
oidc_auto_onboard: true

Validation Commands

# Test vulnerability prevention (should block pull of vulnerable image)
docker pull harbor.example.com/production/vulnerable-app:latest
# Expected: Error - image blocked due to vulnerabilities

# Verify content trust enforcement
DOCKER_CONTENT_TRUST=0 docker push harbor.example.com/production/unsigned:latest
# Expected: Push rejected due to content trust policy

# Check scan results via API
curl -k "https://harbor.example.com/api/v2.0/projects/production/repositories/myapp/artifacts/v1.0.0/additions/vulnerabilities" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)"

# Audit log check
curl -k "https://harbor.example.com/api/v2.0/audit-logs?page=1&page_size=10" \
  -H "Authorization: Basic $(echo -n admin:Harbor12345 | base64)"

References

Other files in this skill

assets/template.md (verbatim)

Harbor Registry Security Assessment Template

Registry Information

Field Value
Harbor URL
Harbor Version
Auth Mode DB / OIDC / LDAP
TLS Enabled Yes / No

Project Security Checklist

Project Auto-Scan Vuln Prevention Content Trust Private Immutable Tags

Findings and Remediation

Severity Finding Remediation Status

references/api-reference.md (verbatim)

API Reference: Securing Container Registry with Harbor

Harbor REST API v2.0

Method Endpoint Description
GET /api/v2.0/projects List all projects
PUT /api/v2.0/projects/{name} Update project settings
GET /api/v2.0/configurations Get system config
PUT /api/v2.0/configurations Update system config
GET /api/v2.0/projects/{name}/members List project members
POST /api/v2.0/projects/{name}/members Add member
GET /api/v2.0/projects/{name}/immutabletagrules List tag rules
GET /api/v2.0/audit-logs Get audit logs
GET /api/v2.0/projects/{name}/repositories/{repo}/artifacts/{ref}/additions/vulnerabilities Get scan results

Harbor Roles

Role ID Name Permissions
1 ProjectAdmin Full project control
2 Maintainer Push/pull/scan/sign
3 Developer Push and pull images
4 Guest Pull images only
5 LimitedGuest Pull specific repos

Security Metadata Fields

Field Values Description
auto_scan true/false Scan images on push
prevent_vul true/false Block vulnerable images
severity critical/high/medium Block threshold
enable_content_trust true/false Notary signing
enable_content_trust_cosign true/false Cosign verification
public true/false Public project access

Python Libraries

Library Version Purpose
requests >=2.28 Harbor REST API calls
json stdlib Parse API responses

References

references/standards.md (verbatim)

Standards Reference - Harbor Container Registry Security

NIST SP 800-190 - Container Security

  • Use private registries with TLS
  • Scan all images for vulnerabilities before deployment
  • Sign images and verify signatures
  • Implement RBAC on registry access
  • Enable audit logging

CIS Docker Benchmark

  • 2.5: Ensure insecure registries are not used
  • 4.2: Ensure containers use trusted base images
  • 4.4: Ensure images are scanned for vulnerabilities
  • 4.5: Ensure Content trust for Docker is enabled

Harbor Security Features

Feature Purpose
Trivy Scanner Vulnerability detection in images
Content Trust Image signing with Notary/Cosign
RBAC Role-based project access control
Vulnerability Prevention Block deployment of vulnerable images
Immutable Tags Prevent tag overwriting
Audit Logs Track all registry operations
Replication Secure cross-registry replication
Retention Policies Automated cleanup of old images
Robot Accounts Service-to-service authentication
OIDC/LDAP Enterprise identity integration

references/workflows.md (verbatim)

Workflows - Harbor Registry Security

Workflow 1: Secure Image Pipeline

[Build Image] --> [Push to Harbor] --> [Auto-Scan (Trivy)] --> [Sign (Cosign)]
                                              |
                                    +---------+---------+
                                    |                   |
                                    v                   v
                            Vulnerabilities?     No vulnerabilities
                            Block deployment     Allow pull

Workflow 2: Registry Hardening

Step 1: Enable HTTPS with valid TLS certificates
Step 2: Configure OIDC/LDAP authentication
Step 3: Create projects with auto-scan enabled
Step 4: Enable vulnerability prevention policy
Step 5: Configure content trust (Cosign)
Step 6: Set immutable tag rules for release tags
Step 7: Configure retention policies
Step 8: Enable audit logging
Step 9: Create robot accounts for CI/CD
Step 10: Test with vulnerability gate check

Back to mukul975/Anthropic-Cybersecurity-Skills (817 security skills) or Agent skills.