Checks coordinates this tenant is considering for its own (BYOK) key-material
backend, and answers what was checked. Required scope:
admin.tenant.key-backend.byok.declare, and the path tenant must be
the caller's own.
It rides the declare scope rather than a read scope deliberately:
the operation has a side effect an attacker would want, an outbound connection
to a host the caller names, and that is a capability someone entitled to declare
a backend already has while a reader must not gain it.
It persists nothing and it reads nothing. No declaration is
created or mutated, no credential is read, sealed or unsealed, no
key-encryption key is moved and no lifecycle state changes. Equally,
nothing about the tenant's current declaration takes part in the
verdict: every value checked travels in the request body, so the answer is
a statement about the coordinates being proposed and never about the ones the
tenant already holds. Calling it on a tenant that has already bound a backend is
explicitly supported and changes nothing. Its one lasting effect is an audit row
recording that a configuration was submitted for checking.
A FAILED verdict is an HTTP 200. The question is whether the
submitted coordinates are admissible and, where they name an operator-specific
host, whether that host answers. "It did not answer" is an answer, so it arrives
as a 200 carrying FAILED/UNREACHABLE. A client that
renders that as a transport error loses the distinction that makes the operation
useful.
It never answers PASSED, and cannot. A pass means key
material was wrapped and unwrapped again and came back identical. This operation
presents no credential - the request shape carries none - and wraps nothing, so a
pass is not something it is able to observe. The green outcome is
NOT_APPLICABLE. Nothing about authorization, entitlement to the
named key, or key material is known until the backend is declared and bound.
Which checks run depends on the selected family and on what was submitted,
and the verdict names them. SHAPE and
ENDPOINT_POLICY always run.
KEY_ID_GRAMMAR_PARSED runs when a keyId was supplied
AND the declared family publishes a grammar for it - aws-kms,
gcp-kms and gcp-kms-hsm do; Azure key names and PKCS#11
labels have none, and for those the entry is ABSENT rather than reported as
vacuously passing. TRANSPORT_PROBE runs only when an
endpoint is supplied - so for the four PKCS#11 tokens and the two
GCP tokens, which name no operator-specific host, nothing is contacted and the
verdict carries no TRANSPORT_PROBE entry at all. That is what stops
a green answer reading as "everything is fine".
An endpoint the declared backend does not accept is a
422, not a verdict, and neither is one omitted where the
backend requires it. The rule is the declared per-backend requirement the DECLARE
verb enforces, read here by the same single reader - so a body this check admits
is a body the declare admits, and a rehearsal cannot come back green for a
submission the commit refuses.
The probe is pinned at TCP connect plus TLS handshake and issues no
application-layer request. A vault that completes the handshake and
would decline an unauthenticated API call therefore answers
ENDPOINT_ANSWERED, because it was never asked anything to
decline.
503 never means "the backend did not answer". It means this
instance declined to start a check it could not bound, because too many outbound
reachability probes are already in flight here. It carries
Retry-After and no verdict member at all, because a bounded-out
request contacted nothing.
The named backend family is checked against this tenant's admissibility before anything is contacted, so a family the tenant may never declare
cannot drive an outbound dial. That refusal is a 422 identical to the declare
verb's.
On an ANKA-operated deployment the endpoint is judged more narrowly here than on the platform-plane operation. Private and unique-local addresses are refused with a 400: the network they name belongs to the platform operator, not to the tenant. On a customer-operated deployment, where the operator is the customer's own staff, they are accepted exactly as everywhere else - a VPC interface endpoint and a Private Link vault are ordinary production shapes there.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||