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).
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
# 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
# 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"}
}'
# 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
| 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 |
|
|
|
|
|
|
| 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 |
| 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.