PermissionDenied:403 IAM 权限“dialogflow.intents.list”

Pra*_*xit 8 chatbot service-accounts google-cloud-platform dialogflow-es

我正在尝试使用 Dialogflow 的 V2 API 获取我的 Dialogflow 代理中的意图列表,但出现以下错误:


PermissionDenied:“projects/xxxx/agent”上的 403 IAM 权限“dialogflow.intents.list”被拒绝。

我采取了以下步骤:

  1. 我为它创建了一个新代理(启用了 V2 API)和一个新的服务帐户。
  2. 我下载了 JSON 密钥并将我的 GOOGLE_APPLICATION_CREDENTIALS 变量设置为其路径。

以下是我的代码:

import dialogflow_v2 as dialogflow

os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/home/user/folder/service-account-key.json"

client=dialogflow.IntentsClient()

parent = client.project_agent_path('[PROJECT_ID]')

for element in client.list_intents(parent):
    pass
Run Code Online (Sandbox Code Playgroud)

我制作了各种代理和服务帐户,甚至将角色从管理员更改为客户端,但找不到任何解决方案。我尝试了以下解决方案但没有用

尝试的解决方案:DialogFlow PermissionDenied:403 IAM 权限“dialogflow.sessions.detectIntent”

Ris*_*tra 10

无需创建新代理。您可以编辑现有代理 IAM。

  1. 在 Dialogflow 的控制台中,转到设置?> 在常规选项卡下,您将看到项目 ID 部分,其中包含用于打开 Google Cloud 控制台的 Google Cloud 链接 > 打开 Google Cloud。
  2. 在 Google Cloud 中,转到“成员”选项卡下的 IAM 管理 > IAM。找到您的代理的名称,然后单击编辑。
  3. 向代理授予管理员权限以授予列出意图的权限。


BcK*_*BcK 5

问题出在 GCP 的 IAM 部分。可能您正在使用没有必要授权的角色发出 POST 请求。

  1. 查看包含“client_email”字段的 key.json 文件
  2. 继续到 IAM 页面并将与该电子邮件相关的角色设置为具有发布功能的角色。(例如管理员)

这解决了我的问题。


Arm*_*_SC 0

当由于文件丢失、凭证路径无效、环境变量分配不正确等多种原因导致应用程序未正确进行身份验证时,通常会引发此错误消息。请记住,当您在会话中设置环境变量值时,每次删除会话时都会重置该值。

基于此,我建议您验证凭证文件和文件路径是否已正确分配,并遵循手动获取和提供服务帐户凭证指南,以便直接在代码中显式指定您的服务帐户文件;通过这种方式,您将能够永久设置它并验证您是否正确传递了服务凭据。

在代码示例中传递服务帐户密钥的路径:

def explicit():
from google.cloud import storage

# Explicitly use service account credentials by specifying the private key
# file.
storage_client = storage.Client.from_service_account_json('service_account.json')

# Make an authenticated API request
buckets = list(storage_client.list_buckets())
print(buckets)
Run Code Online (Sandbox Code Playgroud)