Use this workflow when a Kubernetes deployment should manage only a
specific set of Netskope Private Access Publishers, not every Publisher
in the tenant. The result is a service account credential, either REST
API v2 token or OAuth2 client credentials, scoped to Publishers carrying
a dedicated label.
This is useful for delegated operations, shared tenants, and
multi-cluster environments where each cluster or cluster set owns its
own Publisher records.
Outcome
By the end, the tenant contains:
- A label under
Netskope Private Access > Publishers, such asprod-eu-cluster-set. - Two or more Publisher records carrying that label.
- A custom role that can manage NPA Publishers and is scoped to that
label. - A service account bound to that role, with either an API key or
OAuth2 client credentials. - Helm values that consume the credential without embedding secrets in
the release.
How label scoping works
Netskope roles combine functional permissions with object scope.
Functional permissions define what the principal can do; object scope
defines which labeled objects the permission applies to.
Publisher management does not expose its own label-scope picker in all
tenant UIs. The practical pattern is to add one low-impact permission
that does expose object scoping, then apply the label there. Use:
| Permission area | Permission | Scope |
|---|---|---|
NPA > Publishers |
Manage |
Inherits the role’s object scope |
Skope IT > Network Events |
View |
Label = your Publisher cluster-set label |
| Everything else | None |
Not applicable |
The Network Events permission is only the carrier for the object
scope. Do not grant additional Skope IT, DLP, policy, or tenant-wide
administrator permissions unless that broader access is intentional.
Prerequisites
- A Netskope tenant administrator account that can manage labels, roles,
administrators, and NPA Publishers. - A cluster-set label name. Use an environment or ownership name, for
exampleprod-eu-cluster-set, not a role name. - At least two Publisher records for production cluster sets. One
Publisher is enough for a lab, but it leaves no redundancy during
upgrades or node failures. - A secure place to store the generated API token or OAuth2 client
secret.
1. Create the Publisher label
- Open
Settings > Administration > Labels. - Create a new label under
Netskope Private Access > Publishers. - Name it after the cluster set or owning environment, for example
prod-eu-cluster-set. - Save the label.
Use labels to describe the Publishers, not the credential. The same
label is reused across Publisher records and role scopes, so it should
name the managed object set.
2. Create and label Publisher records
Scoped credentials can only see and manage Publishers in their label
scope. For that reason, pre-create the Publisher records that the chart
will enroll, then apply the label to those records.
For StatefulSet deployments, this chart appends the pod name toenrollment.commonName. With release namekubernetes-netskope-publisher and:
1 | workload: |
the chart will look for these Publisher identities:
1 | prod-eu-publisher-kubernetes-netskope-publisher-0 |
Create those Publisher records in Settings > Security Cloud Platform > Publishers, then apply the cluster-set label to each record.
Keep workload.replicas equal to the number of labeled Publisher
records. To scale from three to four replicas, first create and labelprod-eu-publisher-kubernetes-netskope-publisher-3, then update the
Helm values and run helm upgrade.
3. Create the scoped role
- Open
Settings > Administration > Administrators & Roles > Roles. - Create a new role. Use a name such as
Publisher Management - prod-eu-cluster-set. - Enable only the functional area needed for NPA Publisher management.
- In the permission grid, set:
| Permission area | Permission |
|---|---|
NPA > Publishers |
Manage |
Skope IT > Network Events |
View |
| All other rows | None |
- Open the
Scopecontrol for theNetwork Eventsrow. - Leave data-scope fields empty.
- Under object scope, choose the same scope for all permissions.
- Set the object scope label to the Publisher cluster-set label.
- Save the scope, then save the role.
The role should now have Publisher management access restricted to the
labeled Publisher set.
4. Create the service account
- Open
Settings > Administration > Administrators & Roles > Administrators. - Click
Service Account. - Name it after the cluster set, for example
Publisher Management - prod-eu-cluster-set. - Assign the custom role from the previous step.
- Choose the credential type.
| Credential type | Best for | Operational notes |
|---|---|---|
| OAuth2 client credentials | Production deployments | Short-lived access tokens; rotate the client secret before expiry. |
| REST API v2 token / API key | Labs, PoCs, or tenants not using OAuth2 yet | Long-lived token; rotate before expiry and update the Kubernetes Secret. |
Capture the generated secret immediately. Netskope displays the client
secret or API token only once.
5. Create the Kubernetes Secret
For a static REST API v2 token:
1 | kubectl create namespace npa-publisher |
For OAuth2 client credentials:
1 | kubectl create namespace npa-publisher |
Do not pass these values with helm install --set. Keep the credential
in a Kubernetes Secret and reference the Secret by name in values.
6. Configure the chart
Use StatefulSet mode when the cluster set has multiple Publisher
records. StatefulSet mode gives each pod a stable identity and lets the
chart append the pod name to enrollment.commonName.
OAuth2 values
1 | workload: |
Static API token values
1 | workload: |
Install or upgrade:
1 | helm upgrade --install kubernetes-netskope-publisher npa/kubernetes-netskope-publisher \ |
Leave enrollment.api.cleanupOnDelete disabled for scoped cluster
sets unless you intentionally want pod termination to delete the
tenant-side Publisher record. Most scoped deployments should scale down
first, then unlabel or delete retired Publisher records manually.
7. Verify the scope
Verify both the chart behavior and the credential boundary:
- In
Security Cloud Platform > Publishers, confirm that every
labeled Publisher reports the expected status after the pods enroll. - Use the issued credential to call
GET /api/v2/infrastructure/publishersand confirm the response only
includes Publishers in the labeled set. - Try to retrieve or modify a Publisher outside the labeled set. The
request should fail with an authorization error. - Review the tenant audit log for the service-account principal. It
should appear only against Publisher-related actions.
8. Rotate credentials
For OAuth2:
Reissue the client secret on the service account.
Update the Kubernetes Secret:
1
2
3
4
5kubectl create secret generic npa-api-oauth \
--namespace npa-publisher \
--from-literal=client-id='PASTE_CLIENT_ID_HERE' \
--from-literal=client-secret='PASTE_NEW_CLIENT_SECRET_HERE' \
--dry-run=client -o yaml | kubectl apply -f -Restart the StatefulSet:
1
2kubectl rollout restart statefulset/kubernetes-netskope-publisher \
--namespace npa-publisher
For static API tokens, reissue the token, update npa-api-token with
the same kubectl create secret ... --dry-run=client -o yaml | kubectl apply -f - pattern, then restart the workload.
9. Scale the cluster set
To add a Publisher:
- Create the next Publisher record that matches the chart-generated
name. - Apply the cluster-set label to the new Publisher.
- Increase
workload.replicas. - Run
helm upgrade.
To retire a Publisher:
- Reduce
workload.replicasand runhelm upgradeso the highest
ordinal pod is removed first. - Confirm the retired Publisher no longer has an active pod.
- Unlabel or delete the Publisher record in Netskope.
Never remove the label from a Publisher that still has an active pod
enrolled against it. The scoped credential may lose visibility before
the chart can complete the next startup or maintenance action.