Получение 403 разрешения отклонено с GCP DLP API - PullRequest
0 голосов
/ 14 февраля 2020

Я пишу сценарий Python для проверки содержимого некоторых файлов, существующих в Google Cloud Storage, если они содержат некоторое PII. Сценарий выглядит так:

dlp = google.cloud.dlp_v2.DlpServiceClient()

url = "gs://{}/{}".format("my-bucket-name", "my_file_name")
storage_config = {"cloud_storage_options": {"file_set": {"url": url}}}

parent = dlp.project_path("my-project-name")

inspect_job = {
    "inspect_config": inspect_config,
    "storage_config": storage_config
}

operation = dlp.create_dlp_job(parent, inspect_job=inspect_job)

job_done = threading.Event()

job = dlp.get_dlp_job(operation.name)
try:
    if job.inspect_details.result.info_type_stats:
        for finding in job.inspect_details.result.info_type_stats:
            print("Info type: {}; Count: {}".format(finding.info_type.name, finding.count))
    else:
        print("No findings.")
    job_done.set()
except Exception as e:
    print(e)
    raise

finished = job_done.wait(timeout=3000)
if not finished:
    print(
        "No event received before the timeout. Please verify that the "
        "subscription provided is subscribed to the topic provided."
    )

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

Когда Cloud DLP включен, в проект добавляется служебная учетная запись.

Для доступа к ресурсам Google Cloud и выполнения вызовов в Cloud DLP с помощью JobTrigger, Cloud DLP использует учетные данные учетной записи службы API Google для аутентификации в других API. Учетная запись службы API Google разработана специально для запуска внутренних процессов Google от вашего имени. Учетную запись службы можно определить по электронной почте:

service- [PROJECT_NUMBER] @ dlp-api.iam.gserviceaccount.com

Когда я запускаю код, я получаю ошибку 403 заявив, что это не требуется разрешение dlp.jobs.create. Я обновил политику IAM для учетной записи, чтобы она содержала настраиваемую роль с указанным ниже набором политик (поскольку это только проект для целей обучения).

dlp.analyzeRiskTemplates.create
dlp.analyzeRiskTemplates.delete
dlp.analyzeRiskTemplates.get
dlp.analyzeRiskTemplates.list
dlp.analyzeRiskTemplates.update
dlp.deidentifyTemplates.create
dlp.deidentifyTemplates.delete
dlp.deidentifyTemplates.get
dlp.deidentifyTemplates.list
dlp.deidentifyTemplates.update
dlp.inspectTemplates.create
dlp.inspectTemplates.delete
dlp.inspectTemplates.get
dlp.inspectTemplates.list
dlp.inspectTemplates.update
dlp.jobTriggers.create
dlp.jobTriggers.delete
dlp.jobTriggers.get
dlp.jobTriggers.list
dlp.jobTriggers.update
dlp.jobs.cancel
dlp.jobs.create
dlp.jobs.delete
dlp.jobs.get
dlp.jobs.list
dlp.kms.encrypt
dlp.storedInfoTypes.create
dlp.storedInfoTypes.delete
dlp.storedInfoTypes.get
dlp.storedInfoTypes.list
dlp.storedInfoTypes.update
serviceusage.services.use
  1. Моя учетная запись службы имеет два отдельных набора разрешений:

    • Разрешения DLP отдельно:
    • dlp.jobs.create
    • dlp.jobs.cancel
    • dlp.jobs. delete
    • dlp.jobs.get
    • dlp.jobs.list
  2. Разрешение владельца, поэтому он имеет неограниченный доступ ко всем ресурсам Google.

    • Роли / владелец

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

grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
    status = StatusCode.PERMISSION_DENIED
    details = "Not allowed, access denied for permission dlp.jobs.create."
    debug_error_string = "{"created":"@1581682593.219000000","description":"Error received from peer ipv4:xxx.xxx.x.x","file":"src/core/lib/surface/call.cc","file_line":1056,"grpc_message":"Not allowed, access denied for permission dlp.jobs.create.","grpc_status":7}"


google.api_core.exceptions.PermissionDenied: 403 Not allowed, access denied for permission dlp.jobs.create.

1 Ответ

0 голосов
/ 14 февраля 2020

Пожалуйста, ознакомьтесь с официальной документацией Аутентификация в Cloud DLP API

Вы должны пройти аутентификацию в Cloud DLP API, чтобы использовать его

Для аутентификации в API Cloud DLP необходимо использовать учетную запись службы:

  1. Создать учетную запись службы

  2. Предоставление ролей учетным записям службы ( (role / dlp.user)

  3. Загрузить ключ. json file

  4. Установить переменную env:

    export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_KEY_FILE]
    

упомянутая вами учетная запись службы service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com:

учетная запись службы API Google разработана специально для запуска внутренних процессов Google от вашего имени

Пожалуйста, прочтите о Типы учетных записей служб

  1. Учетные записи, управляемые пользователями

  2. Учетная запись, управляемая Google

РЕДАКТИРОВАТЬ

1.Создать новый проект

gcloud projects create class-run
gcloud config set project class-run

2.Включить биллинг

3.Enab le DLP Api

4.Я протестировал с помощью Чтобы настроить задание сканирования хранилища Cloud Storage с использованием Cloud DLP:

5.Создать паб-подзаголовок c и подписка на паб

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

 gcloud iam service-accounts create test-cloud  --description "test-cloud"  --display-name "test-cloud"
 gcloud projects add-iam-policy-binding class-run   --member serviceAccount:test-cloud@class-run.iam.gserviceaccount.com  --role roles/dlp.user
 gcloud iam service-accounts keys create key.json  --iam-account test-cloud@class-run.iam.gserviceaccount.com

7. Установка учетных данных по умолчанию

export GOOGLE_APPLICATION_CREDENTIALS=/home/user/key.json

8. Запустите скрипт и все заработало как положено.

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