์๊ฒฌ ๋ณด๋ด๊ธฐ
์ฆ๋ช
์ด์ค์
์ปฌ๋ ์
์ ์ฌ์ฉํด ์ ๋ฆฌํ๊ธฐ
๋ด ํ๊ฒฝ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ฝํ
์ธ ๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฅํ์ธ์.
์ฆ๋ช
์ด์ค์
์ฌ์ฉ์ ๋ํด ์์ธํ ์์๋ณด๋ ค๋ฉด ์ฆ๋ช
์ ์ฑ
๋ง๋ค๊ธฐ ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
๋ค์ ํ์์๋ ์ฆ๋ช
์ ์ฑ
์ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ด์ค์
์ ์์ธํ ๋ณด์ฌ์ค๋๋ค. ์ ์ฑ
์ 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 ์ด๋ฏธ์ง์๋ ์ค์ ๋ ์ง์ ์์ฑ์ด ์์ต๋๋ค.
์ง์ ์์ฑ์ 3๊ฐ์ง์
๋๋ค.
LATEST
: ์ต์ ๋ฒ์ ์ ์ด๋ฏธ์ง์ด๋ฉฐ ์ง์์ด ์ ๊ณต๋ฉ๋๋ค. LATEST
์ด๋ฏธ์ง๋ STABLE
๋ฐ USABLE
์ด๊ธฐ๋ ํฉ๋๋ค.
STABLE
: ์ด ๋ฒ์ ์ ์ด๋ฏธ์ง๋ ์ง์์ด ์ ๊ณต๋๋ฉฐ ์ทจ์ฝ์ ์ด ๋ชจ๋ํฐ๋ง๋ฉ๋๋ค. STABLE
์ด๋ฏธ์ง๋ USABLE
์
๋๋ค.
USABLE
: ์ด ์์ฑ๋ง ์๋ ์ด๋ฏธ์ง๋ ์ง์์ด ์ค๋จ๋์ด ๋ ์ด์ ์ทจ์ฝ์ ์ด ๋ชจ๋ํฐ๋ง๋์ง ์์ต๋๋ค. ์ฌ์ฉ์ ๋ฐ๋ฅธ ์ฑ
์์ ์ฌ์ฉ์์๊ฒ ์์ต๋๋ค.
EXPERIMENTAL
: ์ด ์์ฑ๋ง ์๋ ์ด๋ฏธ์ง๋ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ธฐ๋ฅ์ ์ฌ์ฉํฉ๋๋ค. ํ
์คํธ์ฉ์ผ๋ก๋ง ์ฌ์ฉ๋๋ฉฐ ํ๋ก๋์
์ ์ฌ์ฉํด์๋ ์ ๋ฉ๋๋ค. EXPERIMENTAL
์ด๋ฏธ์ง๋ LATEST
, STABLE
๋๋ USABLE
์์ฑ์ ๊ฐ์ง ์์ต๋๋ค.
์ฃผ์ : ์ปจํผ๋ด์
์คํ์ด์ค ๊ธฐ๋ณธ ํ ํฐ์ ๋งค์๊ฐ ์๋ก๊ณ ์นจ๋๋ฏ๋ก ์ฅ๊ธฐ ์คํ ์ํฌ๋ก๋์๋ LATEST
๋ฅผ ์ง์ ํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ํฌ๋ก๋๊ฐ ์คํ๋๋ ๋์ Confidential Space ์ด๋ฏธ์ง๊ฐ ์
๋ฐ์ดํธ๋ ์ ์์ต๋๋ค. ์ฆ, ์ํฌ๋ก๋๊ฐ ๋ ์ด์ ์ต์ ๋ฒ์ ์ด ์๋๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ ์ฆ๋ช
์ ์คํจํฉ๋๋ค.
์
๋ค์ ์ฝ๋๋ ์์ ์ ์ธ ๋ฒ์ ์ 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
์ํธ์์ฉ:
์ํฌ๋ก๋ ์์ฑ์ :
allow_cmd_override
์คํ ์ ์ฑ
์
๋๋ค.
์ํฌ๋ก๋ ์ฐ์ฐ์ :
tee-cmd
๋ฉํ๋ฐ์ดํฐ ๋ณ์์
๋๋ค.
๋ฌธ์์ด ๋ฐฐ์ด
์ํฌ๋ก๋ ์ด๋ฏธ์ง์ ์ฌ์ฉ๋๋
CMD ๋ช
๋ น์ด ๋ฐ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ธํฉ๋๋ค.
์์
๋ค์ ์ฝ๋๋ ์ํฌ๋ก๋ ์ด๋ฏธ์ง์ CMD๋ฅผ ๋ฎ์ด์ฐ์ง ์์๋์ง ํ์ธํฉ๋๋ค.
size(assertion.submods.container.cmd_override) == 0
๋ค์ ์ฝ๋๋ program
๊ฐ CMD ์ฌ์ ์์์ ์ ์ผํ ์ฝํ
์ธ ์ธ์ง ํ์ธํฉ๋๋ค.
assertion.submods.container.cmd_override == ['program']
assertion.submods.container.env
์ํธ์์ฉ:
JSON ๊ฐ์ฒด
ํ๊ฒฝ ๋ณ์ ๋ฐ ํด๋น ๊ฐ์ด ์ปจํ
์ด๋๋ก ๋ช
์์ ์ผ๋ก ์ ๋ฌ๋์๋์ง ํ์ธํฉ๋๋ค.
์
๋ค์ ์ฝ๋๋ ํ๊ฒฝ ๋ณ์ example-env-1
์ด value-1
๋ก ์ค์ ๋์๊ณ example-env-2
๊ฐ value-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
(P-256 ๊ณก์ ์ ECDSA, SHA-256 ๋ค์ด์ ์คํธ)
์
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
๋ฌธ์์ด
VM์ด ์ง์ ๋ ํ๋ก์ ํธ ๋ฒํธ๋ก Google Cloud ํ๋ก์ ํธ์์ ์คํ๋๋์ง ํ์ธํฉ๋๋ค.
์
assertion.submods.gce.project_number == "00000000000"
assertion.submods.gce.zone
์ํธ์์ฉ:
์ํฌ๋ก๋ ์ด์์ :
--zone
๊ฐ์
๋๋ค.
๋ฌธ์์ด
VM์ด ์ง์ ๋ ์์ญ์์ ์คํ๋๋์ง ํ์ธํฉ๋๋ค.
์
assertion.submods.gce.zone == "us-central1-a"
assertion.submods.nvidia_gpu.cc_mode
์ํธ์์ฉ:
์ ์๋ ๋ฌธ์์ด
NVIDIA์ ์ปจํผ๋ด์
์ปดํจํ
๋๋ผ์ด๋ฒ ์ํ๋ฅผ ํ์ธํฉ๋๋ค.
์ ํจํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
OFF
: NVIDIA ์ปจํผ๋ด์
์ปดํจํ
๊ธฐ๋ฅ์ด ํ์ฑํ๋์ด ์์ง ์์ต๋๋ค.
ON
: NVIDIA H100 ํ๋์จ์ด, ํ์จ์ด, ์ํํธ์จ์ด์์ ์ปจํผ๋ด์
์ปดํจํ
๊ธฐ๋ฅ์ ์์ ํ ํ์ฑํํ์ต๋๋ค.
DEVTOOLS
: GPU๊ฐ ON
๋ชจ๋์ ์ํฌํ๋ก์ ์ผ์นํ์ง๋ง ๋ณด์ ๋ณดํธ๋ฅผ ์ฌ์ฉ ์ค์งํ๋ ๋ถ๋ถ ์ปจํผ๋ด์
์ปดํจํ
๋ชจ๋์ ์์ต๋๋ค.
์
assertion.submods.nvidia_gpu.cc_mode == "ON"
์๊ฒฌ ๋ณด๋ด๊ธฐ
๋ฌ๋ฆฌ ๋ช
์๋์ง ์๋ ํ ์ด ํ์ด์ง์ ์ฝํ
์ธ ์๋ Creative Commons Attribution 4.0 ๋ผ์ด์ ์ค ์ ๋ฐ๋ผ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋๋ฉฐ, ์ฝ๋ ์ํ์๋ Apache 2.0 ๋ผ์ด์ ์ค ์ ๋ฐ๋ผ ๋ผ์ด์ ์ค๊ฐ ๋ถ์ฌ๋ฉ๋๋ค. ์์ธํ ๋ด์ฉ์ Google Developers ์ฌ์ดํธ ์ ์ฑ
์ ์ฐธ์กฐํ์ธ์. ์๋ฐ๋ Oracle ๋ฐ/๋๋ Oracle ๊ณ์ด์ฌ์ ๋ฑ๋ก ์ํ์
๋๋ค.
์ต์ข
์
๋ฐ์ดํธ: 2025-09-02(UTC)
์๊ฒฌ์ ์ ๋ฌํ๊ณ ์ถ๋์?
[[["์ดํดํ๊ธฐ ์ฌ์","easyToUnderstand","thumb-up"],["๋ฌธ์ ๊ฐ ํด๊ฒฐ๋จ","solvedMyProblem","thumb-up"],["๊ธฐํ","otherUp","thumb-up"]],[["์ดํดํ๊ธฐ ์ด๋ ค์","hardToUnderstand","thumb-down"],["์๋ชป๋ ์ ๋ณด ๋๋ ์ํ ์ฝ๋","incorrectInformationOrSampleCode","thumb-down"],["ํ์ํ ์ ๋ณด/์ํ์ด ์์","missingTheInformationSamplesINeed","thumb-down"],["๋ฒ์ญ ๋ฌธ์ ","translationIssue","thumb-down"],["๊ธฐํ","otherDown","thumb-down"]],["์ต์ข
์
๋ฐ์ดํธ: 2025-09-02(UTC)"],[[["\u003cp\u003eAttestation policies can validate assertions made by the Confidential Space image, the workload container, and the VM, using a variety of assertions.\u003c/p\u003e\n"],["\u003cp\u003eImage assertions, such as \u003ccode\u003eassertion.dbgstat\u003c/code\u003e and \u003ccode\u003eassertion.submods.confidential_space.support_attributes\u003c/code\u003e, verify the software version and security attributes of the Confidential Space image.\u003c/p\u003e\n"],["\u003cp\u003eContainer assertions, such as \u003ccode\u003eassertion.submods.container.cmd_override\u003c/code\u003e and \u003ccode\u003eassertion.submods.container.env\u003c/code\u003e, verify the configuration and integrity of the workload container, including environment variables and command overrides.\u003c/p\u003e\n"],["\u003cp\u003eVM assertions, including \u003ccode\u003eassertion.google_service_accounts\u003c/code\u003e and \u003ccode\u003eassertion.hwmodel\u003c/code\u003e, verify details about the virtual machine environment, such as service accounts, hardware model, and project information.\u003c/p\u003e\n"],["\u003cp\u003eThe table provided lists a multitude of assertions that can be used to create and enforce an attestation policy, with each assertion's type and a specific description.\u003c/p\u003e\n"]]],[],null,[]]