gcp-secretmanager-public-accessor

A secret allow policy binding allUsers/allAuthenticatedUsers to secretAccessor exposes the payload broadly.

derived gcp emits ExposedToTenant

match (record)

{ "field": "iamPolicy.bindings", "resource_type": "google.secretmanager.Secret" }

where

a binding on the secret (or inherited) grants roles/secretmanager.secretAccessor (or versions.access) to allUsers or allAuthenticatedUsers

emit

source type*
source<secret>
target<Tenant/Organization>
permissionssecretmanager.versions.access
conditionsresource_policy
state logicACTIVE if the wildcard binding is present and not overridden by an IAM deny / org policy / VPC-SC perimeter; else BLOCKED.

Narrative

Secret {secret.name} is readable by any Google-authenticated principal (allUsers/allAuthenticatedUsers bound to roles/secretmanager.secretAccessor).

Raw rule rules/derived/gcp/secretmanager.yaml

id: gcp-secretmanager-public-accessor
emits: ExposedToTenant
description: A secret allow policy binding allUsers/allAuthenticatedUsers to secretAccessor exposes the
  payload broadly.
match_record:
  resource_type: google.secretmanager.Secret
  field: iamPolicy.bindings
where:
- a binding on the secret (or inherited) grants roles/secretmanager.secretAccessor (or versions.access)
  to allUsers or allAuthenticatedUsers
emit:
  source_type: '*'
  source: <secret>
  target: <Tenant/Organization>
  permissions:
  - secretmanager.versions.access
  conditions:
  - resource_policy
  state_logic: ACTIVE if the wildcard binding is present and not overridden by an IAM deny / org policy
    / VPC-SC perimeter; else BLOCKED.
  confidence: '0.9'
  derived_from:
  - <secret iamPolicy binding to allUsers/allAuthenticatedUsers>
  false_positive_note: "allAuthenticatedUsers = any Google account (tenant/org-wide), NOT anonymous internet\
    \ \u2014 Secret Manager has no anonymous data plane, so model as ExposedToTenant, never ExposedToInternet.\
    \ A DOMAIN_RESTRICTED_SHARING org policy or a VPC-SC perimeter can neutralize allUsers/allAuthenticatedUsers\
    \ -> BLOCKED."
  narrative: Secret {secret.name} is readable by any Google-authenticated principal (allUsers/allAuthenticatedUsers
    bound to roles/secretmanager.secretAccessor).
move · open · esc close