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

1. Обзор

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

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

В данном случае Primus — это автор рабочей нагрузки, создающий её код, и партнёр, стремящийся защитить свою интеллектуальную собственность от недобросовестного оператора рабочей нагрузки Secundus. Secundus — это оператор рабочей нагрузки машинного обучения.

5a86c47d935da998.jpeg

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

  • Как настроить среду, в которой одна сторона может делиться своей проприетарной моделью машинного обучения с другой стороной, не теряя при этом контроля над своей интеллектуальной собственностью.

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

Роли, связанные с организацией конфиденциального пространства.

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

  1. Настройка необходимых облачных ресурсов с помощью модели машинного обучения.
  2. Написание кода для обработки рабочей нагрузки
  3. Публикация образа рабочей нагрузки
  4. Настройка политики пула учетных данных рабочей нагрузки для защиты модели машинного обучения от недоверенного оператора.

Компания Secundus будет выступать в качестве оператора и нести ответственность за следующее:

  1. Настройка необходимых облачных ресурсов для хранения образцов изображений, используемых рабочей нагрузкой, и результатов.
  2. Запуск задачи машинного обучения в конфиденциальном пространстве с использованием модели, предоставленной Primus.

Как работает конфиденциальное пространство

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

  1. Рабочая нагрузка запрашивает общий токен доступа Google для учетной записи $PRIMUS_SERVICEACCOUNT из пула идентификационных данных рабочей нагрузки . Она предоставляет токен службы проверки аттестации с указанием рабочей нагрузки и среды.
  2. Если утверждения об измерении рабочей нагрузки в токене службы проверки аттестации соответствуют условию атрибута в WIP, возвращается токен доступа для $PRIMUS_SERVICEACCOUNT.
  3. Рабочая нагрузка использует токен доступа к учетной записи службы, связанный с $PRIMUS_SERVICEACCOUNT для доступа к модели машинного обучения, хранящейся в сегменте $PRIMUS_INPUT_STORAGE_BUCKET .
  4. Данная рабочая нагрузка выполняет операцию над данными, принадлежащими Secundus, и эта рабочая нагрузка управляется и запускается компанией Secundus в рамках её проекта.
  5. В рабочей нагрузке используется учетная запись службы $WORKLOAD_SERVICEACCOUNT для записи результатов этой операции в хранилище $SECUNDUS_RESULT_STORAGE_BUCKET .

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

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

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

$PRIMUS_INPUT_STORAGE_BUCKET

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

$PRIMUS_WORKLOAD_IDENTITY_POOL

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

$PRIMUS_WIP_PROVIDER

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

$PRIMUS_SERVICE_ACCOUNT

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

$PRIMUS_ARTIFACT_REPOSITORY

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

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

$SECUNDUS_INPUT_STORAGE_BUCKET

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

$SECUNDUS_RESULT_STORAGE_BUCKET

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

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICE_ACCOUNT

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

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

Настройка ресурсов компании Primus

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

  • Облачное хранилище ( $PRIMUS_INPUT_STORAGE_BUCKET ) для хранения модели машинного обучения Primus.
  • Пул идентификаторов рабочей нагрузки ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) используется для проверки утверждений на основе условий атрибутов, настроенных в его поставщике.
  • Учетная запись службы ( $PRIMUS_SERVICEACCOUNT ), привязанная к вышеупомянутому пулу идентификаторов рабочей нагрузки ( $PRIMUS_WORKLOAD_IDENTITY_POOL ), имеет доступ IAM для чтения данных из облачного хранилища (с использованием роли objectViewer ) и для подключения этой учетной записи службы к пулу идентификаторов рабочей нагрузки (с использованием roles/iam.workloadIdentityUser ).

В рамках настройки облачных ресурсов мы будем использовать модель TensorFlow. Мы можем сохранить всю модель, включая архитектуру, веса и конфигурацию обучения, в ZIP-архиве. Для целей этой практической работы мы будем использовать модель MobileNet V1, обученную на наборе данных ImageNet, который можно найти здесь .

./setup_primus_company_resources.sh

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

  1. Скачать предварительно обученную модель можно здесь .
  2. После загрузки переименуйте загруженный tar-архив в model.tar.gz .
  3. Опубликуйте файл model.tar.gz в хранилище Cloud Storage, используя следующую команду из каталога, содержащего файл model.tar.gz .
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/

Настройка ресурсов компании Secundus

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

  • Облачное хранилище ( $SECUNDUS_INPUT_STORAGE_BUCKET ) для хранения примеров изображений, используемых для выполнения выводов программой Secundus.
  • Облачное хранилище ( $SECUNDUS_RESULT_STORAGE_BUCKET ) для хранения результатов выполнения задач машинного обучения в Secundus.

Здесь представлены несколько примеров изображений для этого практического занятия.

./setup_secundus_company_resources.sh

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

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

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

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

  • confidentialcomputing.workloadUser для получения токена подтверждения
  • logging.logWriter для записи логов в Cloud Logging.
  • objectViewer для чтения данных из облачного хранилища $SECUNDUS_INPUT_STORAGE_BUCKET .
  • objectUser , который записывает результаты рабочей нагрузки в облачное хранилище $SECUNDUS_RESULT_STORAGE_BUCKET .
./create_workload_service_account.sh

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

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

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

Вот метод run_inference() рабочей нагрузки, которая будет создана и использована в этом практическом занятии. Полный код рабочей нагрузки можно найти здесь .

def run_inference(image_path, model):
  try:
    # Read and preprocess the image
    image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
    image = tf.image.resize(image, (128, 128))
    image = tf.image.convert_image_dtype(image, tf.float32)
    image = tf.expand_dims(image, axis=0)

    # Get predictions from the model
    predictions = model(image)
    predicted_class = np.argmax(predictions)

    top_k = 5
    top_indices = np.argsort(predictions[0])[-top_k:][::-1]

    # Convert top_indices to a TensorFlow tensor
    top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)

    # Use TensorFlow tensor for indexing
    top_scores = tf.gather(predictions[0], top_indices_tensor)

    return {
        "predicted_class": int(predicted_class),
        "top_k_predictions": [
            {"class_index": int(idx), "score": float(score)}
            for idx, score in zip(top_indices, top_scores)
        ],
    }
  except Exception as e:
    return {"error": str(e)}

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

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

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

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

Авторизация рабочей нагрузки

Компания Primus хочет разрешить рабочим нагрузкам доступ к своей модели машинного обучения на основе атрибутов следующих ресурсов:

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

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

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

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

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

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

gcloud compute instances create ${WORKLOAD_VM} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --project=${SECUNDUS_PROJECT_ID} \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
 --service-account=${WORKLOAD_SERVICEACCOUNT}@${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}

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

После успешного завершения обработки данных результаты машинного обучения будут опубликованы в $SECUNDUS_RESULT_STORAGE_BUCKET .

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

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

Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}

Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}

Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}

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

  • Индекс predicted_class: это числовой индекс, представляющий класс, к которому, по прогнозам модели, принадлежит изображение.
  • Top_k_predictions: Эта опция предоставляет до k прогнозов для изображения, ранжированных от наиболее вероятного к наименее вероятному. В этом примере значение k установлено равным 5, но вы можете изменить его в коде рабочей нагрузки, чтобы получить больше или меньше прогнозов.

Чтобы преобразовать индекс класса в удобочитаемое имя класса, обратитесь к списку доступных меток, расположенному здесь . Например, если вы видите индекс класса 2, это соответствует метке класса «tench» в списке меток.

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

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

Secundus изменяет образ рабочей нагрузки, загружая другой образ рабочей нагрузки из собственного репозитория артефактов, который не авторизован Primus. Пул идентификаторов рабочих нагрузок Primus авторизован только для образа рабочей нагрузки ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG .

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

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

Пожалуйста, убедитесь, что в реестре артефактов Secundus опубликован новый образ Docker (как us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG} ) и что учетная запись службы рабочей нагрузки ( $WORKLOAD_SERVICEACCOUNT ) предоставила читателю реестра артефактов разрешение на чтение этого нового образа рабочей нагрузки. Это необходимо для того, чтобы рабочая нагрузка не завершила работу до того, как политика WIP Primus отклонит токен, предоставленный рабочей нагрузкой.

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

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

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

gcloud compute instances create ${WORKLOAD_VM} \
 --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_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata  ^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}

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

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

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result

5. Уборка

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

  • Входной сегмент хранилища Primus ( $PRIMUS_INPUT_STORAGE_BUCKET) .
  • Учетная запись службы Primus ( $PRIMUS_SERVICEACCOUNT ).
  • Репозиторий артефактов Primus ( $PRIMUS_ARTIFACT_REPOSITORY ).
  • Пул идентификаторов рабочих нагрузок Primus ( $PRIMUS_WORKLOAD_IDENTITY_POOL ).
  • Учетная запись службы рабочей нагрузки Secundus ( $WORKLOAD_SERVICEACCOUNT ).
  • Входной сегмент хранилища Secundus ( $SECUNDUS_INPUT_STORAGE_BUCKET) .
  • Экземпляры вычислительных ресурсов для рабочей нагрузки.
  • Сегмент хранения результатов Secundus ( $SECUNDUS_RESULT_STORAGE_BUCKET ).
$ ./cleanup.sh

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

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

Что дальше?

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