Я пишу сценарий 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
Моя учетная запись службы имеет два отдельных набора разрешений:
- Разрешения DLP отдельно:
- dlp.jobs.create
- dlp.jobs.cancel
- dlp.jobs. delete
- dlp.jobs.get
- dlp.jobs.list
Разрешение владельца, поэтому он имеет неограниченный доступ ко всем ресурсам 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.