SPIRE · Schema

SPIRE SVID

Schema representing SPIFFE Verifiable Identity Documents (SVIDs) issued by SPIRE, including X.509-SVIDs and JWT-SVIDs. SVIDs are the primary credential format used by SPIRE to assert workload identities as SPIFFE IDs.

AuthenticationCloud NativeGraduatedIdentitySecurityZero Trust

Properties

Name Type Description
type string The SVID type, either x509 for an X.509-SVID carrying a certificate chain or jwt for a JWT-SVID carrying a signed JSON Web Token.
spiffe_id string The SPIFFE ID encoded in this SVID, identifying the workload within a trust domain. Must conform to the spiffe:// URI scheme and include the trust domain and a workload path.
hint string Optional hint string provided by SPIRE to help workloads distinguish between multiple SVIDs with different SPIFFE IDs when multiple registration entries match.
x509_svid object
jwt_svid object
View JSON Schema on GitHub

JSON Schema

spire-svid-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://spiffe.io/schemas/spire/svid.json",
  "title": "SPIRE SVID",
  "description": "Schema representing SPIFFE Verifiable Identity Documents (SVIDs) issued by SPIRE, including X.509-SVIDs and JWT-SVIDs. SVIDs are the primary credential format used by SPIRE to assert workload identities as SPIFFE IDs.",
  "type": "object",
  "required": ["type", "spiffe_id"],
  "properties": {
    "type": {
      "type": "string",
      "description": "The SVID type, either x509 for an X.509-SVID carrying a certificate chain or jwt for a JWT-SVID carrying a signed JSON Web Token.",
      "enum": ["x509", "jwt"]
    },
    "spiffe_id": {
      "type": "string",
      "format": "uri",
      "pattern": "^spiffe://[^/]+/.+$",
      "description": "The SPIFFE ID encoded in this SVID, identifying the workload within a trust domain. Must conform to the spiffe:// URI scheme and include the trust domain and a workload path."
    },
    "hint": {
      "type": "string",
      "description": "Optional hint string provided by SPIRE to help workloads distinguish between multiple SVIDs with different SPIFFE IDs when multiple registration entries match."
    },
    "x509_svid": {
      "$ref": "#/$defs/X509SVID"
    },
    "jwt_svid": {
      "$ref": "#/$defs/JWTSVID"
    }
  },
  "$defs": {
    "X509SVID": {
      "type": "object",
      "description": "An X.509-SVID consisting of a certificate chain and corresponding private key material. The leaf certificate encodes the SPIFFE ID in the Subject Alternative Name URI field.",
      "required": ["cert_chain", "expiry_time"],
      "properties": {
        "cert_chain": {
          "type": "array",
          "description": "Ordered list of DER-encoded X.509 certificates forming the SVID chain, beginning with the leaf certificate that encodes the SPIFFE ID and ending with the last intermediate before the trust bundle root.",
          "items": {
            "type": "string",
            "contentEncoding": "base64",
            "description": "DER-encoded X.509 certificate."
          },
          "minItems": 1
        },
        "private_key": {
          "type": "string",
          "contentEncoding": "base64",
          "description": "DER-encoded private key corresponding to the public key in the leaf certificate. Present only when the Workload API delivers key material to the workload."
        },
        "expiry_time": {
          "type": "integer",
          "description": "Unix timestamp (seconds since epoch) indicating when this X.509-SVID expires. Workloads should refresh their SVID before this time.",
          "minimum": 0
        }
      }
    },
    "JWTSVID": {
      "type": "object",
      "description": "A JWT-SVID consisting of a signed JSON Web Token carrying the SPIFFE ID as the subject claim. Used for authentication to systems supporting OIDC token validation.",
      "required": ["token", "expiry_time"],
      "properties": {
        "token": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$",
          "description": "The compact serialized JWT string in the format header.payload.signature."
        },
        "expiry_time": {
          "type": "integer",
          "description": "Unix timestamp (seconds since epoch) indicating when this JWT-SVID expires. Corresponds to the exp claim in the JWT payload.",
          "minimum": 0
        },
        "issued_at": {
          "type": "integer",
          "description": "Unix timestamp (seconds since epoch) indicating when this JWT-SVID was issued. Corresponds to the iat claim in the JWT payload.",
          "minimum": 0
        }
      }
    },
    "RegistrationEntry": {
      "type": "object",
      "description": "A SPIRE registration entry that defines the SPIFFE ID to be issued to workloads matching a specific set of selectors. Entries are managed by administrators via the SPIRE Server API.",
      "required": ["spiffe_id", "parent_id", "selectors"],
      "properties": {
        "id": {
          "type": "string",
          "description": "Globally unique identifier for this registration entry, assigned by SPIRE Server on creation.",
          "example": "11111111-1111-1111-1111-111111111111"
        },
        "spiffe_id": {
          "$ref": "#/$defs/SPIFFEID"
        },
        "parent_id": {
          "$ref": "#/$defs/SPIFFEID"
        },
        "selectors": {
          "type": "array",
          "description": "List of selectors that must all match on an attested node or workload for this entry to apply. Selectors are type:value pairs such as unix:uid:1000 or k8s:pod-label:app:frontend.",
          "items": {
            "$ref": "#/$defs/Selector"
          },
          "minItems": 1
        },
        "ttl": {
          "type": "integer",
          "description": "Time-to-live in seconds for SVIDs issued using this entry. Overrides the server default TTL when set.",
          "minimum": 0
        },
        "dns_names": {
          "type": "array",
          "description": "Optional list of DNS SANs to include in X.509-SVIDs issued for this entry, in addition to the SPIFFE ID URI SAN.",
          "items": {
            "type": "string",
            "format": "hostname"
          }
        },
        "downstream": {
          "type": "boolean",
          "description": "When true, indicates this entry represents a downstream SPIRE Server that will receive trust bundle updates via the bundle endpoint."
        },
        "expires_at": {
          "type": "integer",
          "description": "Optional Unix timestamp after which this registration entry is no longer valid. SVIDs will not be issued for expired entries.",
          "minimum": 0
        },
        "federation_with": {
          "type": "array",
          "description": "List of trust domain names that workloads matching this entry should federate with, receiving foreign trust bundle material.",
          "items": {
            "type": "string",
            "description": "Trust domain name, e.g., example.org"
          }
        },
        "admin": {
          "type": "boolean",
          "description": "When true, workloads matching this entry can perform administrative operations on the SPIRE Server API."
        },
        "store_svid": {
          "type": "boolean",
          "description": "When true, the SVID issued for this entry is stored in the agent's SVID store plugin rather than being returned via the Workload API."
        },
        "hint": {
          "type": "string",
          "description": "Optional hint to identify this entry's SVID when a workload receives multiple SVIDs."
        },
        "created_at": {
          "type": "integer",
          "description": "Unix timestamp indicating when this registration entry was created.",
          "minimum": 0
        },
        "revision_number": {
          "type": "integer",
          "description": "Monotonically increasing revision number for this entry, incremented on each update.",
          "minimum": 0
        }
      }
    },
    "SPIFFEID": {
      "type": "object",
      "description": "A parsed SPIFFE ID consisting of a trust domain and a path component.",
      "required": ["trust_domain", "path"],
      "properties": {
        "trust_domain": {
          "type": "string",
          "description": "The trust domain portion of the SPIFFE ID, e.g., example.org.",
          "example": "example.org"
        },
        "path": {
          "type": "string",
          "description": "The path portion of the SPIFFE ID following the trust domain, e.g., /workload/frontend.",
          "pattern": "^/.*",
          "example": "/workload/frontend"
        }
      }
    },
    "Selector": {
      "type": "object",
      "description": "A selector is a type:value pair used during workload or node attestation to match registration entries. Examples include unix:uid:1000, k8s:ns:default, and aws:instance-profile:arn:aws:iam::123:instance-profile/spire.",
      "required": ["type", "value"],
      "properties": {
        "type": {
          "type": "string",
          "description": "The attestor or selector plugin type, such as unix, k8s, aws, gcp, azure, docker, or x509pop.",
          "example": "k8s"
        },
        "value": {
          "type": "string",
          "description": "The selector value specific to the type, such as ns:default for k8s or uid:1000 for unix.",
          "example": "ns:default"
        }
      }
    },
    "Bundle": {
      "type": "object",
      "description": "A SPIFFE trust bundle containing the root CA certificates and JWT signing keys for a trust domain. Bundles are used to verify SVIDs presented by workloads in that trust domain.",
      "required": ["trust_domain"],
      "properties": {
        "trust_domain": {
          "type": "string",
          "description": "The trust domain this bundle belongs to.",
          "example": "example.org"
        },
        "x509_authorities": {
          "type": "array",
          "description": "List of DER-encoded X.509 root CA certificates that form the X.509 trust anchor for this trust domain.",
          "items": {
            "type": "object",
            "properties": {
              "asn1": {
                "type": "string",
                "contentEncoding": "base64",
                "description": "DER-encoded X.509 certificate."
              },
              "tainted": {
                "type": "boolean",
                "description": "When true, this authority has been marked as tainted and SVIDs signed by it are no longer trusted."
              }
            }
          }
        },
        "jwt_authorities": {
          "type": "array",
          "description": "List of JWT signing public keys that can be used to verify JWT-SVIDs issued for this trust domain.",
          "items": {
            "type": "object",
            "properties": {
              "public_key": {
                "type": "string",
                "contentEncoding": "base64",
                "description": "DER-encoded public key material for JWT verification."
              },
              "key_id": {
                "type": "string",
                "description": "Key identifier (kid) matching the kid header of JWT-SVIDs signed with this key."
              },
              "expires_at": {
                "type": "integer",
                "description": "Unix timestamp when this JWT authority expires.",
                "minimum": 0
              },
              "tainted": {
                "type": "boolean",
                "description": "When true, this JWT authority has been marked as tainted."
              }
            }
          }
        },
        "refresh_hint": {
          "type": "integer",
          "description": "Suggested number of seconds after which consumers should re-fetch this bundle to check for updates.",
          "minimum": 0
        },
        "sequence_number": {
          "type": "integer",
          "description": "Monotonically increasing sequence number for this bundle, incremented on each update.",
          "minimum": 0
        }
      }
    },
    "Agent": {
      "type": "object",
      "description": "Represents an attested SPIRE Agent node known to the SPIRE Server. Agents are authenticated via node attestation and receive their own X.509-SVID from the server.",
      "required": ["id", "attestation_type"],
      "properties": {
        "id": {
          "$ref": "#/$defs/SPIFFEID"
        },
        "attestation_type": {
          "type": "string",
          "description": "The node attestor plugin type used to attest this agent, such as k8s_sat, aws_iid, gcp_iit, azure_msi, or join_token.",
          "example": "k8s_sat"
        },
        "x509svid_expires_at": {
          "type": "integer",
          "description": "Unix timestamp indicating when the agent's current X.509-SVID expires.",
          "minimum": 0
        },
        "x509svid_serial_number": {
          "type": "string",
          "description": "Serial number of the agent's current X.509-SVID certificate."
        },
        "banned": {
          "type": "boolean",
          "description": "When true, this agent has been banned and is no longer permitted to attest or receive SVIDs."
        },
        "selectors": {
          "type": "array",
          "description": "List of selectors produced by the node attestor for this agent, used to match node-scoped registration entries.",
          "items": {
            "$ref": "#/$defs/Selector"
          }
        },
        "can_reattest": {
          "type": "boolean",
          "description": "When true, this agent supports re-attestation using the same attestation method."
        }
      }
    }
  }
}