在 GCP 控制台中,我创建了一个服务帐户并为其分配了一个自定义角色,该角色具有以下权限,请注意粗体权限:
在我的工作站上,我按照说明使用 gCloud CLI 通过应用程序默认凭据 (ADC) 进行身份验证。
这是我的委托人,其中包含来自 IAM 的“名称”和“角色”列:
./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 条目,但仍然不知道我做错了什么。这应该会导致创建一个新的存储桶名称。
您,X 人,正在尝试冒充服务帐户。您必须授予自己(即 X 人,即您的 gcloud 用户帐户)服务帐户获取访问令牌权限。你还没有这样做。您所做的就是将该权限授予服务帐户本身。