我正在编写一个Python脚本来检查中存在的一些文件的内容,如果其中包含一些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创建了一个具有所需权限集的服务帐户。
启用Cloud时,将向项目添加一个服务帐户。 为了通过JobTrigger访问Google资源和执行对Cloud的调用,Cloud使用Google服务帐户的凭据对其他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 permissions separately:
- dlp.jobs.create
- dlp.jobs.cancel
- dlp.jobs.delete
- dlp.jobs.get
- dlp.jobs.list
- roles/owner
但是,当我现在运行该脚本时,它仍然会出现以下错误:
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.发布于 2020-02-14 15:39:14
请阅读正式文档验证到Cloud
您必须对Cloud进行身份验证才能使用它
您必须使用服务帐户对Cloud进行身份验证:
您提到的service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com服务帐户
Google服务帐户是专门为您运行内部Google进程而设计的。
请阅读有关服务帐户的类型的资料
编辑
1.创建了一个新项目
gcloud projects create class-run
gcloud config set project class-run2.启用计费
3.启用DLP Api
4.我使用若要使用Cloud DLP设置云存储桶的扫描作业,请执行以下操作:进行了测试
5.创建一个pub子主题和一个pub订阅
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.com7.设置默认凭据
export GOOGLE_APPLICATION_CREDENTIALS=/home/user/key.json8.运行脚本,一切都按预期进行。
https://stackoverflow.com/questions/60226522
复制相似问题