О практической работе
1. Обзор
Confidential Space предлагает безопасный многосторонний обмен данными и совместную работу, позволяя при этом организациям сохранять конфиденциальность своих данных. Это означает, что организации могут сотрудничать друг с другом, сохраняя при этом контроль над своими данными и защищая их от несанкционированного доступа.
Конфиденциальное пространство открывает сценарии, в которых вы хотите получить взаимную выгоду от агрегирования и анализа конфиденциальных, часто регулируемых данных, сохраняя при этом полный контроль над ними. С помощью Confidential Space организации могут получить взаимную выгоду от агрегирования и анализа конфиденциальных данных, таких как личная информация (PII), защищенная медицинская информация (PHI), интеллектуальная собственность и криптографические секреты, сохраняя при этом полный контроль над ними.
Что вам понадобится
- Проект облачной платформы Google
- Браузер, например Chrome или Firefox.
- Базовые знания Google Compute Engine ( кодовая лаборатория ), конфиденциальной виртуальной машины , контейнеров и удаленных репозиториев.
- Базовые знания Cloud KMS ( codelab )
- Базовые знания об учетных записях служб , федерации удостоверений рабочей нагрузки и условиях атрибутов .
Что вы узнаете
- Как настроить необходимые облачные ресурсы для работы Конфиденциального пространства
- Как запустить рабочую нагрузку на конфиденциальной виртуальной машине, на которой работает образ виртуальной машины конфиденциального пространства
- Как авторизовать доступ к защищенным ресурсам на основе атрибутов кода рабочей нагрузки ( 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.
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. Если переменная не установлена, имя облачного ресурса будет сгенерировано из имени проекта, а новый облачный ресурс будет создан как часть следующего:
| Корзина, в которой хранится файл данных клиентов Примус Банка. |
| Пул идентификации рабочей нагрузки (WIP) Primus Bank, который проверяет утверждения. |
| Поставщик пула удостоверений рабочей нагрузки Primus Bank, который включает условие авторизации для использования токенов, подписанных службой проверки аттестации. |
| Сервисный аккаунт Primus Bank, который |
| Ключ KMS, используемый для шифрования данных, хранящихся в |
| Связка ключей KMS, которая будет использоваться для создания ключа шифрования |
| Репозиторий артефактов, куда будет помещен образ Docker рабочей нагрузки. |
- Вы можете установить следующие переменные с существующими именами облачных ресурсов в проекте Secundus. Если переменная установлена, то будет использоваться соответствующий существующий облачный ресурс из проекта Secundus. Если переменная не установлена, имя облачного ресурса будет сгенерировано из имени проекта, а новый облачный ресурс будет создан как часть следующего:
| Корзина, в которой хранится файл данных клиентов Secundus Bank. |
| Пул идентификации рабочей нагрузки (WIP) банка Secundus, который проверяет утверждения. |
| Поставщик пула удостоверений рабочей нагрузки Secundus Bank, который включает условие авторизации для использования токенов, подписанных службой проверки аттестации. |
| Сервисный аккаунт Secundus Bank, который |
| Ключ KMS, который используется для шифрования данных, хранящихся в |
| Связка ключей KMS, которая используется для создания ключа шифрования |
| Сегмент, в котором хранятся результаты рабочей нагрузки. |
| Имя образа контейнера рабочей нагрузки. |
| Тег образа контейнера рабочей нагрузки. |
| Учетная запись службы, имеющая разрешение на доступ к конфиденциальной виртуальной машине, на которой выполняется рабочая нагрузка. |
- Как указано ниже, в рамках этой кодовой лаборатории используется несколько артефактов:
-
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, чтобы авторизовать рабочие нагрузки в новом месте.
- Установите для проекта значение $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- Экспортируйте идентификатор проекта GCP Tertius Bank, используя приведенную ниже команду. Позже Primus Bank будет использовать это для обновления состояния атрибутов провайдера пула идентификации рабочей нагрузки. Примус банк не прекратит авторизацию счетов для обслуживания рабочей нагрузки Secundus Bank. Теперь будут разрешены учетные записи для обслуживания рабочей нагрузки Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Обновите поставщика 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 пытается выполнить исходную рабочую нагрузку, это терпит неудачу. Чтобы просмотреть ошибку, удалите исходный файл результатов и экземпляр виртуальной машины, а затем попробуйте снова запустить рабочую нагрузку.
Удалить существующий файл результатов и экземпляр виртуальной машины.
- Установите проект
$SECUNDUS_PROJECT_ID
.
gcloud config set project $SECUNDUS_PROJECT_ID
- Удалите файл результатов.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
- Удалите экземпляр конфиденциальной виртуальной машины.
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
Если вы закончили изучение, рассмотрите возможность удаления проекта.
- Перейдите в консоль облачной платформы .
- Выберите проект, который хотите закрыть, затем нажмите «Удалить» вверху: это запланирует удаление проекта.
Поздравления
Поздравляем, вы успешно завершили работу над кодом!
Вы узнали, как защитить общие данные, сохраняя при этом их конфиденциальность, с помощью Конфиденциального пространства.
Что дальше?
Посмотрите некоторые из этих похожих лабораторий кода...
- Кодовая лаборатория подписанного образа контейнера
- Как осуществлять транзакции с цифровыми активами с помощью многосторонних вычислений и конфиденциальных пространств
- Анализируйте конфиденциальные данные с помощью конфиденциальных пространств
Дальнейшее чтение
- Чувствуете себя изолированным? Конфиденциальные вычисления приходят на помощь
- Конфиденциальные вычисления в GCP
- Конфиденциальное пространство: будущее сотрудничества, сохраняющего конфиденциальность
- Как Google и Intel повышают безопасность конфиденциальных вычислений
- Конфиденциальность против прогресса: повышение безопасности с помощью облачных конфиденциальных вычислений Google