Указание учетной записи службы в пользовательской задаче

Вопрос или проблема

Мы используем код на Python для запуска некоторых пользовательских заданий, моя проблема заключается в том, что даже используя сервисный аккаунт “[email protected]“, для запуска задания, внутри него используется аккаунт “”service-xxxxxxxxxxxxxxxx-compute@gcp-sa-aiplataform-cc.iam.gserviceaccount.com”, что ломает мой код, потому что этот второй не имеет всех разрешений BigQuery, возможно ли запустить задание, используя “[email protected]“? Я пробовал это несколькими способами, но ни один из них не сработал.

def create_custom_job(
        project: str,
        display_name: str,
        container_image_uri: str,
        args: list,
        machine: str="n1-standard-4",
        location: str = "northamerica-northeast1",
        api_endpoint: str = "northamerica-northeast1-aiplatform.googleapis.com"
):
    client_options = {"api_endpoint": api_endpoint}
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    custom_job = {
        "display_name": display_name,
        "job_spec": {
            "worker_pool_specs": [
                {
                    "machine_spec": {
                        "machine_type": machine,
                    },
                    "replica_count": 1,
                    "container_spec": {
                        "image_uri": container_image_uri,
                        "command": [],
                        "args": args,
                    },
                }
            ]

        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_custom_job(parent=parent, custom_job=custom_job)
    return response
temp=create_custom_job(
            display_name="yyyyyyyyyyyyya",
            container_image_uri="container_image_path",
            args=["--a=c"],
            project="project_name",
            machine="n1-highmem-16"
        )

Вы решили проблему?

У меня такая же проблема, я пытаюсь запустить пользовательское задание в Vertex AI с конкретным сервисным аккаунтом. Я сделал это с помощью команды Gcloud, но не с помощью Python.

Ответ или решение

Чтобы указать учетную запись службы при запуске пользовательской работы в Google Cloud Vertex AI с использованием Python, необходимо правильно конфигурировать настройки рабочего процесса. В вашем сценарии вы запускаете кастомную задачу, но задача использует другую учетную запись, что может вызвать ошибки, связанные с правами доступа, например, в BigQuery. Ниже приводится руководство по настройке учетной записи службы в кастомном задании.

Шаг 1: Настройка IAM и учетных записей службы

Перед тем как запустить задание, необходимо удостовериться, что ваша основная учетная запись службы имеет необходимые разрешения. Учетная запись, которая по умолчанию используется в вашем кастомном задании (например, service-xxxxxxxxxxxxxxxx-compute@gcp-sa-aiplataform-cc.iam.gserviceaccount.com), может не обладать всеми необходимыми правами. Вам нужно предоставить дополнительные разрешения, такие как доступ к BigQuery.

  1. Создание и настройка учетной записи службы:

    • Убедитесь, что у вас есть учетная запись службы, которая будет выполнять ваш код. Например, [ваша_учетная_запись_службы] должна иметь доступ к API Google Cloud, включая BigQuery.
    • Назначьте этой учетной записи необходимые роли (например, BigQuery Admin, AI Platform Admin).
  2. Проверка прав доступа:

    • Проверьте, правильно ли настроены разрешения для вашей учетной записи службы с помощью Google Cloud Console:
      • IAM > Учетные записи служб > [ваша_учетная_запись_службы] > Проверить роли.

Шаг 2: Указание учетной записи службы в Python-коде

Теперь вам необходимо изменить код так, чтобы он использовал заданную вами учетную запись службы. Используйте параметр service_account при создании кастомной работы.

Пример:

def create_custom_job(
        project: str,
        display_name: str,
        container_image_uri: str,
        args: list,
        service_account: str,  # Новый параметр
        machine: str="n1-standard-4",
        location: str = "northamerica-northeast1",
        api_endpoint: str = "northamerica-northeast1-aiplatform.googleapis.com"
):
    client_options = {"api_endpoint": api_endpoint}
    client = aiplatform.gapic.JobServiceClient(client_options=client_options)
    custom_job = {
        "display_name": display_name,
        "job_spec": {
            "worker_pool_specs": [
                {
                    "machine_spec": {
                        "machine_type": machine,
                    },
                    "replica_count": 1,
                    "service_account": service_account,  # Указание учетной записи службы
                    "container_spec": {
                        "image_uri": container_image_uri,
                        "command": [],
                        "args": args,
                    },
                }
            ]

        },
    }
    parent = f"projects/{project}/locations/{location}"
    response = client.create_custom_job(parent=parent, custom_job=custom_job)
    return response

# Пример использования функции
temp = create_custom_job(
            display_name="yyyyyyyyyyyyya",
            container_image_uri="container_image_path",
            args=["--a=c"],
            project="project_name",
            machine="n1-highmem-16",
            service_account="[ваша_учетная_запись_службы]"  # Добавлено здесь
        )

Шаг 3: Отладка ошибок доступа

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

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

Заключение

Таким образом, для успешного запуска кастомные задания с заданной учетной записью службы, необходимо правильно настроить IAM, передать сервисный аккаунт в вашем коде и убедиться в наличии необходимых прав для выполнения всех запрашиваемых операций. Следуя приведенным шагам, вы сможете избежать проблем с доступом и конфиденциальностью в ваших проектах на Google Cloud.

Оцените материал
Добавить комментарий

Капча загружается...