要約

  • 行レベルのセキュリティが適用されたテーブルのドライランは、情報漏えいを防ぐため常に0バイトを返す。費用の見積もりには使えない。
  • 実行後の請求対象バイト数なども非表示になる。予算管理には、データの閲覧権限とは別に、誰がどこまで費用を確認するかという設計が必要になる。

「自分の部署が使った分は、自分の部署で把握する」。クラウド費用の管理方針としては、いかにも筋が通っている。BigQueryで行レベルのセキュリティを使うと、その方針にはもう一行必要だ。把握するための情報を、誰に見せてよいのか。

この機能は、同じテーブルの中でも利用者ごとに閲覧できる行を分ける。営業担当者には担当範囲だけを見せる、といった使い方だ。ところが、隠した行の情報は、検索結果以外からも漏れる。処理量や実行時間、請求に関する数値が、見せなかった情報の手がかりになる。

そこでBigQueryは、一部の統計も隠す。Googleのクエリ実行ガイドによれば、こうしたテーブルを対象にしたドライランは常に0バイトを返し、費用見積もりには頼れない。ドライラン自体は無料で、クエリの計算枠も使わない。その後に本番のクエリを実行すれば、適用される料金体系に従って扱われる。

このゼロは料金係の回答ではない。秘密を守る係の回答だ。経理の資料に貼り付けても、担当は変わらない。

実行が終わっても空欄は残る

行レベルのセキュリティに関する推奨事項では、対象テーブルへのクエリについて、処理したバイト数とパーティション数、請求対象バイト数、クエリ計画の段階などが隠されると説明している。実行結果が出れば全部わかる、という話ではない。

費用集計によく使われる INFORMATION_SCHEMA.JOBS にも、その影響が現れる。行アクセスのポリシーがあるテーブルを読むクエリでは、total_bytes_billed と total_bytes_processed の値が空になる。公式の利用例は、影響を受けた可能性のあるジョブを数えられる一方、その請求対象の利用量にはアクセスできないと明記している。

ここで社内の集計処理が「空欄はゼロに統一」と気を利かせると、話が変わる。たとえば部署別の費用順位を作る場合、統計の見えない仕事ほど安く見えてしまう。これは仮定の例だが、誤りの場所は具体的だ。利用量の欠測を、利用量ゼロという実績へ変えた処理にある。

データ保護は正常に働いている。会議資料のほうが、数字を作っている。

管理者を呼べば解決、とはいかない

Googleによると、プロジェクトのオーナーは関連する監査ログで処理バイト数を確認できる。ただし、ジョブの詳細にこの請求メタデータが表示されるわけではなく、それを開放する特定の権限やロールもない。

一方、Cloud Billing Viewerには請求情報を見る権限がある。だからこそGoogleは、フィルタリングされた行だけを見るべき利用者に、このような権限を与えることを避けるよう勧めている。請求情報から保護対象の情報が推測される余地があるからだ。

費用を開示して利用者の行動を変えたい。データは決められた範囲にとどめたい。どちらも企業の仕事であり、片方を標語にしてもう片方へ押しつけることはできない。

全体の請求を確認できる担当者が、各部署には適切な粒度で報告する。そのような役割分担を設けるなら、報告を作る作業と、配賦への異議を扱う作業も予算に含める必要がある。「クラウドの見える化」は、見る人の権限を決めて初めて仕様になる。

少なく見えることと、安く読むこと

もう一つの落とし穴は、見える行が少ないほど処理も安い、という直感だ。

Googleは、行アクセスのポリシーに含まれるフィルターが、パーティションやクラスタを絞り込んで処理対象を減らす仕組みに参加しないと説明する。ポリシーにパーティション列を指定しただけでは、その絞り込みの効果は得られない。クエリ自体の条件による絞り込みとは区別が必要だ。

見せる範囲を制限する設定は、そのまま処理量の割引券にはならない。BigQueryの料金説明でも、オンデマンド料金は処理バイト数、容量型の料金は計算能力とその時間という別の基準を持つ。共有データを検索する費用は、データ所有者ではなく、クエリを実行するプロジェクトにひもづく請求先が負担する。

閲覧範囲、処理範囲、支払い先。この三つが一致すると思い込むと、予算の話はすぐに迷子になる。

費用管理の公式ガイドには、オンデマンド利用の日次クォータや、クエリごとの最大請求バイト数の設定がある。これらは管理のための設定だ。確認した文書だけでは、最大請求バイト数と行レベルの保護によるゼロの見積もりとの動作関係をすべて説明できないため、対象環境での権限に沿った確認が要る。ゼロという表示から、自動的に安全とも無料とも判定できない。

顧客の実際の請求書と社内配賦の記録は今回の資料にない。損失額を計算するにはそれが必要だ。ただ、組織が引き受ける仕事は明確になっている。統計が隠されても、請求と説明責任は残る。

まず空欄を空欄のまま扱う。次に、その空欄をまたいで誰が請求を確認し、どこまで各部署へ伝えるかを決める。BigQueryは秘密を守っている。経理まで秘密主義になる必要はない。