Аутентификация API для предотвращения потери данных GCP: требуется ли использование служебной учетной записи? - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь автоматизировать сканирование DLP с помощью API. Единственное, что удерживает меня от завершения этого проекта - это аутентификация. Похоже, что создание и использование учетной записи службы с правами администратора BigQuery, Storage и DLP в каждом отдельном проекте - единственный способ избежать ошибок, в которых отказано в разрешении, несмотря на то, что моя собственная учетная запись имеет доступ владельца организации ко всем проектам. Это проблема IAM или какое-то требование DLP API и использования токенов? Почему мой токен не работает? У нас много проектов, и, возможно, в будущем их будет больше, и мы хотели бы избежать громоздкой и утомительной проблемы создания учетной записи службы в каждом проекте, особенно необходимости делать это снова и снова, чтобы скрипт работал. Автоматизация должна быть меньше работы, а не больше.

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

"error": { "code": 403, "message": "Cloud Data Loss Prevention (DLP) API has not been used in project ###### before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/dlp.googleapis.com/overview?project=###### then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.", "status": "PERMISSION_DENIED", "details": [ { "@type": "type.googleapis.com/google.rpc.Help", "links": [ { "description": "Google developers console API activation", "url": "https://console.developers.google.com/apis/api/dlp.googleapis.com/overview?project=######"

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Да, вы можете использовать свою собственную учетную запись пользователя (владельца) с API.

  1. gcloud auth login 

  2. gcloud auth list 
    #ACTIVE  ACCOUNT with owner role
    *       user@cloud.com .

  3. gcloud auth print-access-token
    #xxxxxxxxxxxxxx

  4. curl -s -H 'Content-Type: application/json'   -H 'Authorization: Bearer xxxxxxxxxxx'   'https://dlp.googleapis.com/v2/infoTypes'

  #OR

  5. ACCESS_TOKEN="$(gcloud auth application-default print-access-token)"
     curl -s -H 'Content-Type: application/json'   -H "Authorization: Bearer $ACCESS_TOKEN"   'https://dlp.googleapis.com/v2/infoTypes'
   #you need Double Quotes and not Single Quotes for -H flag

3.1.2.2 Одинарные кавычки

Заключение символов в одинарные кавычки (') буквальное значение каждого символа в кавычках. Одиночная кавычка может отсутствовать между одинарными кавычками, даже если ей предшествует обратная коса sh.

3.1.2.3 Двойные кавычки

Заключение символов в двойные кавычки (") сохраняет буквальное значение все символы в кавычках, за исключением $, , \, and, when history expansion is enabled, !. The characters $ and сохраняют свое специальное значение в двойных кавычках (см. Расширения оболочки). Backsla sh сохраняет свое специальное значение только тогда, когда за ним следует один из следующих символов: $, ` , ", \, или перевод строки. В двойных кавычках удаляются обратные слэши, за которыми следует один из этих символов. Обратная косая черта предшествующих символов без специального значения остается неизменной. Двойная кавычка может быть заключена в двойные кавычки, если им предшествует обратная косая черта sh. Если включено, расширение истории будет выполняться, если только! в двойных кавычках экранируется обратная косая черта sh. Бэксла sh предшествующий! не удаляется.

Особые параметры * и @ имеют особое значение в двойных кавычках (см. Расширение параметров оболочки).

Вывод:


{
  "infoTypes": [
    {
      "name": "AMERICAN_BANKERS_CUSIP_ID",
      "displayName": "American Bankers CUSIP identifier",
      "supportedBy": [
        "INSPECT"
      ],
      "description": "An American Bankers' Committee on Uniform Security Identification Procedures (CUSIP) number is a 9-character alphanumeric code that identifies a North American financial security."
    },
    {
      "name": "AUSTRALIA_DRIVERS_LICENSE_NUMBER",
      "displayName": "Australia driver's license number",
      "supportedBy": [
        "INSPECT"
      ],
      "description": "An Australian driver's license number."
    },
    {
      "name": "AUSTRALIA_MEDICARE_NUMBER",
      "displayName": "Australia medicare number",
      "supportedBy": [
        "INSPECT"

..................
1 голос
/ 04 марта 2020

Стоит отметить, что с DLP немного по-другому. На самом деле в каждом запросе участвуют две служебные учетные записи. Тот, который вы используете для вызова API, но сама служба использует учетную запись службы dlp для обращения и вызова других служб для чтения из хранилища.

Когда вы включите dlp, вы увидите, что эта учетная запись автоматически создается. Это выглядит так ... service- [PROJECT_NUMBER] @ dlp-api.iam.gserviceaccount.com и обсуждается здесь https://cloud.google.com/dlp/docs/iam-permissions#service_account

Обычная настройка, которую я видел, это Команда безопасности включит DLP в одном проекте для сканирования всей их организации. Они сделают это, предоставив service- [PROJECT_NUMBER] @ dlp-api.iam.gserviceaccount.com в проекте, который они запускают, разрешение на доступ ко всем другим проектам в организации. Это позволит ему читать GCS / BQ по всей компании.

1 голос
/ 03 марта 2020

Ознакомьтесь с документацией Аутентификация в Cloud DLP API :

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

  • Ключи API идентифицируют вызывающий проект - приложение или сайт - который выполняет вызов API.
  • Токены аутентификации идентифицируют пользователя - человек, который использует проект.

и

Использование служебной учетной записи для аутентификации в Cloud DLP API :

Следуйте инструкциям для создания учетной записи службы . Выберите JSON в качестве типа ключа и предоставьте пользователю роль пользователя DLP (roles/dlp.user).

Как правило, вы должны выполнить следующие действия:

  1. включить биллинг
  2. включить DLP API
  3. создать учетную запись службы , предоставить роль учетной записи службы roles/dlp.user и загрузите файл key.json:

    $ gcloud iam service-accounts create test-dlp --description "test-cloud" --display-name "test-dlp"
    $ gcloud projects add-iam-policy-binding class-run --member serviceAccount:test-dlp@class-run.iam.gserviceaccount.com --role roles/dlp.user
    $ gcloud iam service-accounts keys create key.json --iam-account test-dlp@class-run.iam.gserviceaccount.com
    
  4. установите переменную env:

    export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_key.json_FILE]
    
  5. запустите ваш скрипт

Кроме того, взгляните на Быстрый старт: использование инструмента командной строки section Разрешения :

Проверка Для содержимого требуется разрешение serviceusage.services.use для проекта, указанного в parent. Роли roles/editor, roles/owner и roles.dlp.user содержат необходимые разрешения или вы можете определить свою собственную пользовательскую роль.

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

  1. проверьте активную учетную запись с помощью команды gcloud auth list
  2. , проверьте, включен ли DLP API gcloud services list --enabled | grep DLP
  3. , активируйте службу DLP войдите в систему с помощью команды gcloud auth activate-service-account и снова запустите ваш скрипт

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

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