G-gen の杉村です。Cloud Logging のログバケットを作成する際に リクエストしたエンティティは見つかりませんでした
というメッセージが出力されました。原因と対処法を紹介します。
はじめに・前提知識
Cloud Logging の ログバケット はログを保管することに特化した Cloud Logging 独自のストレージです。「Cloud Storage バケット」とは名称がよく似ていますが関係がありません。
Cloud Logging の詳細な解説は、以下の記事をぜひご参照ください。
事象
ある組織配下のプロジェクトにおいて、Cloud Logging コンソールで新しいログバケットを作成することを試みました。
作成ボタンを押すと、以下のメッセージが表示され、作成することができませんでした。
リクエストしたエンティティは見つかりませんでした。
このメッセージだけでは、何を意味しているのか分かりません。詳細なエラーメッセージを得るために、今度は gcloud コマンドでのログバケット作成を試しました。すると、以下のような出力となりました
$ gcloud logging buckets create my-log-bucket --location=global --project=my-current-project ERROR: (gcloud.logging.buckets.create) NOT_FOUND: Project does not exist: my-old-project
エラーメッセージ中の my-old-project
は仮名ですが、既に削除済みのプロジェクトでした。これは何を意味しているのでしょうか。
原因調査
調査
gcloud コマンドを実行したときのエラーログに着目します。
ERROR: (gcloud.logging.buckets.create) NOT_FOUND: Project does not exist: my-old-project
ログバケット作成先のプロジェクトは my-current-project
を指定しているのにも関わらず、エラーメッセージは my-old-project
(仮名) が存在していない、というものです。社内で my-old-project
のかつての管理者に確認したところ、次に示すことが分かりました。
判明した原因
プロジェクト my-old-project
は、検証目的で Cloud KMS 鍵を配置していたプロジェクトでした。また、この事象が起きた日の少し前に、組織レベル でログバケットの CMEK 暗号化を有効化する検証を行っていました。
CMEK 暗号化とは Customer-Managed Encryption Key の略であり、Google 管理ではなく独自管理の鍵でストレージを暗号化する機能のことです。Cloud Logging では組織レベルで CMEK を使うように指定することで、それ以降にその組織で作成される全てのログバケットが指定の KMS キーで暗号化されるようになります。
この事象が起きた組織では、直前にこの機能の挙動の検証を行っており、その際の暗号化用 KMS キーとして my-old-project
内の KMS キーを指定していました。検証が終わり、my-old-project
は削除されましたが、組織レベルの CMEK 暗号化設定を削除し忘れ ていました。
そのためログバケットを新規作成しようとした際、Google は CMEK 暗号化のための KMS キーを my-old-project
に探しに行き、プロジェクトが存在しないため NOT_FOUND: Project does not exist
というメッセージを出力したのです。
対処法
以下のコマンドで、現在の設定を確認します。${ORGANIZATION_ID}
は自身の組織 ID に置き換えます。
$ gcloud logging settings describe --organization=${ORGANIZATION_ID} { "kmsKeyName": "projects/my-old-project/locations/asia-northeast1/keyRings/audit-log-keyring/cryptoKeys/bucket-cmek", "kmsServiceAccountId": "cmek-o123456789012@gcp-sa-logging.iam.gserviceaccount.com", "name": "organizations/123456789012/settings", "storageLocation": "asia-northeast1" }
設定値 kmsKeyName
が存在しており、CMEK 暗号化を強制する設定が残っていることが分かります。以下のコマンドで削除します。
$ gcloud logging settings update --organization=${ORGANIZATION_ID} --clear-kms-key
ログバケットのデフォルトのロケーションも、デフォルトである global
に戻しておきます。
$ gcloud logging settings update --organization=${ORGANIZATION_ID} --storage-location=global
以下のコマンドで、設定 kmsKeyName
が消えていることを確認します。
$ gcloud logging settings describe --organization=${ORGANIZATION_ID} { "kmsServiceAccountId": "cmek-o123456789012@gcp-sa-logging.iam.gserviceaccount.com", "name": "organizations/123456789012/settings", "storageLocation": "global" }
設定を修正後は、無事にログバケットの作成が成功しました。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it