アクティビティログとは?
- Google API が呼び出された場合のログ
- API の実行状況が記載されている
- Google サポートチームにサポートを依頼する際に提出するように求められることがある
アクティビティログを有効にするには?
上記の参考ページには下記のように記載されている。
これ以外の方法は案内されていないので、REST APIを使用する方法を行うしかなさそう。
REST API を実行するコマンドとしては curl が推奨されているようだ。
UI から設定する方法を期待していると、突然コマンド実行を要求されるので驚くが、一つずつ見ていこう。
REST API とは?
REST API(RESTful API)とは、汎用性の高いWebサービスアプリケーション同士の通信を支援するAPIの1つの種類です。REST APIは、シンプルかつ柔軟で、互換性に優れているため、さまざまな種類のデータの取り扱いや、最も著名なアプリケーションとのやり取りに最適というメリットがあります。
curl とは?
cURLとは、主にUNIX系OSでよく利用されるコマンドおよびプログラムの一つで、様々なプロトコル(通信手順)を用いてURLで示されるネットワーク上の場所との間でデータの送受信を行うもの。
結局どうすれば?
- WindowsのコンソールまたはMacのターミナルを立ち上げる
- アクティビティログのページで紹介されていた下記のコマンドを実行する
curl -d "{'monitoring':{'requestLogging':{'enabled':true}}}" \
-H 'Authorization: Bearer auth-token' \
-X PATCH -H 'Content-Type: application/json' \
https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/config?
updateMask=monitoring.requestLogging.enabled.
...で有効になるはず。
しかし、上記のコマンド文字列には、下記の情報を調べて置き換える必要がある。
- auth-token
- project-id
それぞれ取得方法を見ていこう。
auth-token の取得方法
- Google Cloud Platform にアクセスする
- Cloud Shell を起動する
- Cloud Shell にて、
gcloud auth print-access-token
を実行する - 下記のダイアログが開いた場合は、承認を選択する
- コマンド実行結果として返された文字列が auth-token である
- auth-token をコピーして、前述のコマンド文字列の
auth-token
の文字列と置き換える
project-id の取得方法
- Google Cloud Platform にアクセスする
- ダッシュボードを選択する
- 下記のプロジェクト情報にプロジェクトIDが表示されている
- プロジェクトIDの値をコピーして、前述のコマンド文字列の
project-id
の文字列と置き換える
コマンドを実行してみる
ここまでの流れで、下記のコマンドに auth-token と project-id の情報が挿入されたはず。
curl -d "{'monitoring':{'requestLogging':{'enabled':true}}}" \
-H 'Authorization: Bearer auth-token' \
-X PATCH -H 'Content-Type: application/json' \
https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/config?
updateMask=monitoring.requestLogging.enabled
コンソールを開いて、コマンドを実行する。
curl -d "{'monitoring':{'requestLogging':{'enabled':true}}}" -H 'Authorization: Bearer
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -X PATCH -H 'Content-Type: application/json'
'https://identitytoolkit.googleapis.com/admin/v2/projects/sample-project/config?
updateMask=monitoring.requestLogging.enabled'
{
"error": {
"code": 403,
"message": "Your application has authenticated using end user credentials from the Google
Cloud SDK or Google Cloud Shell which are not supported by the identitytoolkit.googleapis.com. We
recommend configuring the billing/quota_project setting in gcloud or using a service account
through the auth/impersonate_service_account setting. For more information about service accounts
and how to use them in your application, see https://cloud.google.com/docs/authentication/. If you
are getting this error with curl or similar tools, you may need to specify 'X-Goog-User-Project'
HTTP header for quota and billing purposes. For more information regarding 'X-Goog-User-Project'
header, please check https://cloud.google.com/apis/docs/system-parameters.",
"status": "PERMISSION_DENIED",
"details": [
{
"@type": "type.googleapis.com/google.rpc.ErrorInfo",
"reason": "SERVICE_DISABLED",
"domain": "googleapis.com",
"metadata": {
"service": "identitytoolkit.googleapis.com",
"consumer": "projects/xxxxxxxxxxxxx"
}
}
]
}
}
403 エラーが返される。
403 Forbidden
HTTP の 403 Forbidden クライアントエラーレスポンスコードは、サーバーがリクエストを理解したものの、認証が拒否された
ことを示します。
このステータスは 401 に似ていますが、この場合は再認証しても結果は変わりません。アクセスは恒久的に禁止されており、リソ
ースにアクセスする権限が不足しているなど、アプリケーションのロジックに結びついたものです。
どうやら、クライアント側(コマンド実行側)の問題でアクセスを拒否したということらしい。
レスポンスデータを見ると、message
にエラー情報が記載されているので、読んでみる。
Your application has authenticated using end user credentials from the Google Cloud SDK or Google
Cloud Shell which are not supported by the identitytoolkit.googleapis.com. We recommend
configuring the billing/quota_project setting in gcloud or using a service account through the
auth/impersonate_service_account setting. For more information about service accounts and how to
use them in your application, see https://cloud.google.com/docs/authentication/. If you are
getting this error with curl or similar tools, you may need to specify 'X-Goog-User-Project' HTTP
header for quota and billing purposes. For more information regarding 'X-Goog-User-Project'
header, please check https://cloud.google.com/apis/docs/system-parameters.
機械翻訳をすると、
アプリケーションはGoogle Cloud SDKまたはGoogle Cloud Shellのエンドユーザー認証情報を使用して認証されています
が、これらはidentitytoolkit.googleapis.comではサポートされていません。gcloud の billing/quota_project 設定
を構成するか、auth/impersonate_service_account 設定でサービス アカウントを使用することをお勧めします。サービス
アカウントについての詳細と、アプリケーションでの使用方法については、https://cloud.google.com/docs/authentication/ を参照してください。
curl などでこのエラーが発生する場合、クォータと課金のために 'X-Goog-User-Project' HTTP ヘッダを指定する必要があ
る場合があります。X-Goog-User-Project'
ヘッダに関する詳細は、https://cloud.google.com/apis/docs/system-parameters を参照してください。
X-Goog-User-Project ヘッダを指定する必要がありそうだ。
しかし、値に何を設定すべきか分からない。
色々、検索していくと、下記に情報を投稿してくださった方がいた。
billingの設定が通ってないのか、ヘッダーに X-Goog-User-Project: my-project を入れることで解決
my-project とは?と思ったが、project-id の値を入れれば良さそう。
curl コマンドに下記を追加。
-H "X-Goog-User-Project: <project ID>"
curl コマンドを実行。
どうやら、成功したっぽい。
xxxxxxxxxxxxx@xxxxxxxxxxxxx ~ % curl -d "{'monitoring':{'requestLogging':{'enabled':true}}}" -H
"X-Goog-User-Project: sample-project-id" -H 'Authorization: Bearer
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxx' -X PATCH -H 'Content-Type: application/json' 'https://identitytoolkit.googleapis.com/admin/v2/projects/sample-project-id/config?updateMask=monitoring.requestLogging.enabled'
{
"name": "projects/xxxxxxxxxxxxx/config",
"signIn": {
"phoneNumber": {
"enabled": true
},
"hashConfig": {
"algorithm": "SCRYPT",
"signerKey": "xxxxxxxxxxxxx",
"saltSeparator": "Bw==",
"rounds": 8,
"memoryCost": 14
}
},
"notification": {
"sendEmail": {
"method": "DEFAULT",
"callbackUri": "https://xxxxxxxxxxxxx.firebaseapp.com/__/auth/action",
"dnsInfo": {
"customDomainState": "NOT_STARTED",
"domainVerificationRequestTime": "1970-01-01T00:00:00Z"
}
},
"sendSms": {
"smsTemplate": {
"content": "%LOGIN_CODE% is your verification code for %APP_NAME%."
}
},
"defaultLocale": "en"
},
"quota": {},
"monitoring": {
"requestLogging": {
"enabled": true
}
},
"multiTenant": {},
"authorizedDomains": [
"localhost",
"xxxxxxxxxxxxx.firebaseapp.com",
"xxxxxxxxxxxxx.web.app"
],
"subtype": "FIREBASE_AUTH",
"client": {
"apiKey": "xxxxxxxxxxxxx",
"permissions": {},
"firebaseSubdomain": "xxxxxxxxxxxxx"
},
"mfa": {
"state": "DISABLED"
},
"blockingFunctions": {}
}
- 上記のレスポンスのJSONデータの下記の部分がアクティビティログの有効状態を表しているらしい。
"monitoring": {
"requestLogging": {
"enabled": true
}
},
- 課金の問題もあるので、アクティビティログの取得が不要になったら、コマンドの下記の部分を
'enabled':false
にして、コマンドを実行しておくこと。
curl -d "{'monitoring':{'requestLogging':{'enabled':false}}}" ...
そうすると、先ほどのJSONデータの部分が下記のようになるので、アクティビティログは無効になったと判断できる。
"monitoring": {
"requestLogging": {},
まとめ
- アクティビティログを取得するための情報として、まず auth-token と project-id が必要
- auth-token は Google Cloud Platform で Cloud Shell を開き、下記のコマンドを実行すると取得できる
gcloud auth print-access-token
- project-id は Google Cloud Platform のダッシュボードから参照できる
- PC のコンソールを開き、下記のコマンドにそれぞれ情報を埋め込んだものを実行すると、アクティビティログが有効に設定される
-
<auth-token>
、<project-id>
(project-id は2ヶ所)をそれぞれ置き換えること
-
curl -d "{'monitoring':{'requestLogging':{'enabled':true}}}" \
-H 'Authorization: Bearer <auth-token>' \
-H 'X-Goog-User-Project: <project-id>'
-X PATCH -H 'Content-Type: application/json' \
https://identitytoolkit.googleapis.com/admin/v2/projects/<project-id>/config?updateMask=monitoring.requestLogging.enabled