Защитите используемые общие данные с помощью Confidential Space

Защитите используемые общие данные с помощью Confidential Space

О практической работе

subjectПоследнее обновление: авг. 1, 2024
account_circleАвторы: Priya Pandey, Jiankun Lu, Meetrajsinh Vala

1. Обзор

Confidential Space предлагает безопасный многосторонний обмен данными и совместную работу, позволяя при этом организациям сохранять конфиденциальность своих данных. Это означает, что организации могут сотрудничать друг с другом, сохраняя при этом контроль над своими данными и защищая их от несанкционированного доступа.

Конфиденциальное пространство открывает сценарии, в которых вы хотите получить взаимную выгоду от агрегирования и анализа конфиденциальных, часто регулируемых данных, сохраняя при этом полный контроль над ними. С помощью Confidential Space организации могут получить взаимную выгоду от агрегирования и анализа конфиденциальных данных, таких как личная информация (PII), защищенная медицинская информация (PHI), интеллектуальная собственность и криптографические секреты, сохраняя при этом полный контроль над ними.

Что вам понадобится

Что вы узнаете

  • Как настроить необходимые облачные ресурсы для работы Конфиденциального пространства
  • Как запустить рабочую нагрузку на конфиденциальной виртуальной машине, на которой работает образ виртуальной машины конфиденциального пространства
  • Как авторизовать доступ к защищенным ресурсам на основе атрибутов кода рабочей нагрузки ( what ), среды конфиденциального пространства ( where ) и учетной записи, под которой выполняется рабочая нагрузка ( who ).

В этой лаборатории кода вы создадите конфиденциальное пространство между Primus и Secundus Bank, чтобы определить их общих клиентов, не передавая друг другу полные списки счетов. Он включает в себя следующие шаги:

  • Шаг 1. Настройте необходимые облачные ресурсы для банков Primus и Secundus. Эти облачные ресурсы включают в себя сегменты облачного хранилища, ключи KMS, пулы удостоверений рабочей нагрузки и учетные записи служб для банков Primus и Secundus. Primus Bank и Secundus Bank хранят данные своих клиентов в сегментах Cloud Storage и шифруют данные с помощью сервисных ключей Cloud Key Management .
  • Шаг 2. Создайте учетную запись службы рабочей нагрузки, которая будет использоваться виртуальной машиной рабочей нагрузки. Secundus Bank, который будет оператором рабочей нагрузки, запустит виртуальную машину рабочей нагрузки. Primus Bank будет автором кода рабочей нагрузки.
  • Шаг 3. Создайте рабочую нагрузку, включающую две команды CLI: одну для подсчета клиентов из указанного местоположения, а другую для поиска общих клиентов Primus и Secundus Bank. Рабочая нагрузка будет создана Primus Bank и будет упакована как образ Docker. Этот образ Docker будет опубликован в реестре артефактов .
  • Шаг 4. Авторизуйте рабочую нагрузку. Primus Bank будет использовать пул идентификаторов рабочей нагрузки для авторизации рабочих нагрузок для доступа к данным своих клиентов на основе атрибутов того, кто выполняет рабочую нагрузку, что она делает и где она выполняется.
  • Шаг 5. При запуске рабочей нагрузки она запрашивает доступ к облачным ресурсам участников совместной работы с данными (Primus Bank и Secundus Bank), предлагая сервисный токен Attestation Verifier с утверждениями о рабочей нагрузке и среде. Если утверждения об измерении рабочей нагрузки в токене соответствуют условию атрибута в пулах идентификаторов рабочей нагрузки банков Primus и Secundus, он возвращает токен доступа к учетной записи службы, который имеет разрешение на доступ к соответствующим облачным ресурсам. Облачные ресурсы будут доступны только для рабочей нагрузки, выполняющейся внутри конфиденциального пространства.
  • Шаг 5(а): Запустите первую рабочую нагрузку, которая подсчитывает клиентов Примус Банка из определенных мест. Для этой рабочей нагрузки Primus Bank будет соавтором данных и автором рабочей нагрузки, который будет предоставлять зашифрованный список клиентов рабочей нагрузке, работающей в конфиденциальном пространстве. Secundus Bank будет оператором рабочей нагрузки и будет выполнять рабочую нагрузку в конфиденциальном пространстве.
  • Шаг 5(b): Запустите вторую рабочую нагрузку, которая находит обычных клиентов банков Primus и Secundus. Для этой рабочей нагрузки Primus Bank и Secundus Bank будут совместно использовать данные. Они будут предоставлять зашифрованные списки клиентов рабочей нагрузке, работающей в конфиденциальном пространстве. Secundus Bank снова станет оператором рабочей нагрузки. Эта рабочая нагрузка также будет авторизована Secundus Bank, поскольку рабочей нагрузке необходим доступ к зашифрованным спискам клиентов Secundus Bank, а также для поиска обычных клиентов. В этом случае Secundus Bank разрешит рабочей нагрузке доступ к данным своих клиентов на основе атрибутов того, кто выполняет рабочую нагрузку, что она делает и где она выполняется, как указано в шаге 4 для Primus Bank.

fdef93a6868a976.png

2. Настройка облачных ресурсов

Прежде чем начать

  • Клонируйте этот репозиторий с помощью приведенной ниже команды, чтобы получить необходимые скрипты, которые используются как часть этой лаборатории кода.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • Измените каталог для этой лаборатории кода.
cd confidential-space/codelabs/bank_data_analysis_codelab
  • Убедитесь, что вы установили необходимые переменные среды проекта, как показано ниже. Дополнительную информацию о создании проекта GCP можно найти в этой кодовой лаборатории . Вы можете обратиться к этому , чтобы получить подробную информацию о том, как получить идентификатор проекта и чем он отличается от имени проекта и номера проекта.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
  • Включите биллинг для своих проектов.
  • Включите API конфиденциальных вычислений и следующие API для обоих проектов.
gcloud services enable \
    cloudapis.googleapis.com \
    cloudkms.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • Установите переменные для имен ресурсов, как указано ниже, с помощью этой команды. Вы можете переопределить имена ресурсов, используя эти переменные (например, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' ).
  • Вы можете установить следующие переменные с существующими именами облачных ресурсов в проекте Primus. Если переменная установлена, то будет использоваться соответствующий существующий облачный ресурс из проекта Primus. Если переменная не установлена, имя облачного ресурса будет сгенерировано из имени проекта, а новый облачный ресурс будет создан как часть следующего:

$PRIMUS_INPUT_STORAGE_BUCKET

Корзина, в которой хранится файл данных клиентов Примус Банка.

$PRIMUS_WORKLOAD_IDENTITY_POOL

Пул идентификации рабочей нагрузки (WIP) Primus Bank, который проверяет утверждения.

$PRIMUS_WIP_PROVIDER

Поставщик пула удостоверений рабочей нагрузки Primus Bank, который включает условие авторизации для использования токенов, подписанных службой проверки аттестации.

$PRIMUS_SERVICE_ACCOUNT

Сервисный аккаунт Primus Bank, который $PRIMUS_WORKLOAD_IDENTITY_POOL использует для доступа к защищенным ресурсам. На этом этапе у него есть разрешение на просмотр данных о клиентах, хранящихся в корзине $PRIMUS_INPUT_STORAGE_BUCKET .

$PRIMUS_ENC_KEY

Ключ KMS, используемый для шифрования данных, хранящихся в $PRIMUS_INPUT_STORAGE_BUCKET для Primus Bank.

$PRIMUS_ENC_KEYRING

Связка ключей KMS, которая будет использоваться для создания ключа шифрования $PRIMUS_ENC_KEY для Primus Bank.

$PRIMUS_ARTIFACT_REPOSITORY

Репозиторий артефактов, куда будет помещен образ Docker рабочей нагрузки.

  • Вы можете установить следующие переменные с существующими именами облачных ресурсов в проекте Secundus. Если переменная установлена, то будет использоваться соответствующий существующий облачный ресурс из проекта Secundus. Если переменная не установлена, имя облачного ресурса будет сгенерировано из имени проекта, а новый облачный ресурс будет создан как часть следующего:

$SECUNDUS_INPUT_STORAGE_BUCKET

Корзина, в которой хранится файл данных клиентов Secundus Bank.

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Пул идентификации рабочей нагрузки (WIP) банка Secundus, который проверяет утверждения.

$SECUNDUS_WIP_PROVIDER

Поставщик пула удостоверений рабочей нагрузки Secundus Bank, который включает условие авторизации для использования токенов, подписанных службой проверки аттестации.

$SECUNDUS_SERVICE_ACCOUNT

Сервисный аккаунт Secundus Bank, который $SECUNDUS_WORKLOAD_IDENTITY_POOL использует для доступа к защищенным ресурсам. На этом этапе у него есть разрешение на просмотр данных о клиентах, хранящихся в корзине $SECUNDUS_INPUT_STORAGE_BUCKET .

$SECUNDUS_ENC_KEY

Ключ KMS, который используется для шифрования данных, хранящихся в $SECUNDUS_INPUT_STORAGE_BUCKET для Secundus Bank.

$SECUNDUS_ENC_KEYRING

Связка ключей KMS, которая используется для создания ключа шифрования $SECUNDUS_ENV_KEY для Secundus Bank.

$SECUNDUS_RESULT_STORAGE_BUCKET

Сегмент, в котором хранятся результаты рабочей нагрузки.

$WORKLOAD_IMAGE_NAME

Имя образа контейнера рабочей нагрузки.

$WORKLOAD_IMAGE_TAG

Тег образа контейнера рабочей нагрузки.

$WORKLOAD_SERVICE_ACCOUNT

Учетная запись службы, имеющая разрешение на доступ к конфиденциальной виртуальной машине, на которой выполняется рабочая нагрузка.

  • Как указано ниже, в рамках этой кодовой лаборатории используется несколько артефактов:
  • primus_customer_list.csv : файл, содержащий данные клиента Примус Банка. Вот пример файла, используемый в этой лаборатории кода.
  • secundus_customer_list.csv : файл, содержащий данные клиентов Secundus Bank. Вот пример файла, используемый в этой лаборатории кода.
  • Вам потребуются определенные разрешения для этих двух проектов:
  • Для $PRIMUS_PROJECT_ID вам понадобится администратор Cloud KMS, администратор хранилища, администратор реестра артефактов, администратор учетной записи службы, администратор пула удостоверений рабочей нагрузки IAM.
  • Для $SECUNDUS_PROJECT_ID вам понадобится администратор вычислений, администратор хранилища, администратор учетной записи службы, администратор Cloud KMS, администратор пула удостоверений рабочей нагрузки IAM, администратор безопасности (необязательно).
  • Запустите следующий сценарий , чтобы задать для оставшихся имен переменных значения, основанные на идентификаторе вашего проекта для имен ресурсов.
source config_env.sh

Настройка облачных ресурсов для Примус Банка

Для Примус Банка необходимы следующие облачные ресурсы. Запустите этот скрипт , чтобы настроить ресурсы для Primus Bank:

  • Ведро облачного хранилища ( $PRIMUS_INPUT_STORAGE_BUCKET ) для хранения зашифрованного файла данных клиентов Primus Bank.
  • Ключ шифрования ( $PRIMUS_ENC_KEY ) и связка ключей ( $PRIMUS_ENC_KEYRING ) в KMS для шифрования файла данных клиента Примус Банка.
  • Пул идентификации рабочей нагрузки ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) для проверки утверждений на основе условий атрибутов, настроенных в рамках его поставщика.
  • Учетная запись службы ( $PRIMUS_SERVICE_ACCOUNT ), прикрепленная к вышеупомянутому пулу удостоверений рабочей нагрузки ( $PRIMUS_WORKLOAD_IDENTITY_POOL ), имеет доступ для расшифровки данных с помощью ключа KMS (с использованием roles/cloudkms.cryptoKeyDecrypter ), чтения данных из сегмента облачного хранилища (с использованием роли objectViewer ) и подключение сервисной учетной записи к пулу идентификаторов рабочей нагрузки (с использованием roles/iam.workloadIdentityUser ).
./setup_primus_bank_resources.sh

Настройка облачных ресурсов для Secundus Bank

Для Secundus Bank требуются следующие облачные ресурсы. Запустите этот сценарий , чтобы настроить ресурсы Secundus Bank. В рамках этих шагов будут созданы указанные ниже ресурсы:

  • Облачное хранилище ( $SECUNDUS_INPUT_STORAGE_BUCKET ) для хранения зашифрованного файла данных клиентов Secundus Bank.
  • Ключ шифрования ( $SECUNDUS_ENC_KEY ) и связка ключей ( $SECUNDUS_ENC_KEYRING ) в KMS для шифрования файла данных Secundus Bank.
  • Пул удостоверений рабочей нагрузки ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ) для проверки утверждений на основе условий атрибутов, настроенных в рамках его поставщика.
  • Учетная запись службы ( $SECUNDUS_SERVICE_ACCOUNT ), прикрепленная к вышеупомянутому пулу идентификаторов рабочей нагрузки ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ), имеет доступ для расшифровки данных с помощью ключа KMS (с использованием roles/cloudkms.cryptoKeyDecrypter ), чтения данных из сегмента облачного хранилища (с использованием роли objectViewer ) и подключение сервисной учетной записи к пулу удостоверений рабочей нагрузки (с использованием roles/iam.workloadIdentityUser ).
  • Корзина облачного хранилища ( $SECUNDUS_RESULT_STORAGE_BUCKET ) для хранения результатов выполнения рабочей нагрузки банком Secundus.
./setup_secundus_bank_resources.sh

3. Создать рабочую нагрузку

Создать учетную запись службы рабочей нагрузки

Теперь вы создадите сервисную учетную запись для рабочей нагрузки с необходимыми ролями и разрешениями, как указано ниже. Запустите следующий сценарий , чтобы создать учетную запись службы рабочей нагрузки в проекте Secundus Bank. Виртуальная машина, на которой выполняется рабочая нагрузка, будет использовать эту учетную запись службы.

Эта учетная запись службы рабочей нагрузки ( $WORKLOAD_SERVICE_ACCOUNT ) будет иметь следующие роли:

  • Предоставьте роль confidentialcomputing.workloadUser учетной записи службы рабочей нагрузки. Это позволит учетной записи пользователя создать токен аттестации.
  • Предоставьте роль logging.logWriter разрешению учетной записи службы рабочей нагрузки. Это позволяет среде конфиденциального пространства записывать журналы в Cloud Logging в дополнение к последовательной консоли, поэтому журналы доступны после завершения работы виртуальной машины.
  • objectViewer для чтения данных из сегмента облачного хранилища $PRIMUS_INPUT_STORAGE_BUCKET .
  • objectViewer для чтения данных из сегмента облачного хранилища $SECUNDUS_INPUT_STORAGE_BUCKET .
  • objectAdmin для записи результатов рабочей нагрузки в корзину облачного хранилища $SECUNDUS_RESULT_STORAGE_BUCKET .
./create_workload_service_account.sh

Создать рабочую нагрузку

В рамках этого шага вы создадите образ Docker для рабочей нагрузки, используемой в этой лаборатории кода. Рабочая нагрузка представляет собой простое приложение GoLang, которое:

  • Подсчитывает клиентов в указанном географическом месте.
  • Находит общих клиентов Primus и Secundus Bank из списков клиентов, хранящихся в соответствующих сегментах облачного хранилища.

Запустите следующий сценарий , чтобы создать рабочую нагрузку, в которой выполняются следующие шаги:

  • Создайте реестр артефактов ( $PRIMUS_ARTIFACT_REPOSITORY ), принадлежащий Primus Bank, где будет публиковаться рабочая нагрузка.
  • Сгенерируйте код и обновите его, указав необходимые имена ресурсов. Код рабочей нагрузки, используемый в этой кодлабе, можно найти здесь .
  • Создайте код и упакуйте его в образ Docker. Соответствующий Dockerfile можно найти здесь .
  • Опубликуйте образ Docker в реестре артефактов ( $PRIMUS_ARTIFACT_REGISTRY ), принадлежащем Primus Bank.
  • Предоставьте сервисному аккаунту $WORKLOAD_SERVICE_ACCOUNT разрешение на чтение реестра артефактов ( $PRIMUS_ARTIFACT_REGISTRY ).
./create_workload.sh

4. Авторизация и запуск рабочих нагрузок

Авторизовать рабочую нагрузку

Примус Банк хочет разрешить рабочим нагрузкам доступ к данным своих клиентов на основе атрибутов следующих ресурсов:

  • Что : Код, который проверен
  • Где : Безопасная среда.
  • Кто : оператор, которому доверяют

Primus использует федерацию удостоверений рабочей нагрузки для реализации политики доступа, основанной на этих требованиях.

Объединение удостоверений рабочей нагрузки позволяет указывать условия атрибутов . Эти условия ограничивают то, какие удостоверения могут проходить проверку подлинности с помощью пула удостоверений рабочей нагрузки (WIP) . Вы можете добавить службу проверки аттестации в НЗП в качестве поставщика пула удостоверений рабочей нагрузки для представления измерений и обеспечения соблюдения политики.

Пул идентификации рабочей нагрузки уже был создан ранее на этапе настройки облачных ресурсов. Теперь Primus Bank создаст нового поставщика пула идентификации рабочей нагрузки OIDC. Указанное --attribute-condition разрешает доступ к контейнеру рабочей нагрузки. Это требует:

  • Что : Последняя версия $WORKLOAD_IMAGE_NAME загружена в репозиторий $PRIMUS_ARTIFACT_REPOSITORY .
  • Где : доверенная среда выполнения Confidential Space работает на полностью поддерживаемом образе виртуальной машины Confidential Space.
  • Кто : Сервисный аккаунт Secundus Bank $WORKLOAD_SERVICE_ACCOUNT .
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'
$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Подобно WIP, созданному для Primus Bank, Secundus Bank хочет разрешить рабочим нагрузкам доступ к данным своих клиентов на основе:

  • Что : Рабочая нагрузка.
  • Где : Конфиденциальная космическая среда.
  • Кто : учетная запись ( $WORKLOAD_SERVICE_ACCOUNT ), под которой выполняется рабочая нагрузка.

Primus Bank использует утверждение image_reference , которое включает тег изображения, чтобы определить, следует ли им разрешить доступ. Они контролируют удаленный репозиторий, поэтому могут быть уверены, что помечают только те изображения, которые не приводят к утечке их данных.

Для сравнения, Secundus Bank не контролирует репозиторий, из которого они получают образ, поэтому не могут с уверенностью сделать такое предположение. Вместо этого они решают авторизовать доступ к рабочей нагрузке на основе ее image_digest . В отличие от image_reference , который Primus Bank мог изменить, чтобы указать на другое изображение, Primus Bank не мог позволить image_digest ссылаться на изображение, отличное от того, которое Secundus Bank проверял на предыдущем этапе.

Прежде чем создавать поставщиков пула удостоверений рабочей нагрузки, мы собираем image_digest для образа контейнера рабочей нагрузки, который будет использоваться в условиях атрибута поставщика.

export WORKLOAD_IMAGE_DIGEST=$(docker images ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --no-trunc --quiet)
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'
STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == ${WORKLOAD_IMAGE_DIGEST}'&&
 assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'
$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Запуск рабочих нагрузок

В рамках этого шага Secundus Bank будет выполнять рабочую нагрузку Конфиденциального пространства. Эта рабочая нагрузка получит токены доступа из пула идентификаторов рабочей нагрузки Primus и пула идентификаторов рабочей нагрузки Secundus для чтения и расшифровки данных клиентов Primus Bank и Secundus Bank соответственно.

Обязательные аргументы TEE передаются с использованием флага метаданных. Аргументы для контейнера рабочей нагрузки передаются с использованием части флага « tee-cmd ». Результат выполнения рабочей нагрузки будет опубликован в $SECUNDUS_RESULT_STORAGE_BUCKET .

Запустите первую рабочую нагрузку

В рамках первого выполнения рабочей нагрузки рабочая нагрузка будет подсчитывать клиентов Примус Банка из указанного местоположения в аргументах контейнера рабочей нагрузки. Как показано ниже, первая рабочая нагрузка выполнит команду count-location , а результат будет сохранен в $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result .

gcloud config set project $SECUNDUS_PROJECT_ID

gcloud compute instances create first-workload-cvm \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""

Посмотреть результаты

В проекте Secundus просмотрите результаты первой рабочей нагрузки. Подождите 3–5 минут, пока рабочая нагрузка завершит выполнение и результат станет доступен в сегменте облачного хранилища.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Результатом должно быть 3 , так как именно это количество людей из Сиэтла указано в файле primus_customer_list.csv !

Запустить вторую рабочую нагрузку

В рамках выполнения второй нагрузки мы найдем общих клиентов Примус Банка и Секундус Банка. Как показано ниже, вторая рабочая нагрузка выполнит команду list-common-customers , а результат будет сохранен в $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count .

gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create second-workload-cvm \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
  --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Посмотреть результаты

В проекте Secundus просмотрите результаты второй рабочей нагрузки. Подождите 3–5 минут, пока рабочая нагрузка завершит выполнение и результат станет доступен в сегменте облачного хранилища.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

В результате должен получиться следующий список, поскольку это общие клиенты Primus и Secundus Bank.

Выход:

Eric
Clinton
Ashley
Cooper

Запуск несанкционированной рабочей нагрузки

Срок действия контракта Primus Bank, разрешающего Secundus Bank доступ к их данным, истекает. Поэтому Primus Bank обновляет условие своего атрибута, чтобы разрешить виртуальным машинам использовать сервисную учетную запись от своего нового партнера, Tertius Bank.

Primus Bank меняет провайдера Workload Identity Pool

В $PRIMUS_PROJECT_ID обновите условие атрибута для поставщика удостоверений Attestation Verifier, чтобы авторизовать рабочие нагрузки в новом месте.

  1. Установите для проекта значение $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. Экспортируйте идентификатор проекта GCP Tertius Bank, используя приведенную ниже команду. Позже Primus Bank будет использовать это для обновления состояния атрибутов провайдера пула идентификации рабочей нагрузки. Примус банк не прекратит авторизацию счетов для обслуживания рабочей нагрузки Secundus Bank. Теперь будут разрешены учетные записи для обслуживания рабочей нагрузки Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. Обновите поставщика OIDC в ​​пуле удостоверений рабочей нагрузки. Здесь '$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts изменено на '$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts. Вместо авторизации учетной записи службы рабочей нагрузки от Secundus Bank теперь будет авторизоваться учетная запись службы рабочей нагрузки от Tertius Bank.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'
$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

Перезапустите рабочую нагрузку

Когда Secundus Bank пытается выполнить исходную рабочую нагрузку, это терпит неудачу. Чтобы просмотреть ошибку, удалите исходный файл результатов и экземпляр виртуальной машины, а затем попробуйте снова запустить рабочую нагрузку.

Удалить существующий файл результатов и экземпляр виртуальной машины.

  1. Установите проект $SECUNDUS_PROJECT_ID .
gcloud config set project $SECUNDUS_PROJECT_ID
  1. Удалите файл результатов.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
  1. Удалите экземпляр конфиденциальной виртуальной машины.
gcloud compute instances delete second-workload-cvm

Запустите несанкционированную рабочую нагрузку:

gcloud compute instances create second-workload-cvm \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=TERMINATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE}\
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

Посмотреть ошибку

Вместо результатов рабочей нагрузки вы видите ошибку ( The given credential is rejected by the attribute condition ).

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

Аналогично этому, если Primus Bank тайно изменит рабочую нагрузку, чтобы отправить весь список клиентов Secundus Bank в корзину, принадлежащую Primus Bank, то эта попытка потерпит неудачу, поскольку дайджест вредоносной рабочей нагрузки будет отличаться от дайджеста изображения, которое было разрешено в пуле идентификации рабочей нагрузки Secundus Bank. .

5. Очистить

Вот сценарий, который можно использовать для очистки ресурсов, которые мы создали в рамках этой лаборатории кода. В рамках этой очистки будут удалены следующие ресурсы:

  • Входной сегмент облачного хранилища Primus Bank ( $PRIMUS_INPUT_STORAGE_BUCKET) .
  • Сервис-счет Примус Банка ( $PRIMUS_SERVICE_ACCOUNT ).
  • Реестр артефактов Primus Bank, в котором хранятся подписи изображений ( $PRIMUS_COSIGN_REPOSITORY ).
  • Пул идентификации рабочей нагрузки Primus Bank ( $PRIMUS_WORKLOAD_IDENTITY_POOL ).
  • Учетная запись службы рабочей нагрузки Secundus Bank ( $WORKLOAD_SERVICE_ACCOUNT ).
  • Входной сегмент облачного хранилища Secundus Bank ( $SECUNDUS_INPUT_STORAGE_BUCKET) .
  • Сервисный счет банка Secundus ( $SECUNDUS_SERVICE_ACCOUNT ).
  • Реестр артефактов Secundus Bank, в котором хранятся подписи изображений ( $SECUNDUS_COSIGN_REPOSITORY ).
  • Пул идентификаторов рабочей нагрузки Secundus Bank ( $SECUNDUS_WORKLOAD_IDENTITY_POOL ).
  • Учетная запись службы рабочей нагрузки Secundus Bank ( $WORKLOAD_SERVICE_ACCOUNT ).
  • Экземпляры вычислений рабочей нагрузки.
  • Сегмент хранения результатов Secundus Bank ( $SECUNDUS_RESULT_STORAGE_BUCKET ).
  • Репозиторий артефактов Primus Bank ( $PRIMUS_ARTIFACT_REPOSITORY ).
./cleanup.sh

Если вы закончили изучение, рассмотрите возможность удаления проекта.

  • Перейдите в консоль облачной платформы .
  • Выберите проект, который хотите закрыть, затем нажмите «Удалить» вверху: это запланирует удаление проекта.

Поздравления

Поздравляем, вы успешно завершили работу над кодом!

Вы узнали, как защитить общие данные, сохраняя при этом их конфиденциальность, с помощью Конфиденциального пространства.

Что дальше?

Посмотрите некоторые из этих похожих лабораторий кода...

Дальнейшее чтение