PermissionDenied: 403 разрешение IAM 'dialogflow.intents.list' - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь получить список намерений в моем агенте Dialogflow, используя API-интерфейсы V2 Dialogflow, но получаю следующую ошибку:


PermissionDenied: 403 разрешение IAM 'диалоговое окно.intets.list 'on' projects / xxxx / agent 'отказано.

Я принял следующие шаги:

  1. Я создал нового агента (с включенными API-интерфейсами V2) иновая служебная учетная запись для него.
  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

Я создал различные агенты и учетные записи служб и даже изменил роль с Admin на Client, но не могу найти какое-либо решение.Я пробовал следующее решение, но не работало

Пробное решение: DialogFlow PermissionDenied: 403 разрешение IAM 'dialogflow.sessions.detectIntent'

Ответы [ 5 ]

0 голосов
/ 02 августа 2019

Нет необходимости создавать нового агента.Вы можете редактировать существующие агенты IAM.

  1. В консоли Dialogflow перейдите в настройки ⚙> на вкладке Общие, вы увидите раздел идентификатора проекта со ссылкой в ​​Google Cloud, чтобы открыть консоль Google Cloud.> Откройте Google Cloud.
  2. В облаке Google перейдите в IAM Admin> IAM на вкладке Участники.Найдите имя ваших агентов и нажмите «Изменить».
  3. Предоставьте агенту разрешения администратора, чтобы дать разрешения на намерение списка.
0 голосов
/ 01 марта 2019

Проблема заключается в разделе IAM GCP. Возможно, вы делаете запрос POST с ролью, у которой нет необходимых полномочий.

  1. Просмотрите ваш файл key.json, который содержит поле "client_email"
  2. Перейдите на страницу IAM и установите соответствующую роль в этом письме: роль, которая имеет возможности публикации. (например, Admin)

Это решило мою проблему.

0 голосов
/ 25 сентября 2018
  1. В консоли Dialogflow перейдите в настройки ⚙> на вкладке «Общие», вы увидите раздел идентификатора проекта со ссылкой в ​​Google Cloud, чтобы открыть консоль Google Cloud> Открыть Google Cloud.
  2. (Необязательно) В консоли Cloud перейдите к значку меню> API & Services> Library.Выберите любые API (если есть)> Включить.
  3. В Cloud Console> под значком меню ☰> API и службы> Учетные данные> Создать учетные данные> Ключ учетной записи службы.В разделе «Создать ключ учетной записи службы» выберите «Новая учетная запись службы» в раскрывающемся списке и введите имя проекта, а для роли выберите «Владелец»> «Создать».
    • Файл закрытого ключа JSON будет загружен на ваш локальный компьютер, который вам понадобится.

Для Javascript: В файле index.js вы можете выполнить обслуживаниеАутентификация учетной записи с JWT:

const serviceAccount = {};       // Starts with {"type": "service_account",...

// Set up Google Calendar Service account credentials
  const serviceAccountAuth = new google.auth.JWT({
  email: serviceAccount.client_email,
  key: serviceAccount.private_key,
  scopes: 'https://www.googleapis.com/auth/xxxxxxx'
});

Для Python: есть библиотека Google Auth Python, доступная через pip install google-auth, и вы можете проверить больше здесь .

0 голосов
/ 31 января 2019

При создании intentClient используйте следующее:

key_file_path = "/home/user/folder/service-account-key.json";
client=dialogflow.IntentsClient({
        keyFilename: key_file_path
})

Список вложений

0 голосов
/ 14 сентября 2018

Это сообщение об ошибке обычно выдается, когда приложение не проходит аутентификацию правильно по нескольким причинам, таким как отсутствующие файлы, неверные пути к учетным данным, неправильные назначения переменных среды и другие причины. Помните, что когда вы устанавливаете значение переменной среды в сеансе, оно сбрасывается каждый раз, когда сеанс сбрасывается.

Исходя из этого, я рекомендую проверить правильность назначения файла и пути к учетным данным, а также следовать руководству Получение и предоставление учетных данных службы * вручную, чтобы явно указать свой файл учетной записи сервиса прямо в ваш код; Таким образом, вы сможете установить его навсегда и проверить, правильно ли вы передаете учетные данные службы.

Передача пути к ключу учетной записи службы в примере кода:

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)
...