首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GCP DLP API获得403拒绝的权限

使用GCP DLP API获得403拒绝的权限
EN

Stack Overflow用户
提问于 2020-02-14 12:37:52
回答 1查看 3.1K关注 0票数 1

我正在编写一个Python脚本来检查中存在的一些文件的内容,如果其中包含一些PII。脚本如下所示

代码语言:javascript
复制
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策略,以包含以下策略集的自定义角色(因为这只是一个学习项目)。

代码语言:javascript
复制
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. 我的服务帐户有两个独立的权限集:
代码语言:javascript
复制
- DLP permissions separately:
- dlp.jobs.create 
- dlp.jobs.cancel 
- dlp.jobs.delete 
- dlp.jobs.get
- dlp.jobs.list

  1. 所有者权限,因此它可以不受限制地访问所有谷歌资源。
代码语言:javascript
复制
- roles/owner

但是,当我现在运行该脚本时,它仍然会出现以下错误:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2020-02-14 15:39:14

请阅读正式文档验证到Cloud

您必须对Cloud进行身份验证才能使用它

您必须使用服务帐户对Cloud进行身份验证:

  1. 创建一个服务帐户
  2. 将角色授予服务帐户(角色/dlp.user)
  3. 下载key.json文件
  4. 设置env变量: 导出GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_KEY_FILE

您提到的service-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com服务帐户

Google服务帐户是专门为您运行内部Google进程而设计的。

请阅读有关服务帐户的类型的资料

  1. 用户管理的服务帐户
  2. Google管理服务帐户

编辑

1.创建了一个新项目

代码语言:javascript
复制
gcloud projects create class-run
gcloud config set project class-run

2.启用计费

3.启用DLP Api

4.我使用若要使用Cloud DLP设置云存储桶的扫描作业,请执行以下操作:进行了测试

5.创建一个pub子主题和一个pub订阅

6.创建服务帐户,分配角色并下载密钥

代码语言:javascript
复制
 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.设置默认凭据

代码语言:javascript
复制
export GOOGLE_APPLICATION_CREDENTIALS=/home/user/key.json

8.运行脚本,一切都按预期进行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60226522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档