기밀 리소스 만들기 및 액세스 권한 부여


데이터 공동작업자는 기밀 데이터에 워크로드에서 액세스할 수 있도록 다음 리소스를 설정해야 합니다.

또한 데이터 공동작업자는 Confidential Space 워크로드의 결과가 저장되는 위치와 표시되는 데이터가 고유한지 또는 공유되는지 여부를 선택해야 합니다. 예를 들어 각 데이터 공동작업자에게 속한 여러 Cloud Storage 버킷에 동일한 결과를 출력할 수 있습니다.

데이터 저장

데이터를 저장하는 Google Cloud 서비스를 사용하여 기밀 데이터를 호스팅할 수 있습니다. 예를 들어 다음 서비스 중 하나를 사용할 수 있습니다.

내장 기능을 사용하든 Cloud Key Management Service (Cloud KMS)와 같은 도구를 사용하든 이 데이터가 저장 중에 암호화되어 있는지 확인해야 합니다.

기밀 데이터를 복호화할 서비스 계정 만들기

서비스 계정을 통해 기밀 데이터를 Confidential Space 워크로드에 제공하고 이러한 데이터에 대한 사용자 노출을 줄입니다.

예를 들어 Cloud KMS로 Cloud Storage의 기밀 파일을 암호화한 다음 해당 데이터 및 복호화 키에 액세스할 수 있는 권한이 있는 서비스 계정을 만듭니다.

그런 다음 해당 서비스 계정을 WIP에 연결합니다. 그러면 다른 프로젝트에 기반한 승인된 기밀 정보 워크로드는 이 WIP를 사용하여 데이터를 복호화하는 서비스 계정을 가장하고, 복호화된 데이터를 검색하고, 처리할 수 있습니다.

기밀 데이터를 복호화하고 이를 처리하는 작업에 모두 서비스 계정이 사용되기 때문에 기밀 데이터 가시성이 해당 소유자로 제한됩니다. 워크로드는 컨피덴셜 VM에서 실행되므로 하드웨어 기반 메모리 암호화를 통해 데이터가 사용 중에도 비공개로 유지됩니다. 프로덕션 Confidential Space 이미지를 사용하는 워크로드 VM에서도 SSH가 사용 중지되므로 VM이 실행되는 동안 아무도 VM에 액세스할 수 없습니다.

예시는 첫 번째 비공개 스페이스 환경 만들기를 참고하세요.

증명 유효성 검사를 위한 WIP 및 제공업체 만들기

신뢰할 수 없는 워크로드 운영자로부터 데이터를 보호하기 위해 Confidential Space는 워크로드 이미지 또는 TEE에 대한 수정 사항을 감지하는 증명 프로세스를 구현합니다. 이 프로세스는 보안 VM 신중한 부팅과 확장 런타임 측정을 기반으로 하며, Virtual Trusted Platform Module(vTPM) 기기에서 보호되는 확장 전용 등록의 부팅 시퀀스 측정을 캡처합니다.

Confidential Space 증명 서비스는 공급자에 대해 속성 조건으로 추가된 정책에 따라 검사를 수행하는 WIP로 검증할 수 있는 형식으로 이러한 vTPM 증명이 포함된 OpenID Connect(OIDC) 토큰을 생성합니다. 이러한 토큰은 Google에서 서명되고 한 시간 후 자동으로 새로고침됩니다.

WIP에서 워크로드를 승인하면 워크로드는 프로젝트의 서비스 계정을 가장하여 기밀 데이터를 복호화하고 검색할 수 있습니다.

WIP 및 제공업체를 설정하려면 다음 안내를 따르세요.

  1. WIP를 만듭니다.

  2. iam.workloadIdentityUser 역할로 복호화 서비스 계정을 WIP에 연결합니다.

  3. 다음 세부정보를 사용하여 OIDC 공급업체를 만듭니다.

    • 발급기관 URI https://confidentialcomputing.googleapis.com/

    • 허용된 https://sts.googleapis.com 잠재고객입니다.

    • 값이 assertion.subgoogle.subject의 제공업체 속성 매핑

    • 워크로드의 증명을 확인하는 데 사용되는 속성 조건입니다. 사용 가능한 옵션은 증명 정책 만들기를 참고하세요.

증명 정책 만들기

WIP를 만드는 과정에서 속성 조건을 추가합니다. 속성 조건은 워크로드가 데이터에 액세스할 수 있도록 통과해야 하는 조건입니다. Confidential Space의 경우 이러한 속성 조건이 증명 정책을 구성합니다.

정책은 Common Expression Language(CEL)로 작성되며 && 연산자로 연결할 수 있는 일련의 어설션으로 구성됩니다.

정책을 정의하는 attribute-condition 옵션과 함께 gcloud CLI를 사용하여 워크로드 ID 풀에 공급자를 추가하는 예시는 다음과 같습니다.

gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
    --location=global \
    --workload-identity-pool=user-pool-name \
    --issuer-uri="https://confidentialcomputing.googleapis.com/" \
    --allowed-audiences="https://sts.googleapis.com" \
    --attribute-mapping="google.subject=assertion.sub" \
    --attribute-condition="assertion.submods.container.image_digest =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"

이 예시에서는 워크로드 아이덴티티 풀에 연결된 서비스 계정을 가장하려고 시도하는 외부 ID가 다음 세부정보를 증명하고 일치시켜야 합니다.

  • 워크로드 컨테이너의 이미지 다이제스트

  • 워크로드 VM에 연결된 서비스 계정의 주소

  • CONFIDENTIAL_SPACE는 모든 보안 보장이 내장된 VM에서 실행되는 소프트웨어입니다.

  • 프로덕션 Confidential Space 이미지 지원 속성

증명 어설션

다음 표에서는 증명 정책을 구성하는 데 사용할 수 있는 어설션을 자세히 보여줍니다. 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"