在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条目,仍然不知道我做错了什么。这应该会导致创建一个新的存储桶名称。
1条答案
按热度按时间vxbzzdmp1#
您(人员X)正在尝试模拟服务帐户。你必须承认自己(即。人X,即您的gcloud用户帐户)* 服务帐户获取访问令牌 * 权限。你还没这么做。您所做的是将该权限授予服务帐户本身。