Preview — pending review
This reference is generated from the platform API contract and is still under review. Operations, fields, and descriptions can change before publication.
Get an Access Analyzer finding
Retrieves the full detail read model for a single Access Analyzer finding, powering the finding detail page:
the exposed resource and its ARN, an optional console deep-link (resourceHref), the external principal,
exposure class, granted access level and concrete actions, the rendered granting policy statement
(sid/effect/service/actions/resources/conditions), the analyzer recommendation, and the
analyzed/first-observed timestamps.
Validation: scopeId must be an accessible scope and accessFindingId must reference a finding inside
that scope; an unknown or out-of-scope id maps to NOT_FOUND (404). No body or mutation parameters exist.
Async & state: Synchronous read; no state change.
Errors: 401 when unauthenticated; 403 from either of two checks — the caller's role does not grant
IAM read on the scope, or a bearer API token is missing the iam:read action scope (token principals
only, so even an owner's token gets 403 without it); 404 when the finding does not exist or is not
visible in this scope; 500 on read-model failure.
Idempotency/Concurrency: Safe, cacheable; no idempotency key required. The response carries
no ETag; archive and resolve do not check If-Match.
bearerTokenAuthorizationBearer <token>An API token (pc_live_…) or a service-account key (sak_live_…), created in Identity & Access Management and sent as Authorization: Bearer <token>. Requests are rate limited per credential and per tenant: every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a refused request gets 429 RATE_LIMITED with Retry-After.
scopeId*stringOpaque ownership+authorization scope resolving to tenant + subscription + project.
accessFindingId*stringIdentifier of the access finding.
The access finding detail read model.
application/json- response
An Access Analyzer finding — a resource reachable by an external principal.
id*stringFinding identifier.
resource*stringDisplay name of the exposed resource.
resourceArn*stringFull ARN of the exposed resource.
resourceType*AccessFindingResourceTypeType of resource covered by an Access Analyzer finding.
"Object bucket""KMS key""IAM role""Secret""Snapshot""Machine image""File share""Database"resourceHref*|Deep-link target within the console (scoped path suffix), or null when no console page exists.
exposure*AccessFindingExposureHow the resource is exposed to external principals.
"Public""Cross-account""Cross-organization"externalPrincipal*stringExternal principal / account that gained access.
accessLevel*AccessFindingAccessLevelAccess level an external principal gained on the resource.
"Read""Write""Full""List"actions*array<string>Concrete actions the external principal can perform.
status*AccessFindingStatusLifecycle status of an Access Analyzer finding.
"Active""Archived""Resolved"grantStatement*The policy statement that grants the external access reported by the finding.
recommendation*stringAnalyzer remediation recommendation.
analyzedAt*stringWhen the analyzer last evaluated this finding.
date-timefirstObservedAt*stringWhen the external access was first observed.
date-timecurl -X GET "https://example.com/scopes/string/iam/access-findings/string"{ "id": "string", "resource": "string", "resourceArn": "string", "resourceType": "Object bucket", "resourceHref": "string", "exposure": "Public", "externalPrincipal": "string", "accessLevel": "Read", "actions": [ "string" ], "status": "Active", "grantStatement": { "sid": "string", "effect": "Allow", "service": "string", "actions": [ "string" ], "resources": [ "string" ], "conditions": [ { "operator": "string", "key": "string", "value": "string" } ] }, "recommendation": "string", "analyzedAt": "2019-08-24T14:15:22Z", "firstObservedAt": "2019-08-24T14:15:22Z"}