GCP数据丢失预防API身份验证:是否需要使用服务帐户



我正在尝试使用API自动进行DLP扫描。唯一阻碍我完成这个项目的是身份验证。似乎在每个项目中创建和使用具有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=######"

查看文档验证到云DLP API:

您必须通过云DLP API的身份验证才能使用它。这个云DLP API可以处理API密钥和身份验证。主要这两种方法的区别在于:

  • API键标识调用项目-正在调用API的应用程序或站点
  • Auth令牌标识正在使用项目的用户(即个人)

使用服务帐户验证云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. 运行您的脚本

此外,请查看Quickstart:使用命令行工具部分Permissions:

检查内容需要serviceusage.services.use权限用于在父级中指定的项目。CCD_ 6,roles/ownerroles.dlp.user角色包含所需的权限或者您可以定义自己的自定义角色。

如果您仍然有问题,请尝试按照以下步骤对bu进行故障排除:

  1. 使用命令gcloud auth list检查您的活动帐户
  2. 检查DLP API是否已启用gcloud services list --enabled | grep DLP
  3. 使用命令gcloud auth activate-service-account激活DLP服务帐户,然后再次运行脚本

并使用命令和输出更新您的问题。此外,请澄清您在脚本中使用DLP服务帐户的方式。

是的,您可以将自己的用户帐户(所有者)与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单一报价

将字符用单引号(')括起来可保留文字值引号中每个字符的。可能不会出现单引号在单引号之间,即使前面有反斜杠。

3.1.2.3双重报价

将字符用双引号(")括起来可保留文字值引号中所有字符的,$除外,, , and, when history expansion is enabled, !. The characters $ and在双引号中保留其特殊含义(参见Shell扩展)。只有当后跟以下字符之一:$、`、"、\或换行符。在双引号内,后面跟着以下内容之一的反斜杠字符被删除。在不带特殊含义未作修改。可以引用双引号在双引号内,在其前面加一个反斜杠。如果启用,将执行历史扩展,除非!以双引号出现引号使用反斜杠进行转义。!前面的反斜杠!是未移除。

当使用双精度时,特殊参数*和@具有特殊含义引号(请参见外壳参数展开)。

输出:


{
"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"
..................

需要注意的一点是DLP有点不同。实际上,每个请求中都涉及两个服务帐户。用于调用API的服务,但服务本身使用dlp服务帐户来转向并调用其他服务以从存储中读取。

当你启用dlp时,你会看到这个帐户是自动创建的。看起来是这样的。。。服务-[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com,此处讨论https://cloud.google.com/dlp/docs/iam-permissions#service_account

我看到的一个常见设置是,安全团队将在单个项目中启用DLP来扫描他们的整个组织。他们将通过授予他们正在运行的项目中的服务[PROJECT_NUMBER]@dlp-api.iam.gserviceaccount.com访问组织中所有其他项目的权限来实现这一点。这将使其在整个公司读取GCS/BQ。

如果您找到这篇文章是因为您只想使用API密钥通过Java客户端调用DLP API,请参阅我如何使其工作(在Scala中)的要点。基本上,我必须在自己身上传递头部,并明确表示没有其他身份验证机制存在

https://gist.github.com/kylejmcintyre/b7ff56cf08addb87ebcf53defa18461f

在我的情况下,我将所有要检查的数据传递到API中,因此除了调用inspect API之外,我不关心任何其他身份验证。

相关内容

  • 没有找到相关文章

最新更新