【发布时间】:2022-02-09 02:43:45
【问题描述】:
目标
将角色 dialogflow.admin 分配给我使用 Google API 的 Node.js 客户端库为项目创建的服务帐户。
问题
当我尝试更新我的服务账户 IAM 政策并向服务账户添加角色时。我收到此资源类型不支持该角色的错误消息。
我正在尝试为我的服务帐户提供 Dialogflow API 管理员角色 roles/dialogflow.admin
我使用的Node.js客户端库中的方法是iam.projects.serviceAccounts.setIamPolicy。
我已经成功地使用这个 Node.js 客户端库创建了服务帐户,这里显示了一个函数。
async function createServiceAccount(projectID, serviceAccountID){
const authClient = await auth.getClient();
var request = {
name: "projects/"+projectID,
resource: {
"accountId": serviceAccountID,
"serviceAccount": {
"description" : "Service Account for project: "+projectID+" for DialogFlow authentication with VA",
"displayName": "VA Dialogflow Service Account "+projectID
}
},
auth: authClient,
};
await iam.projects.serviceAccounts.create(request, function(err, response) {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(response, null, 2));
});
}
在此函数运行后,并且我确定服务帐户已创建,我运行我的 函数,该函数旨在设置此服务帐户的角色。
async function setServiceAccountRoles(projectID, serviceAccountID){
const authClient = await auth.getClient();
var request = {
resource_: "projects/"+projectID+"/serviceAccounts/"+serviceAccountID,
resource: {
policy: {
bindings: [
{
// role: "projects/"+projectID+"roles/dialogflow.admin",
role: "roles/dialogflow.admin",
"members": [
"serviceAccount:"+serviceAccountID
]
}
],
version: 1
}
},
auth: authClient,
};
await iam.projects.serviceAccounts.setIamPolicy(request, function(err, response) {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(response, null, 2));
});
}
错误
当我运行这个函数时,我给出了这个错误:
code: 400,
errors: [
{
message: 'Role roles/dialogflow.admin is not supported for this resource.',
domain: 'global',
reason: 'badRequest'
}
]
我已经使用以下这些资源来做到这一点: https://cloud.google.com/iam/docs/reference/rest/v1/projects.serviceAccounts/setIamPolicy
https://cloud.google.com/iam/docs/reference/rest/v1/Policy
替代方法。
我尝试将角色更改为项目特定路径,如下所示:
async function setServiceAccountRoles(projectID, serviceAccountID){
const authClient = await auth.getClient();
var request = {
resource_: "projects/"+projectID+"/serviceAccounts/"+serviceAccountID,
resource: {
policy: {
bindings: [
{
role: "projects/"+projectID+"roles/dialogflow.admin",
"members": [
"serviceAccount:"+serviceAccountID
]
}
],
version: 1
}
},
auth: authClient,
};
await iam.projects.serviceAccounts.setIamPolicy(request, function(err, response) {
if (err) {
console.error(err);
return;
}
console.log(JSON.stringify(response, null, 2));
});
}
但是,我得到了错误:message: "Role (projects/va-9986d601/roles/dialogflow.admin) does not exist in the resource's hierarchy.",
是否可以通过控制台或 gcloud 命令更新我的服务帐户的角色和权限?如果是这样,是否有任何推荐的方式通过 node.js 客户端库或从节点应用程序本身运行所述 gcloud 命令?
【问题讨论】:
标签: node.js google-cloud-platform google-api google-cloud-iam google-client