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

1. Обзор

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

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

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

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

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

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

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

fdef93a6868a976.png

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

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

  • Клонируйте этот репозиторий, используя приведенную ниже команду, чтобы получить необходимые скрипты, используемые в рамках этого практического занятия.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • Измените каталог для этого практического занятия.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • Убедитесь, что вы установили необходимые переменные среды проекта, как показано ниже. Для получения дополнительной информации о создании проекта GCP обратитесь к этому руководству . Вы можете обратиться к нему , чтобы узнать подробности о том, как получить идентификатор проекта и чем он отличается от имени проекта и номера проекта.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
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 Bank.

$PRIMUS_WORKLOAD_IDENTITY_POOL

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

$PRIMUS_WIP_PROVIDER

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

$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.

$SECUNDUS_WORKLOAD_IDENTITY_POOL

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

$SECUNDUS_WIP_PROVIDER

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

$SECUNDUS_SERVICE_ACCOUNT

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

$SECUNDUS_ENC_KEY

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

$SECUNDUS_ENC_KEYRING

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

$SECUNDUS_RESULT_STORAGE_BUCKET

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

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICE_ACCOUNT

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

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

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

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

  • Облачное хранилище ( $PRIMUS_INPUT_STORAGE_BUCKET ) для хранения зашифрованного файла с данными клиентов Primus Bank.
  • Ключ шифрования ( $PRIMUS_ENC_KEY ) и связка ключей ( $PRIMUS_ENC_KEYRING ) в KMS для шифрования файла данных клиентов Primus Bank.
  • Пул идентификаторов рабочей нагрузки ( $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 требуются следующие облачные ресурсы. Запустите этот скрипт для настройки ресурсов банка Secundus. В ходе этих шагов будут созданы указанные ниже ресурсы:

  • Облачное хранилище ( $SECUNDUS_INPUT_STORAGE_BUCKET ) для хранения зашифрованного файла с данными клиентов банка Secundus.
  • Ключ шифрования ( $SECUNDUS_ENC_KEY ) и связка ключей ( $SECUNDUS_ENC_KEYRING ) в KMS для шифрования файла данных банка Secundus.
  • Пул идентификаторов рабочей нагрузки ( $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 . Это позволит среде Confidential Space записывать журналы в 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 Bank хочет разрешить рабочим нагрузкам доступ к данным клиентов на основе атрибутов следующих ресурсов:

  • Что : Проверяемый код
  • Где : В безопасной среде
  • Кто : Оператор, которому можно доверять.

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

Федерация идентификации рабочей нагрузки позволяет задавать условия атрибутов . Эти условия ограничивают круг лиц, которые могут проходить аутентификацию в пуле идентификации рабочей нагрузки (WIP) . Вы можете добавить службу проверки аттестации (Attestation Verifier Service) в WIP в качестве поставщика пула идентификации рабочей нагрузки для представления результатов измерений и обеспечения соблюдения политики.

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

  • Что : Последнее изображение $WORKLOAD_IMAGE_NAME , загруженное в репозиторий $PRIMUS_ARTIFACT_REPOSITORY .
  • Где : Доверенная среда выполнения Confidential Space работает на полностью поддерживаемом образе виртуальной машины Confidential Space.
  • Кто : Сервисный счет $WORKLOAD_SERVICE_ACCOUNT в банке Secundus.
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"

Аналогично проекту, разработанному для 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=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
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 запустит рабочую нагрузку в Confidential Space. Эта рабочая нагрузка получит токены доступа из пула идентификаторов рабочей нагрузки Primus и пула идентификаторов рабочей нагрузки Secundus для чтения и расшифровки данных клиентов Primus Bank и Secundus Bank соответственно.

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

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

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

gcloud compute instances create ${WORKLOAD_VM1} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --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 !

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

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

gcloud compute instances create ${WORKLOAD_VM2} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --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 вносит изменения в поставщика пула идентификационных данных для рабочих нагрузок.

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

  1. Установите проект в значение $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. Экспортируйте идентификатор проекта GCP банка Tertius, используя приведенную ниже команду. Позже банк Primus будет использовать его для обновления условий атрибутов поставщика пула идентификаторов рабочей нагрузки. Банк Primus не прекратит авторизацию учетных записей службы рабочей нагрузки банка Secundus. Теперь он разрешит авторизацию учетных записей службы рабочей нагрузки банка Tertius.
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/list-common-result
  1. Удалите экземпляр конфиденциальной виртуальной машины.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

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

gcloud compute instances create ${WORKLOAD_VM2} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --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/list-common-result

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

5. Уборка

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

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

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

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

Поздравляем!

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

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

Что дальше?

Посмотрите похожие обучающие материалы по программированию...

Дополнительная информация