Не удалось пройти проверку подлинности в облачной серверной части IAP HTTP-запроса облачных задач - PullRequest
0 голосов
/ 21 ноября 2019

Я пытаюсь использовать HTTP-запросы Cloud Tasks для достижения конечной точки Kubernetes за балансировщиком нагрузки HTTPS, защищенным Cloud IAP.

Конечная точка работает с использованием любой учетной записи компании Gsuite, как и должно быть, но когда CloudЗадача выполняет это - Облачный аудит - Журнал доступа к данным (отображаются только важные части)

authenticationInfo: {
}
authorizationInfo: [
  0: {
    permission: "iap.webServiceVersions.accessViaIAP"     
    resource: "projects/<PROJECT_NUMBER>/iap_web/compute/services/<SERVICE_NUMBER>/versions/bs_0"     
    resourceAttributes: {
      service: "iap.googleapis.com"      
      type: "iap.googleapis.com/WebServiceVersion"      
    }
  }
]

status: {
  code: 7    
  message: "PERMISSION_DENIED"    
}

Я использую служебную учетную запись compute-engine для создания задачи, поэтому я предоставил этой учетной записи соответствующие разрешения:

compute-engine service account iam

При создании задачи я добавляю соответствующий адрес электронной почты учетной записи службы OIDC в ​​запрос http

'oidc_token': {'service_account_email': <PROJECT_NUMBER>-compute@developer.gserviceaccount.com}}

Я такжепроверил HTTP-запрос облачных задач на другой конечной точке и присутствует токен носителя проверки подлинности.

На данный момент у меня нет ни малейшего представления о том, как заставить его работать. Спасибо за помощь

1 Ответ

1 голос
/ 21 ноября 2019

Я обнаружил проблему, OIDC требовалась определенная аудитория для работы с Cloud IAP.

Требуемая аудитория - это IID ClientID, который можно найти в разделе «API и службы»> «Учетные данные» в разделе «Идентификаторы клиента OAuth 2.0». с именем, начинающимся с IAP.

OAuth credentials

В качестве примера приведен код Python для добавления задачи, доступ к которой может быть предоставлен Cloud IAP.

# This is the important part, the audience filed is very important! 
oidc_token = {'service_account_email': <PROJECT_NUMBER>-compute@developer.gserviceaccount.com, 'audience': <PROJECT_NUMBER>-<NUMBER_GENERATED_AUTOMATICALLY_BY_IAP>.apps.googleusercontent.com}

http_request = {'http_method': 'POST', 'url': url, 'body': json.dumps(payload).encode(), 'headers': headers, 'oidc_token': oidc_token}
task['schedule_time'] = timestamp
created_task = client.create_task(parent, {'http_request': http_request})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...