Identity & Access Management

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.

Archive an access finding as intended access

POST
/scopes/{scopeId}/iam/access-findings/{accessFindingId}/actions/archive

Archives an Access Analyzer finding, recording that the external access is intended and approved ("Archive" / "Archive as intended" in the UI). The finding's status transitions to Archived, it is removed from the Active facet of the findings list, and the resulting state is immediately available to subsequent reads. Archiving does not modify the underlying policy grant — it only changes the finding's triage status. Validation: the finding must exist and be visible to the caller in the active scope (NOT_FOUND otherwise); the current status must permit archiving — a finding already in Archived or Resolved is rejected with CONFLICT (409); the caller must hold a role permitted to triage findings (owner/admin/contributor), otherwise FORBIDDEN. Async & state: Synchronous command returning 200 with the updated finding (Active → Archived). A resource.updated SSE frame is emitted for the finding with kind: iam.access_finding and a patch containing the new status. Errors: 401 unauthenticated; 403 caller lacks triage permission on the scope; 404 unknown or out-of-scope finding; 409 current status does not permit archive; 500 on backend failure. Idempotency/Concurrency: This operation does not use Idempotency-Key; it may be omitted and a sent one is ignored. Archiving a finding that is already Archived (including a retry of a request that succeeded) is refused with 409 CONFLICT; the transition is never applied twice. This operation does not check If-Match; a sent one is ignored.

Authorization

bearerToken
headerAuthorizationBearer <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.

Path Parameters

scopeId*string

Opaque ownership+authorization scope resolving to tenant + subscription + project.

accessFindingId*string

Identifier of the access finding to archive.

Response Body

Finding archived; the updated resource is returned.

application/json
  1. response

An Access Analyzer finding — a resource reachable by an external principal.

id*string

Finding identifier.

resource*string

Display name of the exposed resource.

resourceArn*string

Full ARN of the exposed resource.

resourceType*AccessFindingResourceType

Type of resource covered by an Access Analyzer finding.

Value in"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*AccessFindingExposure

How the resource is exposed to external principals.

Value in"Public""Cross-account""Cross-organization"
externalPrincipal*string

External principal / account that gained access.

accessLevel*AccessFindingAccessLevel

Access level an external principal gained on the resource.

Value in"Read""Write""Full""List"
actions*array<string>

Concrete actions the external principal can perform.

status*AccessFindingStatus

Lifecycle status of an Access Analyzer finding.

Value in"Active""Archived""Resolved"
grantStatement*

The policy statement that grants the external access reported by the finding.

recommendation*string

Analyzer remediation recommendation.

analyzedAt*string

When the analyzer last evaluated this finding.

Formatdate-time
firstObservedAt*string

When the external access was first observed.

Formatdate-time
curl -X POST "https://example.com/scopes/string/iam/access-findings/string/actions/archive"
{  "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"}