NodeJS 资源上的权限“iam.serviceAccounts.getAccessToken”被拒绝

pdtvr36n  于 2023-06-05  发布在  Node.js
关注(0)|答案(1)|浏览(178)

在GCP控制台中,我创建了一个服务帐户并为其分配了一个自定义角色,该角色具有以下权限,请注意粗体权限:

*iam.serviceAccounts.getAccessToken

  • storage.buckets.get
  • storage.multipartUploads.abort
  • storage.multipartUploads.create
  • storage.multipartUploads.list
  • storage.multipartUploads.listParts
  • storage.objects.create
  • storage.objects.delete
  • storage.objects.list

在我的工作站上,我按照说明使用gCloud CLI使用应用程序默认凭据(ADC)进行身份验证。
下面是我的主体,其中包含IAM中的Name和Role列:
IAM screen capture of principal
./gcloud auth application-default login --impersonate-service-account=principle_email_address_here
下面是我的参考测试函数:

export async function createBucket(
  projectId: string,
  tenantExtId: string
): Promise<undefined> {
  const storage = new Storage({
    projectId: projectId
  });

  const result = await storage.createBucket(tenantExtId);
  console.dir(result);
  return;
}

我有一个Jest单元测试,它试图验证存储桶的创建。它失败,并显示以下消息:

#createBucket › creates a bucket name
    
Could not refresh access token: PERMISSION_DENIED: unable to impersonate: Permission 'iam.serviceAccounts.getAccessToken' denied on resource (or it may not exist).

我多次审查GCP文档和SO条目,仍然不知道我做错了什么。这应该会导致创建一个新的存储桶名称。

vxbzzdmp

vxbzzdmp1#

您(人员X)正在尝试模拟服务帐户。你必须承认自己(即。人X,即您的gcloud用户帐户)* 服务帐户获取访问令牌 * 权限。你还没这么做。您所做的是将该权限授予服务帐户本身。

相关问题