이 문서에서는 컨피덴셜 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 스키마입니다. 값은 |
jwks_uri |
토큰 서명을 확인하는 데 사용되는 공개 키의 경로입니다. 이러한 키를 Cloud Storage 버킷에 게시할 수 있습니다.
값 예시는 다음과 같습니다.
|
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 |
문자열 |
하드웨어 토큰의 고유 식별자입니다. 현재 값은 |
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에 대해 승인된 운영체제의 이름입니다. 값은 |
하위 모드 소유권 주장
다음 표에서는 증명 토큰의 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 영역입니다. |
다음 단계
증명 주장에 관한 자세한 내용은 항목 증명 토큰 (EAT)에 관한 IETF 초안을 참고하세요.
OpenID 토큰 클레임에 관한 자세한 내용은 OpenID Connect Core 1.0을 참고하세요.
토큰 및 토큰 검색에 관한 자세한 내용은 vTPM 증명 Codelab을 참고하세요.