0

タスク: ローカル コンピューターのすべてのログを 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"
  }
}

現在、次のように設定ここに画像の説明を入力していますが、まだ機能していません。

デバッグ中に、そのタイプのアクセス権を持つ個人アカウントを使用することにしました。 ここに画像の説明を入力

そして、私のアカウントからのトークンを使用したリクエストは完全に正常に機能します:

$ 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 credentials-file を golang/nodejs アプリで使用している場合、許可拒否エラーが発生します:

ここに画像の説明を入力

エクスポートされた json ファイルから生成されたコンソールと ACCESS_TOKEN を使用した同じ例:

$ 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 クラウドのアクセス許可の基本的な部分が欠けているようです。クラウド インターフェイスなどにチェック マークを付ける必要があるように。

4

2 に答える 2

-1

ドキュメントを読むと、必要な役割に関する有用な情報を得ることができます。

roles/logging.viewer (ログ ビューアー)は、プライベート ログを読み取る権限を除いて、Logging のすべての機能への読み取り専用アクセス権をメンバーに付与します。

roles/logging.privateLogViewer (プライベート ログ ビューアー)は、メンバーに、roles/logging.viewer にあるアクセス許可と、プライベート ログを読み取るアクセス許可を付与します。

roles/logging.logWriter (ログ ライター)は、サービス アカウントであるメンバーに付与でき、ログを書き込むのに十分な権限をメンバーに付与できます。この役割は、ログビューアへのアクセスを許可しません。

roles/logging.configWriter (ログ構成ライター)は、ログベースの指標を作成し、シンクをエクスポートする権限をメンバーに付与します。ログビューアを使用するには、roles/logging.viewer ロールを追加します。

roles/logging.admin (ロギング管理者)は、ロギングに関連するすべての権限をメンバーに付与します。これらの権限の完全なリストについては、API 権限を参照してください。roles/viewer (プロジェクト ビューアー) は、プロジェクト レベルで roles/logging.viewer と同じ権限をメンバーに付与します。この役割を付与すると、プロジェクト レベルでほとんどの GCP サービスに権限が適用され、Logging の使用に限定されないことに注意してください。

roles/editor (プロジェクト エディター)は、roles/logging.viewer と同じ権限に加えて、プロジェクト レベルでログ エントリの書き込み、ログの削除、およびログベースのメトリックの作成を行う権限をメンバーに付与します。このロールでは、エクスポート シンクを作成したり、プライベート ログを読み取ったりすることはできません。この役割を付与すると、プロジェクト レベルでほとんどの GCP サービスに権限が適用され、Logging の使用に限定されないことに注意してください。

ソースhttps://cloud.google.com/logging/docs/access-control

これに基づいて、サービス アカウントに適切な権限を付与する必要があります。

承認方法を定義する 2 番目のステップ。たとえば、サービス アカウント JSON を使用して、カスタム python ツールを使用してトークンを作成および更新できます。

とにかく、ログを Stackdriver に書き込む必要がある場合は、Agent を使用することをお勧めします。これは、ログを正しい方法で削除するための最良のオプションです。

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

アプリケーションからログを書き込む必要がある場合は、ライブラリを簡単に使用して、特定のサービス アカウント用に生成された JSON キーを使用して認証できます。

于 2018-12-24T05:31:14.347 に答える