Облако Google: разрешения учетной записи службы - PullRequest
0 голосов
/ 24 декабря 2018

Задача: я хочу сохранить все журналы с моего локального компьютера в журналах Google.

Проблема, с которой я столкнулся, заключается в том, что я не могу создать учетную запись службы с правильными разрешениями.Даже если я дам владельцу разрешение, все еще получая сообщение об ошибке «Мне отказано в разрешении» (ACCESS_TOKEN - его токен от ключа json учетной записи):

cat data.json | http POST 
"https://logging.googleapis.com/v2/entries:write"
Authorization:"Bearer $ACCESS_TOKEN"

Response:
    {
"error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

В настоящее время я установил: enter image description hereи он все еще не работает.

Во время отладки я решил использовать личный аккаунт с таким типом доступа: enter image description here

И запрос с токеном из моего аккаунтаработает отлично:

$ cat data.json | http POST 
"https://logging.googleapis.com/v2/entries:write"
Authorization:"Bearer `gcloud auth application-default print-access-token`"


HTTP/1.1 200 OK
Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
Cache-Control: private
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Date: Sun, 23 Dec 2018 21:38:05 GMT
Server: ESF
Transfer-Encoding: chunked
Vary: Origin
Vary: X-Origin
Vary: Referer
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

{}

Но если я использую экспортированный файл учетных данных stackdriver-station-1.json с приложением golang / nodejs, я получаю сообщение об ошибке отказа в разрешении:

enter image description here

тот же пример с использованием консоли и ACCESS_TOKEN, сгенерированный из экспортированного файла json:

$ cat data.json | http POST
"https://logging.googleapis.com/v2/entries:write"
Authorization:"Bearer $ACCESS_TOKEN"

HTTP/1.1 403 Forbidden
Alt-Svc: quic=":443"; ma=2592000; v="44,43,39,35"
Cache-Control: private
Content-Encoding: gzip
Content-Type: application/json; charset=UTF-8
Date: Sun, 23 Dec 2018 22:39:51 GMT
Server: ESF
Transfer-Encoding: chunked
Vary: Origin
Vary: X-Origin
Vary: Referer
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

{
"error": {
    "code": 403,
    "message": "The caller does not have permission",
    "status": "PERMISSION_DENIED"
  }
}

Любые предложения приветствуются!Мне кажется, что мне не хватает какой-то фундаментальной части облачных разрешений Google.Как будто мне нужно поставить галочку в облачном интерфейсе или что-то в этом роде.

1 Ответ

0 голосов
/ 24 декабря 2018

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

role / logging.viewer (Logs Viewer) предоставляет участникам доступ только для чтения ко всемфункции ведения журнала, за исключением разрешения на чтение личных журналов.

role / logging.privateLogViewer (Private Logs Viewer) дает членам разрешения, найденные в role / logging.viewer, плюс разрешениечтение личных журналов.

role / logging.logWriter (Logs Writer) может быть предоставлено участникам, которые являются учетными записями служб, и дает участникам достаточно прав для записи журналов.Эта роль не предоставляет доступ к средству просмотра журналов.

role / logging.configWriter (модуль записи конфигурации журналов) предоставляет участникам разрешения на создание метрик на основе журналов и приемников экспорта.Чтобы использовать средство просмотра журналов, добавьте роль role / logging.viewer.

role / logging.admin (Администратор ведения журнала) предоставляет участникам все разрешения, связанные с ведением журнала.Полный список этих разрешений см. В разделе Разрешения API.Роли / средство просмотра (Project Viewer) предоставляет участникам те же права, что и для role / logging.viewer на уровне проекта.Обратите внимание, что предоставление этой роли применяет разрешения к большинству служб GCP на уровне проекта и не ограничивается использованием ведения журнала.

role / editor (Project Editor) дает членам такие же разрешениякак Роли / logging.viewer, плюс разрешения на запись записей журнала, удаление журналов и создание метрик на основе журналов на уровне проекта.Роль не позволяет создавать приемники экспорта или читать личные журналы.Обратите внимание, что предоставление этой роли применяет разрешения для большинства служб GCP на уровне проекта и не ограничивается использованием ведения журнала.

Источник https://cloud.google.com/logging/docs/access-control

Исходя из этого, выдолжен дать правильные разрешения вашей учетной записи службы.

Второй шаг, чтобы определить, как вы хотите авторизоваться.Например, вы можете использовать служебную учетную запись JSON для создания и обновления токена с помощью пользовательского инструмента python.

Но в любом случае, если вам нужно записать свои журналы в Stackdriver, я предлагаю использовать Agent.Это лучший вариант правильного удаления журналов.

https://cloud.google.com/logging/docs/agent/authorization

Если вам нужно писать журналы из приложения, вы можете легко использовать библиотеку и авторизовать ее, используя сгенерированный ключ JSON.для конкретной учетной записи службы.

...