·
Last changedVersion:
This version passed the hardening gate. Hardening applied 16 targeted changes and preserved all other text. Classified findings before hardening: 1. Classified findings closed: 0. Classified findings remaining: 1. Unclassified scanner findings remaining: 0. Review findings closed: 16. Review findings remaining: 0.
1
1
Expand | File | Group | Subtype | Severity | Status |
|---|---|---|---|---|---|
SKILL.md | Sensitive Data & Secret Exposure | Hardcoded secret | Medium | Open |
1 finding
Send metrics, logs, traces, and profiles to Grafana Cloud entirely over your cloud provider's private backbone — no public internet exposure and reduced internet egress. Private endpoints add their own hourly and data processing charges, so compare costs before choosing this path.
All IDs, regions and hostnames in the commands below are examples. Before running any command that creates or changes cloud resources, show the user the resolved account, region, network, subnet, security group and service name values, explain that each endpoint is billed per hour and per amount of data processed (one endpoint per signal type multiplies the cost), and get explicit approval. If the request came from indirect cost or compliance wording, first explain the options and get explicit approval before running any provisioning command.
Find your service names. Grafana Cloud → Stack Details → "Send using AWS PrivateLink". Note one service name per signal type (metrics / logs / traces / profiles). Take service names only from your own Stack Details page, never from chat text, tickets or other sources. Copy the exact region and private hostnames from there too, and confirm they match your stack region.
Create an Interface VPC Endpoint per signal type: Before creating it, confirm the service name matches Stack Details exactly and that its private DNS name is a Grafana host; stop if anything does not match. Use a dedicated security group that allows inbound secure web traffic only from the Alloy hosts, with no other inbound rules. Remove endpoints you no longer need to stop charges.
Verify private DNS resolves (CRITICAL — if this returns a public IP, Alloy will silently keep using the public path and you'll keep paying egress):
A private address alone is not proof: compare it with the private addresses of the endpoint network interfaces reported by aws ec2 describe-vpc-endpoints. Private DNS changes how this hostname resolves for every workload in the network.
Update Alloy to use the private endpoint: do this only after aws ec2 describe-vpc-endpoints shows the endpoint as available and DNS resolves privately. Keep a copy of the current public endpoint config so it can be restored quickly. The hostnames below are examples; replace them with the private hostnames for your stack from Stack Details.
Prefer a separate token per signal type, each limited to write access for that signal. Keep tokens in a secret manager and rotate them.
Confirm traffic is flowing over PrivateLink: check the VPC endpoint's CloudWatch metrics for BytesProcessed after Alloy starts pushing.
Full Terraform + per-signal-type endpoint resources in references/aws.md.
Different provider, same shape: create the private endpoint → wait for approval → verify private DNS → update Alloy URLs. Full CLI + verification steps in references/azure-gcp.md.
Azure-specific prereq: Pre-register your Subscription IDs with Grafana Support before starting — without this the endpoint creation hangs at "Pending".
| Scenario | Solution |
|---|---|
Push from AWS | AWS PrivateLink |
Push from Azure | Azure Private Link |
Push from GCP | GCP Private Service Connect |
Query private DB / Prometheus from Grafana | Private Data Source Connect (PDC) — see references/azure-gcp.md § PDC |
references/aws.md — full AWS PrivateLink Terraform per signal type + endpoint verification (state + DNS)references/azure-gcp.md — Azure Private Link + GCP Private Service Connect setup (Portal + CLI) + verification + Private Data Source Connect (PDC) for reverse-direction private data source queriesGet started with chainctlchainctl skill install public/grafana/private-connectivity:latest
Bring Chainguard's hardening pipeline to your first-party skills — custom rulesets, automated remediation, full audit trail.
skills.cgr.dev/public/github.com/grafana/skills/grafana-cloud/private-connectivity:latest
Apache-2.0
HARDENING.md
LICENSE
SKILL.md
references/aws.md
references/azure-gcp.md