簡體   English   中英

Google API Node.js 圖書館 - 在項目級別向服務帳戶授予角色

[英]Google API Node.js Library - Grant Role to service account at project level

目標

將角色dialogflow.admin分配給我為使用 Google API 的 Node.js 客戶端庫為項目創建的服務帳戶。

問題

當我嘗試更新我的服務帳戶 IAM 策略並向服務帳戶添加角色時。 我收到此資源類型不支持該角色的錯誤消息。

我正在嘗試為我的服務帳戶提供Dialogflow API Admin Role roles/dialogflow.admin

我使用的 Node.js 客戶端庫中的方法是iam.projects.serviceAccounts.setIamPolicy

我已經設法使用此處顯示的 function 的 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));
    });
}

function 運行后,我確定服務帳戶已創建,我運行我的function 來設置此服務帳戶的角色。

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));
    });
}

錯誤

當我運行此 function 時,出現此錯誤:

  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

https://cloud.google.com/iam/docs/granting-changing-revoking-access#granting_access_to_a_service_account_for_a_resource

替代方法。

我試過將角色更改為這樣的項目特定路徑:

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 命令?

您正嘗試在服務帳戶上設置 IAM 策略。 這用於授予其他身份訪問服務帳戶本身的權限。

您應該修改項目的 IAM 綁定,而不是服務帳戶。

使用getIamPolicysetIamPolicy 示例包含在文檔中。

警告:編寫修改項目綁定的代碼時要非常小心。 如果您覆蓋綁定,您可以輕松地將自己鎖定在您的項目之外。 然后,您需要向 Google Cloud 支持開具付費支持票。 用一個一次性項目練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM