ログバケット作成時に「リクエストしたエンティティは見つかりませんでした」

記事タイトルとURLをコピーする

G-gen の杉村です。Cloud Logging のログバケットを作成する際に リクエストしたエンティティは見つかりませんでした というメッセージが出力されました。原因と対処法を紹介します。

はじめに・前提知識

Cloud Logging の ログバケット はログを保管することに特化した Cloud Logging 独自のストレージです。「Cloud Storage バケット」とは名称がよく似ていますが関係がありません。

Cloud Logging の詳細な解説は、以下の記事をぜひご参照ください。

blog.g-gen.co.jp

事象

ある組織配下のプロジェクトにおいて、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 のアップデート情報をつぶやいています。