我正在编写一个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 创建了一个自己的服务帐户,具有所需的权限集。
启用云 DLP 后,服务帐户将添加到项目中。
访问 Google Cloud 资源并执行对 Cloud DLP 的调用 通过JobTrigger,Cloud DLP使用Google的凭据 用于向其他 API 进行身份验证的 API 服务帐户。谷歌接口 服务帐号专为运行内部 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.
请阅读官方文档对云 DLP API 进行身份验证
您必须向云 DLP API 进行身份验证才能使用它
您必须使用服务帐户向云 DLP API 进行身份验证:
-
创建服务帐户
-
向服务帐户授予角色((roles/dlp.user(
-
下载密钥.json 文件
-
设置 env 变量:
export GOOGLE_APPLICATION_CREDENTIALS=[PATH_TO_KEY_FILE]
您提到的服务帐户service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com
:
Google API 服务帐号专为运行而设计 代表您进行内部 Google 流程
请阅读服务帐户的类型
-
用户管理的服务帐号
-
谷歌托管的服务帐号
编辑
1.创建了一个新项目
gcloud projects create class-run
gcloud config set project class-run
2.启用计费
3.启用 DLP API
4.我使用"使用云 DLP 设置云存储存储桶的扫描作业"进行了测试:
5.创建发布会子主题和发布会订阅
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.运行脚本,一切按预期工作。