컨피덴셜 VM 토큰 소유권 주장

이 문서에서는 컨피덴셜 VM의 well-known 엔드포인트에 정의된 대로 컨피덴셜 VM 증명 토큰에 있는 항목을 설명합니다. 토큰은 JSON 웹 토큰 (JWT)입니다.

토큰 예시

다음은 인코딩된 증명 토큰의 예입니다. https://jwt.io/를 사용하여 디코딩할 수 있습니다.

eyJhbGciOiJSUzI1NiIsImtpZCI6IjFjNjdmYWVhYjRhYzE1ZDJmNmZmODMwY2E2ZmM1N2YyYmVhM2Y0YmIiLCJ0eXAiOiJKV1QifQ.eyJhdWQiOiJcdTAwM2NZT1VSQVVESUVOQ0VcdTAwM2UiLCJleHAiOjE3MTU5NzE2OTcsImlhdCI6MTcxNTk2ODA5NywiaXNzIjoiaHR0cHM6Ly9jb25maWRlbnRpYWxjb21wdXRpbmcuZ29vZ2xlYXBpcy5jb20iLCJuYmYiOjE3MTU5NjgwOTcsInN1YiI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2NvbXB1dGUvdjEvcHJvamVjdHMvcnVpZGV6aGFuZy0yL3pvbmVzL3VzLWNlbnRyYWwxLWMvaW5zdGFuY2VzL2N2bS10b2tlbi1jbGFpbXMiLCJlYXRfbm9uY2UiOlsidGhpc0lzQWN1c3RvbU5vbmNlIiwidGhpc0lzQU11Y2hMb25nZXJDdXN0b21Ob25jZVdpdGhQYWRkaW5nRm9yNzRCeXRlczAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSwic2VjYm9vdCI6ZmFsc2UsIm9lbWlkIjoxMTEyOSwiaHdtb2RlbCI6IkdDUF9BTURfU0VWIiwic3duYW1lIjoiR0NFIiwiZGJnc3RhdCI6ImVuYWJsZWQiLCJzdWJtb2RzIjp7ImdjZSI6eyJ6b25lIjoidXMtY2VudHJhbDEtYyIsInByb2plY3RfaWQiOiJydWlkZXpoYW5nLTIiLCJwcm9qZWN0X251bWJlciI6IjQ3MDY1MjQyNjMwNSIsImluc3RhbmNlX25hbWUiOiJjdm0tdG9rZW4tY2xhaW1zIiwiaW5zdGFuY2VfaWQiOiI3MzMzMjUxNTQ2ODE2NDQ2MDY5In19LCJnb29nbGVfc2VydmljZV9hY2NvdW50cyI6WyI0NzA2NTI0MjYzMDUtY29tcHV0ZUBkZXZlbG9wZXIuZ3NlcnZpY2VhY2NvdW50LmNvbSJdfQ.Z8CIreuWj8vQKe9L5f5Ol80LcWBI_pFWwfT8qsky8hjtH3OMmqfUCJJRx-dX5Rqm5n4qe4dHacLgSWQlT9MDYyrtWDuocA2WtfPZLvM0DNc4HuoNPZtVrgMMcZ93Xyl5-tJuI5PbPshiDBT06_QaRm5l37RRL2CsxXZGCkKsxV1vs0gF5xZgSNmhDqg3q1fONhA3VglZ-H0SHAvMNr1qwXDKrQxdYxyFfEMLkcsRxSXlR5mLCbMIFptGTPXt-k83xJzCipuKSiKJrwaRdZTmlapn7UtaTRLvG3YCmXPg6oOvNKtE8T4KeBY36EdzR0Fdmz_pXSbWL-q8-y90VxDxwQ

다음은 디코딩된 토큰의 예입니다.

{
  "alg": "RS256",
  "kid": "6e66f1aededf736581df2599ee20387718978dcd",
  "typ": "JWT"
}.
{
  "aud": "<YOURAUDIENCE>",
  "exp": 1715359550,
  "iat": 1715355950,
  "iss": "https://confidentialcomputing.googleapis.com",
  "nbf": 1698861565,
  "sub": "https://www.googleapis.com/compute/v1/projects/<YOURPROJECT>/zones/us-central1-c/instances/cvm-token-claims",
  "eat_nonce": [
    "thisIsAcustomNonce",
    "thisIsAMuchLongerCustomNonceWithPaddingFor74Bytes0000000000000000000000000"
  ],
  "secboot": true,
  "oemid": 11129,
  "hwmodel": "GCP_AMD_SEV",
  "swname": "Compute Engine",
  "dbgstat": "disabled-since-boot",
  "submods": {
    "gce": {
      "zone": "us-central1-c",
      "project_id": "<YOURPROJECT>",
      "project_number": "470652426305",
      "instance_name": "cvm-token-claims",
      "instance_id": "7333251546816446069"
    }
  },
  "google_service_accounts": [
    "470652426305-compute@developer.gserviceaccount.com"
  ]
}

토큰 내 항목은 다음 섹션에서 자세히 설명합니다.

토큰 항목

다음 표에서는 증명 토큰의 대략적인 항목을 설명합니다. 이러한 항목은 OpenID Connect 1.0 사양을 준수합니다.

well-known 엔드포인트 값 설명
claims_supported 지원되는 소유권 주장을 참고하세요.
id_token_signing_alg_values_supported 토큰에서 지원하는 서명 알고리즘 (alg 값)입니다. 컨피덴셜 VM은 RS256 알고리즘을 지원합니다.
issuer

컨피덴셜 VM이 발급자 식별자로 사용하는 HTTPS 스키마입니다.

값은 https://confidentialcomputing.googleapis.com입니다.

jwks_uri

토큰 서명을 확인하는 데 사용되는 공개 키의 경로입니다. 이러한 키를 Cloud Storage 버킷에 게시할 수 있습니다.

jwks_uri 키는 https://www.googleapis.com/service_accounts/v1/metadata/jwk/signer@confidentialspace-sign.iam.gserviceaccount.com에서 확인할 수 있습니다.

값 예시는 다음과 같습니다. https://example.storage.googleapis.com/jwks.json.

response_types_supported 지원되는 컨피덴셜 VM 응답 유형 목록입니다. 컨피덴셜 VM은 id_token를 지원합니다.
scopes_supported 컨피덴셜 VM 인스턴스가 지원하는 OAuth 2.0 범위 값입니다. Confidential Space는 openid만 지원합니다.
subject_types_supported 컨피덴셜 VM에서 지원하는 주체 식별자 유형입니다. 컨피덴셜 VM은 public를 지원합니다.

지원되는 소유권 주장

다음 표에서는 증명 토큰에서 지원되는 최상위 클레임을 설명합니다.

주장 유형 설명
aud 문자열 시청자층 기본 토큰 (컨피덴셜 VM 내 런처에서 매시간 가져옴)의 경우 잠재고객은 https://sts.googleapis.com입니다. 맞춤 토큰의 경우 잠재고객이 토큰 요청의 잠재고객에서 에코됩니다. 최대 길이는 512바이트입니다.
dbgstat 문자열 하드웨어의 디버그 상태입니다. 프로덕션 이미지에서 값은 disabled-since-boot입니다. 디버그 이미지에서 값은 enabled입니다.
eat_nonce 문자열 또는 문자열 배열 증명 토큰의 nonce 1개 이상 값은 맞춤 토큰 요청에 전송된 토큰 옵션에서 에코됩니다. 각 nonce는 10~74바이트(양 끝값 포함)여야 합니다. nonce는 최대 6개까지 허용됩니다.
exp Int, Unix 타임스탬프 처리를 위해 토큰이 허용되지 않아야 하는 만료 시간입니다. 이 값은 UTC로 측정한 1970-01-01T0:0:0Z부터 만료 시간까지의 초 수를 나타내는 JSON 숫자입니다.
google_service_accounts 문자열 배열 Confidential VM 워크로드를 실행하는 확인된 서비스 계정입니다.
hwmodel 문자열

하드웨어 토큰의 고유 식별자입니다.

현재 값은 GCP_AMD_SEV, GCP_AMD_SEV_ES, GCP_SHIELDED_VM입니다.

iat Int, Unix 타임스탬프 JWT가 발급된 시간입니다. 이 값은 1970-01-01T0:0:0Z부터 문제 발생 시간까지 UTC로 측정한 초 수를 나타내는 JSON 숫자입니다.
iss 문자열 토큰의 발급기관으로, https://confidentialcomputing.googleapis.com로 설정됩니다.
nbf Int, Unix 타임스탬프 JWT를 처리에 사용할 수 없는 시간입니다.
oemid Uint64 Google 비공개 기업 번호 (PEN)로, 11129입니다.
secboot 불리언 보안 부팅이 사용 설정되어 있는지 여부. 이로 인해 VM 부팅 프로세스 중에 펌웨어와 운영체제가 인증됩니다.
sub 문자열 컨피덴셜 VM의 정규화된 가상 머신 ID인 제목입니다. 예를 들면 https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_ID입니다. 이 형식을 인스턴스의 자체 링크라고 합니다.
submods 배열 다양한 소유권 주장의 배열입니다. 하위 모드 소유권 주장을 참고하세요.
swname 문자열

VM에 대해 승인된 운영체제의 이름입니다.

값은 GCE입니다.

하위 모드 소유권 주장

다음 표에서는 증명 토큰의 submods 클레임을 설명합니다.

주장 유형 설명
gce 객체 Compute Engine 소유권 주장을 참고하세요.

Compute Engine 소유권 주장

다음 표에서는 증명 토큰의 gce 클레임을 설명합니다.

주장 유형 설명
instance_id 문자열 VM 인스턴스 ID입니다.
instance_name 문자열 VM 인스턴스 이름입니다.
project_id 문자열 VM이 실행 중인 프로젝트의 프로젝트 ID입니다.
project_number 문자열 VM이 실행 중인 프로젝트의 프로젝트 번호입니다.
zone 문자열 컨피덴셜 VM이 실행 중인 Compute Engine 영역입니다.

다음 단계