증명 어설션


증명 어설션 사용에 관한 자세한 내용은 증명 정책 만들기를 참고하세요.

다음 표에서는 증명 정책을 구성하는 데 사용할 수 있는 어설션을 자세히 보여줍니다. Confidential Space 이미지, 워크로드 컨테이너, VM에서 실행한 어설션을 검증할 수 있습니다.

이미지 어설션

어설션 유형 설명

assertion.dbgstat

다음과 상호작용:

정의된 문자열

Confidential Space 이미지가 디버그 또는 프로덕션 버전인지 확인합니다.

유효한 값은 다음과 같습니다.

  • enable: 디버그 이미지가 사용 중인지 확인합니다.
  • disabled-since-boot: 프로덕션 이미지가 사용되고 있는지 확인합니다.
예시

다음 코드는 Confidential Space 이미지의 디버그 버전이 사용 중인지 확인합니다.

assertion.dbgstat == "enable"

다음 코드는 Confidential Space 이미지의 프로덕션 버전이 사용 중인지 확인합니다.

assertion.dbgstat == "disabled-since-boot"
assertion.submods.confidential_space.support_attributes 문자열 배열

TEE의 보안 버전이 프로덕션 Confidential Space 이미지인지 확인합니다. 디버그 Confidential Space 이미지에는 설정된 지원 속성이 없습니다.

지원 속성은 세 가지입니다.

  • LATEST: 최신 버전의 이미지이며 지원됩니다. LATEST 이미지는 STABLEUSABLE이기도 합니다.
  • STABLE: 이 버전의 이미지는 지원이 제공되며 취약점이 모니터링됩니다. STABLE 이미지도 USABLE입니다.
  • USABLE: 이 속성만 있는 이미지는 지원이 중단되어 더 이상 취약점이 모니터링되지 않습니다. 사용에 따른 책임은 사용자에게 있습니다.
예시

다음 코드는 안정적인 버전의 Confidential Space 이미지가 사용 중인지 확인합니다.

"STABLE" in assertion.submods.confidential_space.support_attributes
assertion.swname 정의된 문자열

증명 항목에서 실행되는 소프트웨어를 확인합니다. 이 값은 항상 CONFIDENTIAL_SPACE입니다.

예시
assertion.swname == "CONFIDENTIAL_SPACE"
assertion.swversion 문자열 배열

Confidential Space 이미지의 소프트웨어 버전을 확인합니다. 최신 버전의 이미지를 타겟팅하려면 대신 assertion.submods.confidential_space.support_attributes를 사용하는 것이 좋습니다.

예시
int(assertion.swversion[0]) == 230103

컨테이너 어설션

어설션 유형 설명

assertion.submods.container.cmd_override

다음과 상호작용:

문자열 배열

워크로드 이미지에 사용되는 CMD 명령어 및 매개변수를 확인합니다.

예시

다음 코드는 워크로드 이미지의 CMD가 덮어쓰지 않았는지 확인합니다.

size(assertion.submods.container.cmd_override) == 0

다음 코드는 program가 CMD 재정의의 유일한 콘텐츠인지 확인합니다.

assertion.submods.container.cmd_override == ['program']

assertion.submods.container.env

다음과 상호작용:

JSON 개체

환경 변수 및 해당 값이 컨테이너로 명시적으로 전달되었는지 확인합니다.

예시

다음 코드는 환경 변수 example-env-1value-1로 설정되었고 example-env-2value-2로 설정되었는지 확인합니다.

assertion.submods.container.env == {"example-env-1": "value-1", "example-env-2": "value-2"}

assertion.submods.container.env_override

다음과 상호작용:

문자열

워크로드 운영자가 컨테이너에서 환경 변수를 덮어썼는지 확인합니다.

예시

다음 코드는 워크로드 운영자가 example 환경 변수를 재정의하지 않았는지 확인합니다.

!has(assertion.submods.container.env_override.example)

다음 코드는 워크로드 운영자가 환경 변수를 덮어쓰지 않았는지 확인합니다.

size(assertion.submods.container.env_override) == 0
assertion.submods.container.image_digest 문자열

워크로드 컨테이너의 이미지 다이제스트를 확인합니다. 이 조건을 지정하면 여러 당사자가 자신의 데이터에 액세스하도록 승인된 워크로드에 동의할 수 있습니다.

예시
assertion.submods.container.image_digest == "sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b"
assertion.submods.container.image_id 문자열

워크로드 컨테이너의 이미지 ID를 확인합니다.

예시
assertion.submods.container.image_id == "sha256:652a44b0e911271ba07cf2915cd700fdfa50abd62a98f87a57fdebc59843d93f"

assertion.submods.container.image_reference

다음과 상호작용:

문자열

Confidential Space 이미지 위에 실행되는 워크로드 컨테이너의 위치를 확인합니다.

예시
assertion.submods.container.image_reference == "us-docker.pkg.dev/PROJECT_ID/WORKLOAD_CONTAINER:latest"

assertion.submods.container.image_signatures

다음과 상호작용:

JSON 개체

이미지에 특정 서명이 있거나 공개 키 및 서명 알고리즘으로 서명되었는지 확인합니다. 이 조건을 지정하면 여러 당사자가 자신의 데이터에 액세스하도록 승인된 워크로드에 동의할 수 있습니다.

어설션에는 다음 요소가 포함될 수 있습니다.

  • key_id: 공개 키의 16진수 디지털 지문입니다. 지문을 가져오려면 다음 명령어를 실행하면 됩니다.

    openssl pkey -pubin -in public_key.pem -outform DER | openssl sha256

    여기서 public_key.pem는 PEM 형식의 공개 키입니다.

  • signature: 서명된 컨테이너와 연결되어 있고 간단한 서명 형식을 따르는 페이로드의 서명입니다.
  • signature_algorithm: 키에 서명하는 데 사용되는 알고리즘입니다. 다음 중 하나입니다.

    • RSASSA_PSS_SHA256 (SHA-256 다이제스트가 있는 RSASSA-PSS)
    • RSASSA_PKCS1V15_SHA256 (SHA-256 다이제스트가 있는 RSASSA-PKCS1 v1_5)
    • ECDSA_P256_SHA256 (SHA-256 다이제스트가 있는 P-256 곡선의 ECDSA)
예시
assertion.swname == 'CONFIDENTIAL_SPACE' && ['ECDSA_P256_SHA256:PUBLIC_KEY_FINGERPRINT'].exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig, sig.signature_algorithm+':'+sig.key_id)) && 'serviceaccount.iam.gserviceaccount.com' in assertion.google_service_accounts"

assertion.submods.container.restart_policy

다음과 상호작용:

정의된 문자열

워크로드가 중지될 때 컨테이너 런처의 다시 시작 정책을 확인합니다.

유효한 값은 다음과 같습니다.

  • Never(기본)
  • Always
  • OnFailure
예시
assertion.submods.container.restart_policy == "Never"

VM 어설션

어설션 유형 설명

assertion.google_service_accounts

다음과 상호작용:

문자열 배열

지정된 서비스 계정이 워크로드를 실행하는 VM에 연결되었는지 또는 VM 메타데이터에서 tee-impersonate-service-accounts 를 사용하여 나열되었는지 확인합니다.

예시
workload-service-account@my-project.iam.gserviceaccount.com in assertion.google_service_accounts
assertion.hwmodel 문자열

기본 컨피덴셜 컴퓨팅 기술을 확인합니다. 지원되는 플랫폼은 다음과 같습니다.

예시
assertion.hwmodel == "GCP_AMD_SEV"

assertion.submods.confidential_space.monitoring_enabled

다음과 상호작용:

불리언

증명 항목의 모니터링 상태를 확인합니다.

예시
assertion.submods.confidential_space.monitoring_enabled.memory == true
assertion.submods.gce.instance_id 문자열

VM 인스턴스 ID를 확인합니다.

예시
assertion.submods.gce.instance_id == "0000000000000000000"
assertion.submods.gce.instance_name 문자열

VM 인스턴스 이름을 확인합니다.

예시
assertion.submods.gce.instance_name == "workload-vm"
assertion.submods.gce.project_id 문자열

VM이 지정된 프로젝트 ID로 Google Cloud 프로젝트를 실행하는지 확인합니다.

예시
assertion.submods.gce.project_id == "project-id"
assertion.submods.gce.project_number 문자열

지정된 프로젝트 번호로 Google Cloud 프로젝트에서 VM이 실행 중인지 확인합니다.

예시
assertion.submods.gce.project_number == "00000000000"

assertion.submods.gce.zone

다음과 상호작용:

  • 워크로드 운영자: --zone 값입니다.
문자열

VM이 지정된 영역에서 실행 중인지 확인합니다.

예시
assertion.submods.gce.zone == "us-central1-a"