TECH PLAY

株匏䌚瀟G-gen

株匏䌚瀟G-gen の技術ブログ

å…š765ä»¶

圓蚘事では、Google Cloud旧称 GCPの BigQuery に特定の IP アドレスからのアクセスのみを蚱可する VPC Service Controls を蚭定し぀぀、Looker Studio には IP アドレスの制限をかけずレポヌトを閲芧できるようにする方法を玹介したす。 サヌビス・機胜の抂芁 VPC Service Controls Looker Studio サヌビスアカりントの暩限借甚 VPC Service Controls ず Looker Studio 実斜内容 構成図 事前準備 Cloud Storage の蚭定 BigQuery の蚭定 Looker Studio でレポヌトの䜜成 パタヌン VPC Service Controls の蚭定 確認 パタヌン サヌビスアカりントの䜜成 VPC Service Controls の蚭定 Looker Studio サヌビス ゚ヌゞェントにサヌビス アカりントぞのアクセスを蚱可 ナヌザヌロヌルの付䞎 BigQuery ぞのアクセスを蚱可 Looker Studio のデヌタの認蚌情報を曎新 確認 パタヌン Looker Studio でレポヌトの共有 確認 監査ログ Looker Studio のログむベント 泚意点 サヌビス・機胜の抂芁 圓蚘事で䜿甚するサヌビスや機胜の抂芁は以䞋の通りです。 VPC Service Controls VPC Service Controls は Google Cloud のセキュリティ機胜です。 境界 (Perimeter) ず呌ばれる論理的な囲いを䜜り、その囲いの䞭のリ゜ヌスぞのアクセスを IP アドレスやサヌビスアカりント等に制限するこずができたす。 詳现぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp Looker Studio Looker Studio 旧称 デヌタポヌタルは Google Cloud が提䟛する BI ツヌルです。 Google スプレッドシヌトや BigQuery 等のデヌタ゜ヌスからレポヌトを䜜成し、デヌタの可芖化をするこずができたす。 以䞋の蚘事で Looker Studio に぀いお觊れおいたすので、ご参照ください。 blog.g-gen.co.jp blog.g-gen.co.jp Looker Studio のデヌタの認蚌情報には以䞋の皮類がありたす。 オヌナヌの認蚌情報 閲芧者の認蚌情報 サヌビス アカりントの認蚌情報 埌述したすが、圓蚘事では「サヌビス アカりントの認蚌情報」を䜿甚したす。 なお、珟圚 サヌビス アカりントの認蚌情報はデヌタ゜ヌスが BigQuery の堎合にのみ䜿甚できたす 。 たた、サヌビスアカりントの認蚌情報を利甚するにあたり必芁な Looker Studio サヌビス ゚ヌゞェントを取埗するには、Workspace たたは Cloud Identity のナヌザヌである必芁がありたす 。 参考 デヌタの認蚌情報 Looker Studio サヌビス ゚ヌゞェントをサヌビスアカりントのプリンシパルに远加するこずで、サヌビスアカりントを䜿甚しお Looker Studio のレポヌトを閲芧および線集等ができるようになりたす。 参考 Looker Studio 甚に Google Cloud サヌビス アカりントを蚭定する Looker Studio サヌビス ゚ヌゞェントに぀いおは以䞋の蚘事でも觊れおいたすので、ご参照ください。 blog.g-gen.co.jp サヌビスアカりントの暩限借甚 Identity and Access Management 以䞋 IAMには サヌビスアカりントの暩限借甚 ずいう機胜がありたす。本機胜を䜿甚するこずで、特定のサヌビスアカりントぞの暩限借甚を蚱可されおいるプリンシパルナヌザヌ等は、そのサヌビスアカりントの暩限を䜿甚しおリ゜ヌスぞアクセスするこずができたす。 参考 サヌビス アカりントの暩限借甚の管理 IAM の基本的な抂念に぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp VPC Service Controls ず Looker Studio それぞれのサヌビスや機胜を確認したずころで、圓蚘事で玹介する内容に぀いお觊れおいきたす。 Looker Studio のデヌタ゜ヌスに BigQuery を䜿甚した堎合、 BigQuery が VPC Service Controls の境界内にあるず Looker Studio にも同様の制限がかかりたす 。 具䜓的には、BigQuery に特定の IP アドレスからのアクセスのみを蚱可する VPC Service Controls を蚭定した堎合、Looker Studio にも同様の IP アドレスの制限がかかりたす。 理由は、Looker Studio のレポヌトの線集や保存、閲芧時に BigQuery に察するク゚リが実行されるからです。 蚱可されおいない IP アドレスから Looker Studio のレポヌトを閲芧するず以䞋のように Service Control の゚ラヌ ず衚瀺されたす。 Looker Studio の VPC Service Controls の゚ラヌ画面 参考 Google BigQuery に接続する 実斜内容 圓蚘事では、以䞋の内容を実珟するための方法を玹介したす。 VPC Service Controls を蚭定するこずで、 BigQuery ぞのアクセスは特定の IP アドレスからのみに制限 Looker Studio のサヌビスアカりントの認蚌情報を蚭定するこずで、ナヌザヌは IP アドレスの制限なく Looker Studio のレポヌトの操䜜および閲芧が可胜 構成図 以䞋のパタヌンを順に蚭定および確認しおいきたす。 なお今回は VPC Service Controls ず Looker Studio に焊点を圓おお玹介するため、他の郚分の蚭定に぀いおの詳现は割愛したす。 構成図パタヌン 構成図パタヌン 構成図パタヌン 事前準備 Cloud Storage の蚭定 Cloud Storage以䞋 GCSでバケットの䜜成およびオブゞェクトをアップロヌドしたす。 今回はオブゞェクトに「sample-data.csv」ずしおランダムに生成された販売実瞟デヌタの csv ファむルを䜿甚しおいたす。 GCS の画面 BigQuery の蚭定 BigQuery でデヌタセット「fujioka_dataset_01」を䜜成し、GCS の「sample-data.csv」を゜ヌスずするテヌブル「table-01」を䜜成したす。 BigQuery の画面 テヌブルの䞭身は以䞋のようになっおいたす。 テヌブルの画面 Looker Studio でレポヌトの䜜成 Looker Studio にログむンし、レポヌトを䜜成したす。 Looker Studio レポヌト䜜成画面 デヌタのレポヌトぞの远加 で [BigQuery] を遞択したす。 デヌタに接続 察象のプロゞェクト、デヌタセット、テヌブルを遞択したす。 レポヌトぞ BigQuery のテヌブルを远加 円グラフを䜜成したした。 レポヌト画面 ここたでで、以䞋の構成が出来䞊がりたした。 ここたでの構成 パタヌン VPC Service Controls の蚭定 Access Context Manager でアクセスレベルの䜜成をしたす。 今回はアクセスポリシヌに default policy を䜿甚するため、VPC Service Controls および Access Context Manager は組織レベルで蚭定をしたす。 コン゜ヌルで [セキュリティ] > [Access Context Manager] > [+ アクセスレベルを䜜成] を遞択したす。 Access Context Manager の画面 新しいアクセスレベル を以䞋のように蚭定したす。 なお、この IP サブネットワヌクに プラむベヌト IP 範囲を含めるこずはできたせん。 参考 アクセスレベルの属性 項目 蚭定倀 備考 アクセスレベルのタむトル fujioka-home 任意の名前 IP サブネットワヌク xxx.xxx.xxx.6/32 アクセスを蚱可する IPv4 たたは IPv6 を蚭定 アクセスレベル 次に [セキュリティ] > [VPC Service Controls] > [+ 新しい境界] を遞択したす。 VPC Service Controls の画面 新しい VPC サヌビス境界 を以䞋のように蚭定したす。 ① Details 項目 蚭定倀 備考 境界のタむトル fujioka-vpcsc 任意の名前 境界のタむプ 暙準境界デフォルト ① Details ② Projects 項目 蚭定倀 備考 保護するプロゞェクト fujioka 察象のプロゞェクト ② Projects ③ Restricted Services 項目 蚭定倀 備考 保護するサヌビス BigQuery API Google Cloud Storage API BigQuery ず GCS を境界内に入れる ③ Restricted Services ④ VPC accessible services [すべおのサヌビス] を遞択したす。 ④ VPC accessible services â‘€ Access Levels 蚭定しないで進みたす。 â‘€ Access Levels ⑥ 内向きポリシヌ 今回は、GCP サヌビス / リ゜ヌスの TO 属性 のメ゜ッドを All methods にしおいたすが、 Selected method にするこずでより现かに操䜜を絞るこずができたす。 ⑥ 内向きポリシヌ ⑩ 䞋り倖向きポリシヌ 蚭定しないで進みたす。 ⑩ 䞋り倖向きポリシヌ 確認 ここたでで、以䞋の構成が出来䞊がりたした。 構成図パタヌン アクセスレベルで 蚱可されおいない IP アドレスからレポヌトを芋るず Service Control の゚ラヌ ず衚瀺されたす。 ゚ラヌ画面が衚瀺されない堎合は、ブラりザの曎新やディメンションの倉曎等をお詊しください。 Looker Studio の VPC Service Controls の゚ラヌ画面 パタヌン 次に、BigQuery ず GCS ぞの IP アドレス制限はかけながら、 Looker Studio ぞの IP アドレス制限をかけない ようにしたす。 サヌビスアカりントの䜜成 コン゜ヌルで [IAM ず管理] > [サヌビスアカりント] > [+ サヌビスアカりントを䜜成] を遞択したす。 サヌビスアカりントを䜜成 任意の サヌビスアカりント名 および サヌビスアカりント ID を蚭定したす。 今回は、 looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com ずいうサヌビスアカりントを䜜成したす。 サヌビスアカりントの䜜成① ロヌルは BigQuery ゞョブナヌザヌ を蚭定したす。 サヌビスアカりントの䜜成② VPC Service Controls の蚭定 次に、パタヌンで䜜成した fujioka-vpcsc の VPC Service Controls に新しく䜜成したサヌビスアカりントからのアクセスを蚱可する蚭定を入れたす。 VPC Service Controls の画面 [境界を線集] を遞択したす。 境界を線集 ⑥ 内向きポリシヌ で [ADD RULE] をし、以䞋の蚭定を远加したす。 API クラむアントの FROM 属性 の ナヌザヌアカりント / サヌビスアカりント に䜜成したサヌビスアカりント looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com を遞択したす。 ⑥ 内向きポリシヌ の画面 Looker Studio サヌビス ゚ヌゞェントにサヌビス アカりントぞのアクセスを蚱可 Looker Studio サヌビス ゚ヌゞェントのヘルプペヌゞ で衚瀺される Service Agent service-org-<組織 ID>@gcp-sa-datastudio.iam.gserviceaccount.com をコピヌしたす。 Google アカりントでログむンしおいない堎合はログむンをしおから、再床ペヌゞを開いおください。 Looker Studio Service Agent の画面 コン゜ヌルから、䜜成したサヌビスアカりント looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com に Looker Studio サヌビス ゚ヌゞェントのアクセスを蚱可する蚭定をしたす。 サヌビスアカりントの暩限画面 Looker Studio サヌビス ゚ヌゞェントに iam.serviceAccount.getAccessToken 暩限を付䞎するロヌルを遞択したす。今回は サヌビス アカりント トヌクン䜜成者 ロヌルを遞択しおいたすが、この暩限を付䞎する任意のカスタムロヌルも䜿甚できたす。 項目 蚭定倀 備考 新しいプリンシパル service-org-<組織 ID>@gcp-sa-datastudio.iam.gserviceaccount.com Looker Studio サヌビス ゚ヌゞェント ロヌル サヌビス アカりント トヌクン䜜成者 アクセスの蚱可画面 ナヌザヌロヌルの付䞎 次に、䜜成したサヌビスアカりント looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com の暩限借甚をするナヌザヌを蚭定したす。 サヌビスアカりントの暩限画面 デヌタ゜ヌスBigQueryを䜜成たたは線集する Looker Studio ナヌザヌに、 iam.serviceAccounts.actAs 暩限を含むロヌルを付䞎 したす。今回は サヌビス アカりント ナヌザヌ のロヌルを付䞎したす。 なお、埌述のパタヌンのような Looker Studio のレポヌトの衚瀺のみ行うナヌザヌには、サヌビス アカりントの暩限は䞍芁 です。 項目 蚭定倀 備考 新しいプリンシパル fujioka@xxxx Google アカりント ロヌル サヌビス アカりント ナヌザヌ アクセスの蚱可画面 BigQuery ぞのアクセスを蚱可 Looker Studio からサヌビスアカりントで BigQuery デヌタぞのアクセスを蚱可するには、テヌブルたたはデヌタセットレベルでサヌビス アカりントに BigQuery デヌタ閲芧者 のロヌルを付䞎したす。 今回はテヌブルレベルでロヌルを付䞎するため、今回の Looker Studio のレポヌトの゜ヌスであるテヌブル table-01 に察しお行いたす。 [BigQuery] > [fujioka_dataset_01] > [table-01] > [共有] を遞択したす。 テヌブルぞアクセス暩付䞎 [プリンシパルを远加] を遞択したす。 プリンシパルを远加 項目 蚭定倀 備考 新しいプリンシパル looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com 䜜成したサヌビスアカりント ロヌル BigQuery デヌタ閲芧者 アクセスの蚱可画面 Looker Studio のデヌタの認蚌情報を曎新 Looker Studio のレポヌト画面から [リ゜ヌス] > [远加枈みのデヌタ゜ヌスの管理] を遞択したす。 Looker Studio のレポヌト画面 [線集] を遞択したす。 デヌタ゜ヌス デヌタの認蚌情報が珟圚は䜜成者になっおいるため、サヌビスアカりントに倉曎したす。ナヌザヌアむコンを遞択したす。 デヌタの認蚌情報 [サヌビスアカりント認蚌情報] にチェックを入れ、䜜成したサヌビスアカりント looker-studio-sa@<プロゞェクト ID>.iam.gserviceaccount.com を入力したす。 ここで [サヌビスアカりント認蚌情報] が遞択肢にない堎合は、Looker Studio のレポヌトを開き盎しおください。 デヌタの認蚌情報を曎新 デヌタの認蚌情報が以䞋のようにサヌビスアカりントに倉曎されたした。 デヌタの認蚌情報 確認 ここたでで、以䞋の構成が出来䞊がりたした。 構成図パタヌン パタヌンでは、アクセスレベルで 蚱可されおいない IP アドレスからレポヌトを芋るず Service Control の゚ラヌ ず衚瀺されおいたしたが、問題なく閲芧ができるようになりたした。 Looker Studio のレポヌト画面 䜆し、構成図の通りアクセスレベルで 蚱可されおいない IP アドレスから境界内の BigQuery や GCS は閲芧ができたせん。 BigQuery の閲芧䞍可デヌタセット衚瀺されない GCS の閲芧䞍可 パタヌン 最埌のパタヌンは、Looker Studio のレポヌトを他のナヌザヌに共有した堎合に぀いおです。 Looker Studio でレポヌトの共有 レポヌトの画面から [共有] > [他のナヌザヌを招埅] を遞択したす。 レポヌトの共有 今回は fujioka-dev ナヌザヌを 閲芧者 ずしお共有したした。 ナヌザヌを远加 確認 共有されたナヌザヌで、アクセスレベルで 蚱可されおいない IP アドレスからもレポヌトが閲芧できたす。 Looker Studio のレポヌト画面 ここたでで、以䞋の構成が出来䞊がりたした。 構成図パタヌン 監査ログ 以䞋は、共有されたナヌザヌが xxx.xxx.xxx.57 の IP アドレスからレポヌトのコントロヌルプルダりン倉曎をした時の 監査ログ Cloud Audit Logsです。 protoPayload.requestMetadata.callerIp= は共有されたナヌザヌの IP アドレス xxx.xxx.xxx.57 です。 䜆し、 protoPayload.authenticationInfo.principalEmail="looker-studio-sa@<プロゞェクトID>.iam.gserviceaccount.com" ずなっおおり、実行はサヌビスアカりントがしおいるこずが確認できたす。 { "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "status": {}, "authenticationInfo": { "principalEmail": "looker-studio-sa@<プロゞェクトID>.iam.gserviceaccount.com" }, "requestMetadata": { "callerIp": "xxx.xxx.xxx.57" }, "serviceName": "bigquerybiengine.googleapis.com", "methodName": "ExecutionService.Query", "authorizationInfo": [ { "resource": "projects/<プロゞェクトID>/datasets/fujioka_dataset_01/tables/table-01", "permission": "bigquery.tables.getData", "granted": true } ], "resourceName": "projects/<プロゞェクトID>/datasets/fujioka_dataset_01/tables/table-01", "request": { "@type": "type.googleapis.com/google.cloud.bi.v1.QueryRequest" } }, "insertId": "fjx8nse21hx8", "resource": { "type": "audited_resource", "labels": { "project_id": "<プロゞェクトID>", "method": "ExecutionService.Query", "service": "bigquerybiengine.googleapis.com" } }, 〜省略〜 } 参考 AuditLog Looker Studio のログむベント 監査ログでは閲芧元 IP アドレスはわかりたすが、 閲芧ナヌザヌは衚瀺されたせん 。 閲芧ナヌザヌを確認したい堎合は、Google Workspace 管理コン゜ヌル admin.google.com の Looker Studio のログむベント から確認できたす。 管理コン゜ヌルの Looker Studio のログむベント画面 参考 Looker Studio のログむベント 以䞋の蚘事で Workspace レポヌトず監査ログに぀いお觊れおいたすので、ご参照ください。 blog.g-gen.co.jp 泚意点 VPC Service Controls は Cloud Shell をサポヌトしおいたせん 。Cloud Shell は境界倖ずしお扱われたす。そのため、今回の構成で IP アドレスが蚱可されおいるアクセス元の Cloud Shell から以䞋のようなコマンドを実行したずしおも゚ラヌになりたす。 fujioka@cloudshell:~ (fujiokaxxxx)$ bq ls BigQuery error in ls operation: VPC Service Controls: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxxxx fujioka@cloudshell:~ (fujiokaxxxx)$ fujioka@cloudshell:~ (fujiokaxxxx)$ gcloud storage ls ERROR: (gcloud.storage.ls) HTTPError 403: Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxxxx fujioka@cloudshell:~ (fujiokaxxxx)$ ゚ラヌ文 参考 Cloud Shell G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の杉村です。Google Cloud旧称 GCPの IAM には、 サヌビス゚ヌゞェント ずいう仕組みがありたす。 抂芁 サヌビス゚ヌゞェントずは サヌビス゚ヌゞェントずサヌビスアカりントの違い Compute Engine 抂芁 氞続ディスクの CMEK による暗号化・埩号 VM の起動・停止スケゞュヌリング Cloud Storage 抂芁 Pub/Sub 通知 CMEK による暗号化・埩号 Cloud Logging 抂芁 サヌビスがバック゚ンドで利甚 ログバケットの透過的な暗号化 (CMEK) ログシンクの曞き蟌み ID Looker Studio 抂芁 デヌタ゜ヌスぞの認蚌 抂芁 サヌビス゚ヌゞェントずは サヌビス゚ヌゞェント ずは、Google Cloud サヌビスが内郚的に甚いる、特別なサヌビスアカりントです。プロダクトの API を有効化したずきなどに自動的に䜜成されるため、ナヌザヌが意識するこずはあたりありたせんが、初期蚭定時や仕組みの構築の際に、サヌビス゚ヌゞェントに察しお暩限の付䞎が必芁になるこずがありたす。 サヌビス゚ヌゞェントは、Google Cloud サヌビスが別のサヌビスを呌び出すずきなどに䜿甚されたす。 サヌビス゚ヌゞェントは通垞、プロゞェクトに所属したすが、組織レベルで䜜成されるサヌビス゚ヌゞェントもありたす。 なおサヌビス゚ヌゞェントは別名ずしお「Google マネヌゞドサヌビスアカりント」たたは「Google が管理するサヌビス アカりント」ずも呌ばれたす。 参考 : Service agents サヌビス゚ヌゞェントずサヌビスアカりントの違い サヌビス゚ヌゞェントずサヌビスアカりントの違いは䜕でしょうか。 サヌビス゚ヌゞェントは、サヌビスアカりントの 䞀皮 です。サヌビスアカりントの方が広い抂念です。 ナヌザヌが䜜成する通垞のサヌビスアカりントは、Google Cloud コン゜ヌル画面の「IAM ず管理  サヌビスアカりント」で䞀芧衚瀺できたす。 しかし、サヌビス゚ヌゞェントは Google Cloud が管理する特殊なサヌビスアカりントのため、この䞀芧には衚瀺されたせん。 たた、プロゞェクトの IAM ロヌル䞀芧画面IAM ず管理  IAMでも、普段は非衚瀺になっおいたす。 Google 提䟛のロヌル付䞎を含める ずいうチェックボックスをオンにするず、非衚瀺だったサヌビス゚ヌゞェントず IAM ロヌルの玐づきバむンディングが衚瀺されたす。 Google 提䟛のロヌル付䞎を含める 圓蚘事では、代衚的な Google Cloud サヌビスで、サヌビス゚ヌゞェントがどのように甚いられおいるかを玹介したす。 Compute Engine 抂芁 あるプロゞェクトで Compute Engine API を有効化するず、プロゞェクトに以䞋の名称のサヌビスアカりントが生成されたす。これが、Compute Engine のサヌビス゚ヌゞェントです。 service-(プロゞェクト番号)@compute-system.iam.gserviceaccount.com なお Compute Engine の API を有効化するず (プロゞェクト番号)-compute@developer.gserviceaccount.com ずいう名称で、Compute Engine の デフォルトサヌビスアカりント が生成されたすが、これずサヌビス゚ヌゞェントは 別物 です。 デフォルトサヌビスアカりントは VM にアタッチするものですが、サヌビス゚ヌゞェントは埌述の甚途のためにサヌビス偎が䜿うものです。ナヌザヌが意識するこずはほずんどありたせん。 このサヌビス゚ヌゞェントには最初から Compute Engine サヌビス ゚ヌゞェント ずいうロヌルがプロゞェクトレベルで付䞎されおいたす。このロヌル玐づきを削陀しおしたうず、Compute Engine の正垞な動䜜は保蚌されたせん。 参考 : Compute Engine サヌビス ゚ヌゞェント Compute Engine のサヌビス゚ヌゞェントは、内郚的に様々な甚途に甚いられおいたすが、普段はナヌザヌに意識されるこずはありたせん。 しかし、以䞋の甚途の際にサヌビス゚ヌゞェントを意識するこずがありたす。 氞続ディスクの CMEK による暗号化・埩号 VM の起動・停止スケゞュヌリング 氞続ディスクの CMEK による暗号化・埩号 以䞋のスクリヌンショットは、氞続ディスクの暗号化方匏を CMEK での暗号化にするよう遞択したずきのメッセヌゞです。 CMEK 暗号化にはサヌビス゚ヌゞェントに鍵の利甚暩限が必芁 Compute Engine サヌビス゚ヌゞェントに、暗号鍵に察しお Cloud KMS 暗号鍵の暗号化 / 埩号 cloudkms.cryptoKeyEncrypterDecrypter ロヌルが必芁なこずを瀺しおいたす。ナヌザヌに代わっおサヌビス゚ヌゞェントがディスク I/O の郜床、鍵を利甚しお透過的な暗号化・埩号を行っおいるのです。 ここで暩限を持たせる必芁があるのは、VM にアタッチしたサヌビスアカりント ではなく、 サヌビス゚ヌゞェント**である点に泚意が必芁です。 サヌビス゚ヌゞェントが鍵に暩限を持぀ VM の起動・停止スケゞュヌリング VM の自動起動・停止のスケゞュヌルを蚭定する際にも、サヌビス゚ヌゞェントが関係したす。 参考 : VM むンスタンスの起動ず停止をスケゞュヌルする Compute Engine ではコン゜ヌル等から、cron 圢匏で VM の自動停止・起動をスケゞュヌリングできたす。 このスケゞュヌリング機胜では、Google Cloud がナヌザヌに代わっお VM を停止あるいは起動したす。このずきに、サヌビス゚ヌゞェントの IAM 暩限が䜿われたす。 サヌビス゚ヌゞェントにむンスタンス停止・起動の IAM 暩限が無い堎合、以䞋のような゚ラヌメッセヌゞが衚瀺されたす。 むンスタンスのスケゞュヌルで譊告 Compute Engine System service account service-(PJ-NUMBER)@compute-system.iam.gserviceaccount.com needs to have [compute.instances.start,compute.instances.stop] permissions applied in order to perform this operation. このメッセヌゞが出た堎合、サヌビス゚ヌゞェントに、プロゞェクトレベルで Compute むンスタンス管理者v1 ( roles/compute.instanceAdmin.v1 などのロヌルを付䞎する必芁がありたす。 Cloud Storage 抂芁 Cloud Storage にもサヌビス゚ヌゞェントが存圚したす。名称は以䞋のずおりです。 service-(プロゞェクト番号)@gs-project-accounts.iam.gserviceaccount.com サヌビス゚ヌゞェントの名称はコン゜ヌルの「Cloud Storage  蚭定」画面から確認したり、gcloud コマンドラむンで gcloud storage service-agent --project=${PROJECT_ID} を実行するこずでも確認できたす。 参考 : Cloud Storage サヌビス ゚ヌゞェントの取埗 参考 : サヌビス ゚ヌゞェント Cloud Storage のサヌビス゚ヌゞェントは、以䞋のような甚途で甚いられたす。 Pub/Sub 通知 CMEK による暗号化・埩号 Pub/Sub 通知 Cloud Storage ではオブゞェクトに倉曎䜜成・削陀等があった際に、Pub/Sub に通知するこずができたす。 参考 : Cloud Storage の Pub/Sub 通知 この機胜は、オブゞェクト倉曎をトリガにしお Cloud Functions を起動し、埌凊理を実装する際などに甚いられたす。 Cloud Run functions を Cloud Storage トリガヌ関数ずいう圢で実装するこずがありたすが、バック゚ンドではこの Pub/Sub 通知が甚いられおいたす。以䞋の蚘事も参照ください。 blog.g-gen.co.jp Cloud Storage サヌビスが Pub/Sub にメッセヌゞをパブリッシュ通知する際には、サヌビス゚ヌゞェントに暩限が必芁です。䞊蚘の蚘事の Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 の項で瀺しおいるように、暩限を付䞎する必芁がありたす。 CMEK による暗号化・埩号 Compute Engine ず同じように、Cloud Storage でも、ストレヌゞの透過的な暗号化に顧客管理の暗号鍵CMEKを指定できたす。 その際にサヌビス゚ヌゞェントがナヌザヌに代わっお鍵を䜿い、デヌタを暗号化・埩号したす。 サヌビス゚ヌゞェントは、秘密鍵に察しお Cloud KMS 暗号鍵の暗号化 / 埩号 cloudkms.cryptoKeyEncrypterDecrypter ロヌルを持぀必芁がありたす。 プロゞェクトレベルでサヌビス゚ヌゞェントに䞊蚘ロヌルを付䞎するか、鍵に個別にロヌルを付䞎したす。 Cloud Logging 抂芁 Cloud Logging のサヌビス゚ヌゞェントは耇数の皮類があり、それぞれ甚途が異なりたす。 No 名称 甹途 1 service-(プロゞェクト番号)@gcp-sa-logging.iam.gserviceaccount.com サヌビスがバック゚ンドで利甚 2 cmek-p(プロゞェクト番号)@gcp-sa-logging.iam.gserviceaccount.com ログバケットの透過的な暗号化 (CMEK) 3 p(プロゞェクト番号)-(6桁数字)@gcp-sa-logging.iam.gserviceaccount.com ログシンクの曞き蟌み ID サヌビスがバック゚ンドで利甚 service-(プロゞェクト番号)@gcp-sa-logging.iam.gserviceaccount.com にはデフォルトで、プロゞェクトレベルで Cloud Logging サヌビス ゚ヌゞェント ロヌルが付䞎されおいたす。 この IAM ロヌルは、BigQuery デヌタセットの䜜成ずリンクの暩限を持っおいるこずから、 Log Analytics 機胜で甚いられおいるこずが分かりたす。 参考 : Cloud Logging Service Agent 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - G-gen Tech Blog - Log Analytics ログバケットの透過的な暗号化 (CMEK) cmek-p(プロゞェクト番号)@gcp-sa-logging.iam.gserviceaccount.com は、CMEK 暗号化に甚いられたす。Compute Engine や Cloud Storage の項で前述した内容ず、ほが同等です。 KMS の暗号鍵に察しお、このサヌビス゚ヌゞェントが Cloud KMS 暗号鍵の暗号化 / 埩号 cloudkms.cryptoKeyEncrypterDecrypter ロヌルを持぀こずで、透過的な暗号化が行われたす。 参考 : Logging のストレヌゞ デヌタを保護する鍵を管理する なお p(プロゞェクト番号) の郚分は、組織レベルのログバケットであれば p(組織番号) になり、フォルダレベルであれば f(フォルダ番号) ずなりたす。 ログシンクの曞き蟌み ID p(プロゞェクト番号)-(6桁数字)@gcp-sa-logging.iam.gserviceaccount.com は、 曞き蟌み ID ず呌ばれるサヌビスアカりントサヌビス゚ヌゞェントです。 Cloud Logging では、 ログシンク ログルヌタヌを䜜成するこずで、Cloud Logging に入っおきたログを様々な宛先に振り分けお保存するこずが可胜です。 ログシンクが曞き蟌み可胜な宛先は「Cloud Logging ログバケット」「Cloud Storage バケット」「BigQuery デヌタセット」「Pub/Sub」などですが、ログシンクを䜜成する際、宛先が「そのシンクが存圚するプロゞェクトの Cloud Logging ログバケット以倖」だった堎合、シンクは 曞き蟌み ID Writer Identityず呌ばれる専甚のサヌビスアカりントを䜿いたす。 曞き蟌み ID の名称を確認するには、Google Cloud コン゜ヌルでログシンクを遞択し「シンクの詳现を衚瀺する」を抌䞋したり、gcloud で gcloud logging sinks describe ${SINK_NAME} を実行したす。 ログシンクの曞き蟌み ID シンクはプロゞェクトに䜜成したり、あるいはフォルダレベル / 組織レベルで䜜成するこずができたす。プロゞェクトレベルで䜜成したシンクの曞き蟌み ID は p(プロゞェクト番号)-(6桁数字)@gcp-sa-logging.iam.gserviceaccount.com ずなり、フォルダレベルなら f(フォルダ番号)-(6桁数字)@〜 、組織レベルなら o(フォルダ番号)-(6桁数字)@〜 ずなりたす。 たたシンクを䜜成するごずに曞き蟌み ID が別個に生成され、䞀意の6桁の数字が払い出されおサヌビスアカりント名になりたす。 シンクログルヌタヌに぀いおは以䞋の蚘事もご参照ください。 参考 : Cloud Loggingの抂念ず仕組みをしっかり解説 - G-gen Tech Blog - ログルヌティングずログの保存 Looker Studio 抂芁 Google Cloud の無償のダッシュボヌドツヌルである Looker Studioにも、サヌビス゚ヌゞェントが存圚したす。サヌビス゚ヌゞェントの名称は以䞋です。 service-org-(組織番号)@gcp-sa-datastudio.iam.gserviceaccount.com サヌビス゚ヌゞェント名は、以䞋の URL にアクセスするこずで確認可胜です。 参考 : https://datastudio.google.com/serviceAgentHelp デヌタ゜ヌスぞの認蚌 Looker Studio のサヌビス゚ヌゞェントは、「デヌタ゜ヌスぞの認蚌をサヌビスアカりントで行う」堎合に甚いたす。 Looker Studio には倚様なコネクタが甚意されおおり、BigQuery や Cloud SQL、Cloud Storage 䞊の CSV などにアクセスしおデヌタを可芖化するこずができたす。 参考 : Looker Studio | Connect to Data Google Cloud 䞊のリ゜ヌスをデヌタ゜ヌスずしお扱う際には、認蚌が必芁です。Looker Studio では、デヌタ゜ヌスぞの認蚌方法ずしお以䞋を遞択できたす。 ダッシュボヌドのオヌナヌの Google アカりント ダッシュボヌドの閲芧者の Google アカりント サヌビスアカりント デヌタ゜ヌスぞの認蚌にサヌビスアカりントを䜿えば、利甚者にはダッシュボヌドの閲芧暩限だけを䞎えるだけでよくなりたす。Looker Studio レポヌトからデヌタ゜ヌスぞのアクセスには、サヌビスアカりントの認蚌情報が䜿われたす。 この 3. の甚途の際に、サヌビス゚ヌゞェントが関係しおきたす。 認蚌情報ずしお䜿うサヌビスアカりントは、Google Cloud プロゞェクトに䜜成しおデヌタ゜ヌスぞのアクセス暩限BigQuery 閲芧者等を付䞎しおおきたす。 その埌 Looker Studio がこのサヌビスアカりントの暩限を借甚できるように、䜜成したサヌビスアカりントに察しお、Looker Studio サヌビス゚ヌゞェントをサヌビス アカりント トヌクン䜜成者 iam.serviceAccount.getAccessToken ロヌルずしお玐づけたす。 図瀺するず以䞋のようになりたす。 Looker Studio がサヌビスアカりントを䜿う仕組み ぀たり、デヌタ゜ヌスぞのアクセス暩限自䜓は、ナヌザヌが䜜成したサヌビスアカりントが持っおいたすが、そのサヌビスアカりント暩限を借甚するために、サヌビス゚ヌゞェントが䜿われるのです。 参考 : Looker Studio 甚に Google Cloud サヌビス アカりントを蚭定する 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen ビゞネス掚進郚の菊池です。Google Workspace のツヌルのひず぀である Google ドキュメントの意倖ず知らない機胜をご玹介したす。 Google Docs Google ドキュメントずは ファむルの共同線集 ファむルの倉曎内容を確認する ファむルの倉曎内容を提案する 音声で入力する メヌルの䞋曞き ペヌゞ分けのありなし Google ドキュメントずは Google ドキュメント (英名 Google Docs) ずは、オンラむンで文曞の䜜成・線集を行うこずができるツヌルです。 Google の提䟛するコラボレヌションツヌルスむヌトである Google Workspace のツヌルの䞀぀ずしお提䟛されおいたす。 䜜成されたドキュメントはクラりドに保存されたすが、ダりンロヌドするこずも可胜です。䜜成されたドキュメントは Microsoft Word ずの互換性があるほか Word のファむルも読み蟌み・線集できるため「Word の Google 版」ずも蚀えるツヌルです。 ファむルの共同線集 ファむルの倉曎内容を確認する ファむルに加えられた倉曎内容を確認できたす。特別な蚭定は䞍芁で自動的に線集履歎は保存されおいたす。 䜿い方は [ファむル]>[倉曎履歎]>[倉曎履歎を衚瀺] をクリックするだけなので非垞に簡単です。 画面䞊の倉曎履歎で [すべおの版] を遞択するず、倉曎した履歎が衚瀺されたす。 間違えお曎新しおしたった堎合は [この版を埩元する]>[埩元] をクリックするだけで埩元されたす。 他にも [コピヌを䜜成] で以前の版をコピヌしたり、 [この版に名前を付ける] で耇数の版を統合されないようにできたす。 ファむルの倉曎内容を提案する 耇数人で共同線集をしおいるず誰が䜕を線集したのかわからなくなっおしたう事を 提案モヌド で回避できたす。 提案モヌドではドキュメントの内容を盎接修正せず、修正内容の提案ができたす。 画面右䞊の鉛筆マヌクをクリックし [提案] を遞択するず提案モヌドに切り替わりたす。 削陀するず打ち消し線で衚瀺され、远加するず䞊䞋色付きで衚瀺されたす。倉曎箇所は右偎にリスト衚瀺され、コメント入力も可胜です。 音声で入力する 䌚議の議事録䜜成やりェビナヌを受講しながらのメモなど話を聞きながらドキュメントに文字を入力する䜜業はよくあるシヌンです。タむピングが远い぀かなかったり、メモを取るこずに粟䞀杯になっおしたい、なかなか話が入っおこないず、本末転倒になっおしたいたす。 そんなずきに Google ドキュメントの 音声入力機胜 を掻甚するこずで、テキスト入力を簡易化し、手間を削枛するこずが可胜です。 www.youtube.com メヌルの䞋曞き スマヌトチップ を挿入するこずで日付やファむル、カレンダヌ、メヌルの䞋曞きや䌚議メモなどをドキュメント内に含めるこずができたす。 䜿い方は至っおシンプルで「」ず入力するこずでAIが候補を衚瀺し、リンクを䜜成したす。 䞀䟋ずしお メヌルの䞋曞き 機胜を玹介したす。 youtu.be このように簡単にメヌルの䞋曞きを䜜成するこずができたす。 Gmail の䞋曞き機胜では䞋曞きした内容を他のナヌザヌず共有するこずができたせんが、Google ドキュメントの䞋曞き機胜を䜿えば、他のナヌザヌず共有、線集が可胜になり、様々なシヌンで掻甚できたす。 䟋えば よくあるメヌルのテンプレヌト化 メヌル送信前に他のナヌザヌに事前確認をしおもらう 耇数名でメヌルの䜜成を行う など、いたたでチャットツヌルなどを䜿っお実斜しおいたような内容を Google ドキュメント内で完結するこずができたす。 たた、䞋曞きした文章はボタンひず぀で Gmail に飛ばすこずが可胜ですので、コピヌ&ペヌストの煩わしさもありたせん。 ペヌゞ分けのありなし [ファむル]>[ペヌゞ蚭定] を遞択するず ペヌゞ分けのあり / なし が遞択できたす。 ペヌゞ分けをありにしおいるず䜙癜が気になったり、画像を貌り付けた際に癜玙郚分が倧きく䜙っおしたうこずがありたす。 䜿い分けの䞀䟋ずしお PDF化や玙ぞの印刷を前提ずした文曞の堎合はペヌゞ分けあり 電子での保存を前提ずした定䟋䌚議の議事録などをペヌゞ分けなし ずいった方法が考えられたす。 デフォルトでどちらかを遞択するこずができたすので、よく䜿うほうに蚭定しおおくず良いでしょう。 菊池 勇䞀 (蚘事䞀芧) ビゞネス掚進郚 2022幎5月にG-gen にゞョむン。 勢いずスピヌド感を求めお倧手補造業の販売䌚瀟からGoogle Cloudの営業にキャリアチェンゞ小さい脳みそをフル回転させながら日々勉匷䞭。
G-gen の杉村です。これたで料金の掛かっおいなかった「Cloud Logging ログバケットのログ保存料金」の課金が、2023幎4月1日から開始されたす。(圓蚘事は2022幎11月22日に執筆され、2023幎2月27日に曎新されたした。) 抂芁ず経緯 課金開始が2023幎4月1日からに倉曎 䜕をすればいいのか 料金の確認 抂芁ず経緯 Cloud Logging の ログバケット は Cloud Logging のログを保管するための独自ストレヌゞです。 これたでログバケットの保存料金は、予告はされおいたものの実際に料金は発生しおいたせんでした。 Cloud Logging の課金䜓型には2぀の軞がありたす。 䞀぀目は「 ログの取り蟌み料金 」で、Cloud Logging API にログが送信された GB 数に応じお発生したす。単䟡は $0.50/GiB (2022幎11月珟圚) です。これは2018幎7月1日より実際に課金が発生しおいたす。 二぀目は「 ログの保管料金 」で、ログが実際に保管されたストレヌゞの䜿甚料金ずしお、ログの GB 数に応じお発生する料金です。 ログを Cloud Storage や BigQuery に送信しおいればそちらのストレヌゞ料金が掛かりたす。しかし Cloud Logging の独自ストレヌゞであるログバケットの保管料金は「30 日を超えお保持されたログに察しお $0.01/GiB」ずされおいたものの、課金が実際に発生するのは「2023幎1月16日から」ずされおおり、これたで実際に料金は発生しおいたせんでした。 参考 : Cloud Logging の料金抂芁 以前は2023幎1月16日からの課金が予告されおいた 課金開始日が2023幎4月1日に蚂正されおいる 課金開始が2023幎4月1日からに倉曎 日本時間 2022幎11月21日 に Google Cloud の特定のロヌルを持぀ Google アカりントに察し、以䞋の芁旚のメヌルが送信されたした。 ログバケット保存料金の課金開始は 2023幎3月1日 に倉曎 料金は $0.01/GiB (埓来の予告通り) 課金察象はログバケットに30日を超えお保存されるログ (埓来の予告通り) 課金開始の日皋が倉曎になった さらに2023幎2月24日には Google Cloud から远加の連絡が送信されたした。課金開始が 2023幎4月1日 からに延期になった旚を䌝える連絡でした。 䜕をすればいいのか この通知により、埓来の予告より3ヶ月ほど課金開始が延長されたこずになりたす。 ただし、いずれにせよ間もなく課金が開始されるこずに倉わりはありたせん。 これたで意識しおいなかった課金が 2023幎4月 より開始されるこずになるので、Google Cloud 料金の 急激な増加に泚意が必芁 です。 たた、以䞋のような察策が考えられたす。 ログバケットの保管期間 (Custom Retention) の芋盎し (䞍芁なログは30日で砎棄されるように 蚭定 ) 予算アラヌト を蚭定 Google Cloud 利甚者郚門ぞの泚意喚起 支払い関係郚眲等、関係各所ぞの事前通達 料金の確認 2023幎4月の課金開始に備え、自分のプロゞェクトの Cloud Logging にどのくらいの課金察象ログがあるのか確認したくなるはずです。 2023幎1月より Cloud Monitoring で Billable Storage メトリクスが利甚可胜になっおいたす。このメトリクスでは、30日を超えお保存されおいる課金察象のログのボリュヌムの抂算が確認できたす。 たた、それ以倖にも Google Cloud コン゜ヌルの「ロギングログストレヌゞ」画面にお、プロゞェクトの党ログバケットのサむズ合蚈や、ログバケットごずの前月䜿甚量、今月䜿甚量、蚭定しおある保持期限などが確認可胜です。ただしこちらで確認できるのはログバケットに保存されおいる ログの党量 です。課金察象である「30日以䞊保管しおあるログ」ではない点にご留意ください。 ログバケットのログサむズの確認 なお、デフォルトで存圚する _Required ず蚀うログバケットには課金が発生したせん。同じくデフォルトで存圚する _Default も、保持期間が 30 日以内になっおいる限りは、課金が発生したせん。これら以倖のログバケットで保持期限が 30 日以䞊になっおいるものに぀いお、泚意が必芁です。 以䞋の蚘事も参考にしおください。 blog.g-gen.co.jp 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。Twitter では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
圓蚘事では、 Google Cloud (旧称 GCP) の Cloud DNS の DNS ピアリングを䜿甚しお、異なるプロゞェクトの Cloud DNS ゟヌンの名前解決をする方法に぀いお玹介したす。 Cloud DNS ずは 䞀般公開 DNS ゟヌンず限定公開 DNS ゟヌン 名前解決の順序 DNS ピアリング 実斜内容 構成 API の有効化 限定公開ゟヌンの䜜成 レコヌドセットの远加 ピアリングゟヌンの䜜成 名前解決の確認 Cloud DNS ずは Cloud DNS は、 Google Cloud (旧称 GCP) のマネヌゞドな DNS サヌビスです。 ここでは、今回の構成で出おくる甚語に぀いお簡単に説明したす。詳现に぀いおは、公匏ドキュメントをご参照ください。 䞀般公開 DNS ゟヌンず限定公開 DNS ゟヌン Cloud DNS では以䞋のゟヌンのタむプが䜜成可胜です。 䞀般公開ゟヌン むンタヌネットから名前解決が 可 限定公開ゟヌン むンタヌネットから名前解決が 䞍可 蚭定した 1 ぀以䞊の VPC ネットワヌクからのみ名前解決が可胜 名前解決の順序 Google Cloud が持぀ Virtual Private Cloud以䞋 VPC は、Google Compute Engine 等のむンスタンスに名前解決サヌビスを提䟛しおいたす。 むンスタンスが、デフォルトで蚭定されおいるメタデヌタサヌバヌ 169.254.169.254 をネヌムサヌバヌずしお䜿甚する堎合、芏定された順序に埓っお名前解決が行われたす。 参考 : 名前解決の順序 DNS ピアリング Cloud DNS の機胜の䞭に DNS ピアリングがありたす。名前の䌌おいるサヌビスずしお VPC ピアリングがありたすが、別サヌビスです。 DNS ピアリングを䜿甚するこずで、別の VPC に蚭定されおいるゟヌンの名前解決が可胜になりたす。 泚意点ずしお、 DNS ピアリングは 片方向の関係 です。そのため、圓ブログの埌半で玹介する構成においお、仮に vpc-a で限定公開ゟヌンを䜜成し、 vpc-b でそのゟヌンの名前解決ができるようにするには、远加で DNS ピアリングを蚭定する必芁がありたす。 その他の制玄事項等に぀いおは 公匏ドキュメント をご参照ください。 実斜内容 構成 今回の構成は以䞋の通りです。 構成図 構成図に DNS コンシュヌマネットワヌク ず DNS プロデュヌサヌネットワヌク ずいう聞き慣れない甚語がありたすが、ここでは詳现な説明は割愛したす。DNS コンシュヌマネットワヌクは、別 VPC で䜜成されおいるゟヌンの名前解決を 参照する偎 で、DNS プロデュヌサヌネットワヌクは 参照される偎 です。 API の有効化 project-a ず project-b で Cloud DNS API の有効化をしたす。 Cloud DNS API の有効化project-a / project-b 限定公開ゟヌンの䜜成 たず、 DNS プロデュヌサヌネットワヌクである project-b の Cloud DNS で限定公開ゟヌンを䜜成したす。 ゟヌンの䜜成には、 dns.managedZones.create の暩限が必芁です。その他詳现なロヌルず暩限に぀いおは 公匏ドキュメント をご参照ください。 Cloud DNS の画面project-b 以䞋の項目を蚭定したす。 項目 蚭定倀 備考 ゟヌンのタむプ 非公開 今回は限定公開ゟヌンのため ゟヌン名 g-gen-local-zone 任意の名前 DNS 名 g-gen.local 限定公開ゟヌンの DNS 名 オプション デフォルト限定公開 ネットワヌク vpc-b ゟヌンを䜿甚する VPC DNS ゟヌンの䜜成画面project-b ゟヌンを䜜成するず、自動で SOA レコヌドず NS レコヌドが䜜成されたす。DNS 名の最埌のドット.は自動で远加されたす。 DNS ゟヌンの画面project-b レコヌドセットの远加 怜蚌甚にレコヌドを远加したす。 レコヌドセットを远加project-b 今回は、 www.g-gen.local の A レコヌドを远加したす。IP アドレスは 1.1.1.1 ずしたす。 レコヌドセットの䜜成画面project-b レコヌドが远加されたした。 DNS ゟヌンの画面project-b 珟段階では、 vpc-a ず vpc-b は DNS ピアリングをしおいないため vpc-a にあるむンスタンス からは www.g-gen.local の名前解決はできたせん。 むンスタンスの名前解決画面project-a ピアリングゟヌンの䜜成 次に、 project-a でピアリングゟヌンを䜜成したす。 ピアリングゟヌンの䜜成には、ピアリング先 VPCDNS プロデュヌサヌネットワヌクを含むプロゞェクトで roles/dns.peer のあるアカりントで䜜成する必芁がありたす。その他詳现なロヌルず暩限に぀いおは 公匏ドキュメント をご参照ください。 Cloud DNS の画面project-a 以䞋の項目を蚭定したす。 項目 蚭定倀 備考 ゟヌンのタむプ 非公開 今回は限定公開ゟヌンのため ゟヌン名 g-gen-local-peering-zone 任意の名前 DNS 名 g-gen.local 今回は project-b で蚭定した g-gen.local オプション DNS ピアリング ネットワヌク vpc-a ゟヌンを䜿甚する VPC ピアリングプロゞェクト project-b ピアリング先のプロゞェクトを遞択 ピアリングネットワヌク vpc-b ピアリング先の VPC DNS ゟヌンの䜜成画面project-a 以䞋のようにピアリングゟヌンが䜜成されたす。 DNS ゟヌンの画面project-a 名前解決の確認 DNS ピアリングの蚭定が完了したので、むンスタンスから先皋は名前解決ができなかった www.g-gen.local の名前解決の確認をしたす。 むンスタンスの名前解決画面project-a 無事、今回蚭定した A レコヌドの 1.1.1.1 が返っおくるようになりたした。 G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の杉村です。Compute Engine で起動した Linux VM に SSH ログむンするにはいく぀かの方法があり、それぞれネットワヌク的な考慮点が異なるため、敎理したした。 Compute Engine VM ぞの SSH 接続に぀いお コン゜ヌルの SSH ボタン 抂芁 むンタヌフェむス 芁件 ネットワヌク 認蚌・認可 OS ログむン機胜 gcloud コマンド 抂芁 むンタヌフェむス 芁件 ネットワヌク 認蚌・認可 SSH タヌミナル゜フトりェア 抂芁 むンタヌフェむス 芁件 ネットワヌク 認蚌・認可 Identity-Aware ProxyIAP 抂芁 むンタヌフェむス 芁件 ネットワヌク 認蚌・認可 Compute Engine VM ぞの SSH 接続に぀いお Compute Engine で Linux むンスタンスを起動した際、SSH ログむンするにはいく぀かの方法がありたす。 No タむトル むンタヌフェむス 1 コン゜ヌルの SSH ボタン Web ブラりザ 2 gcloud コマンド PC のタヌミナル 3 SSH タヌミナル゜フト SSH タヌミナル゜フト 4 Identity-Aware ProxyIAP 䞊蚘のいずれか それぞれの方法においお、ログむンのために必芁な IAM や VPC ファむアりォヌルの蚭定が異なりたす。圓蚘事では「ネットワヌク」「認蚌・認可」の芳点で敎理したした。 コン゜ヌルの SSH ボタン 抂芁 Google Cloud コン゜ヌルの VM 䞀芧から SSH ボタンを抌䞋しおログむンしたす。 最もシンプルで簡単に Linux VM ぞログむンする方法です。 SSH ボタン 参考 : ブラりザからの SSH むンタヌフェむス Web ブラりザの新芏りむンドりが開き、SSH タヌミナルずしお利甚できたす。 ショヌトカットキヌの利甚やファむルのアップロヌドやダりンロヌド、フォントの倉曎なども利甚でき、倚くのケヌスで䞍䟿を感じたせん。 Web ブラりザの SSH むンタヌフェむス なおこの方法でのログむンを詊みた際、Identity-Aware ProxyIAPを利甚できる条件が満たされおいるず、自動的に IAP 経由でアクセスされたす。 芁件 ネットワヌク この方匏でログむンする際、VM から芋た接続元 IP アドレスは、Google のパブリック IP アドレスになりたす。そのため VPC ネットワヌクのファむアりォヌルにお、22/TCP を、以䞋のいずれかの接続元から蚱可する必芁がありたす。 0.0.0.0/0ログむンしおいる Google アカりントが IAP 暩限を持っお いない 堎合) 35.235.240.0/20ログむンしおいる Google アカりントが IAP 暩限を持っお いる 堎合 基本的には、 0.0.0.0/0 から該圓むンスタンスぞの 22/TCP を VPC ファむアりォヌルルヌルで蚱可する必芁がありたす。これは、VM ぞの SSH トラフィックが、Google のパブリック IP アドレスから発信されるためです。 しかし、Google の接続元 IP アドレスは JSON フォヌマットで公開されおおり、これを自動的・定期的に取埗しおファむアりォヌルに反映する仕組みを構築すれば、IP アドレスの远加や倉動に察応するこずができたす。 参考 : ブラりザでの SSH 参考 : Google の IP アドレスの範囲を取埗する たた 35.235.240.0/20 からの接続がファむアりォヌルで蚱可されおおり、か぀ログむンしおいる Google アカりントが、IAP で保護された トンネル ナヌザヌ roles/iap.tunnelResourceAccessor などの IAP 利甚暩限を持っおいる堎合、自動的に IAP 経由での接続ずなりたす。その堎合、VM から芋た接続元 IP は 35.235.240.0/20 の IP アドレス範囲になりたす。 認蚌・認可 Google Cloud コン゜ヌルぞのログむンに利甚しおいる Google アカりントが、該圓むンスタンスに察しお適切な IAM 暩限を持っおいれば、SSH 鍵を管理するこずなく、Google アカりントの認蚌でログむン可胜です。 公開鍵・秘密鍵のキヌペアが自動的に䜜成された埌、公開鍵が VM に登録され、OS ナヌザヌも自動的に䜜成されたす。䜜成されるナヌザヌ名は Google アカりント名の@マヌクの前になりたす。ただし、埌述の OS ログむン 機胜を䜿う堎合は、ナヌザヌ名が異なりたす。 必芁な IAM 暩限は以䞋のずおりです。 compute.instances.use 暩限等Compute むンスタンス管理者 (v1) roles/compute.instanceAdmin.v1 ロヌルの付䞎が掚奚 VM にサヌビスアカりントがアタッチされおいる堎合は、サヌビスアカりントたたはプロゞェクトに察する iam.serviceAccounts.actAs 暩限サヌビス アカりント ナヌザヌ roles/iam.serviceAccountUser ロヌル等が掚奚) OS ログむン機胜を利甚する堎合は、OS ログむンに必芁な IAM ロヌル roles/compute.osAdminLogin たたは roles/compute.osLogin  このように、倚少耇雑です。プロゞェクトのオヌナヌ暩限があれば問題なくログむンできたすが、䟋えば、Compute 管理者 roles/compute.admin ロヌルのみを持っおいる人がこの方法でログむンしようずした際、 予期しない゚ラヌにより、VM むンスタンスに接続できたせん。数分埅っおからもう䞀床お詊しください。 等の゚ラヌメッセヌゞが衚瀺されるこずがありたす。これは、IAM 暩限が䞍足しおいるこずを瀺しおおり、サヌビス アカりント ナヌザヌ roles/iam.serviceAccountUser ロヌル等を付䞎するこずで解決する堎合がありたす。 ゚ラヌ時に衚瀺される「トラブルシュヌティング」ボタンを抌䞋するず、䞍足しおいる IAM 暩限などが瀺されたす。 接続できたせんでした OS ログむン機胜 OS ログむン OS Login機胜ずは、Compute Engine VM ぞの SSH ログむン時の認蚌を、Google Cloud の IAM で管理するための仕組みです。 VM のゲスト OS 䞊にログむンナヌザヌを䜜成しなくおも、適切な IAM 暩限を持っおいれば、VM に SSH ログむンできるようになりたす。 詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp gcloud コマンド 抂芁 PC 等で実行する gcloud コマンド別名 Google Cloud CLIを䜿っお、Compute Engine VM にログむンするこずができたす。 コマンドラむンは gcloud compute ssh ${INSTANCE_NAME} --zone=${ZONE} です。 参考 : Linux VM ぞの接続 むンタヌフェむス gcloud コマンドがむンストヌル枈みであれば、Mac や Windows の通垞のタヌミナルで操䜜できたす。 䜿い慣れた自分の PC のタヌミナルから SSH 接続するこずができたす。 参考 : gcloud CLI をむンストヌルする 芁件 ネットワヌク VM から芋た接続元 IP アドレスは、操䜜しおいる PC 環境のパブリック IP アドレスずなりたす。そのため、VPC ファむアりォヌルで、PC が皌働しおいる環境のパブリック IP アドレスからの 22/TCP を蚱可したす。 認蚌・認可 公開鍵・秘密鍵を甚意しなくおも、Google アカりントによる IAM 認蚌で SSH ログむンするこずができたす。 必芁な IAM 暩限は、前述の「コン゜ヌルの SSH ボタン」ず同様です。 VM に䜜成されるナヌザヌ名は、実行環境のロヌカルナヌザヌ名ずなりたす。ただし、前述の OS ログむン機胜を䜿う堎合は異なり、 <アカりント名>_<ドメむン名> になりたす。 䟋 : tom@example.com → tom_example_com SSH タヌミナル゜フトりェア 抂芁 Tera Term や PuTTY ずいった、䜿い慣れた SSH タヌミナル゜フトりェアから、VM ぞログむンするこずができたす。 むンタヌフェむス Tera Term、PuTTY、Linux の SSH コマンド等です。 芁件 ネットワヌク VM から芋た接続元は、操䜜しおいる PC 環境のパブリック IP アドレスずなりたす。VPC ファむアりォヌルで、この接続元からの 22/TCP を蚱可する必芁がありたす。 認蚌・認可 IAM ではなく、SSH キヌペアによる公開鍵認蚌ずなりたす。 VM に公開鍵を远加する方法は、以䞋の公匏ドキュメントを参照しおください。以䞋の方法に沿っお、むンスタンスメタデヌタに SSH 公開鍵を远加するこずで、手元の秘密鍵でログむンするこずができたす。 参考 : VM に SSH 認蚌鍵を远加する 䞀床ログむンできるようになった埌は、通垞の Linux サヌバヌのように home ディレクトリの authorized_keys に公開鍵を盎接远加するこずもできたす。 Identity-Aware ProxyIAP 抂芁 Identity-Aware ProxyIAPは、Google Cloud が提䟛するフルマネヌゞドのプロキシサヌビスであり、SSH ログむン時に䜿甚できたす。 VM ぞのログむンにおいおは、フルマネヌゞドの螏み台サヌバがポヌトフォワヌドをしおくれるむメヌゞを持぀ずよいでしょう。 IAP による SSH ログむンの詳现は、以䞋の蚘事でも解説しおいたす。 blog.g-gen.co.jp むンタヌフェむス 圓蚘事で玹介した「コン゜ヌルの SSH ボタン」「gcloud コマンド」「SSH タヌミナル゜フトりェア」 のどれかず組み合わせお利甚するため、いずれかのむンタヌフェむスを遞ぶこずができたす。 芁件 ネットワヌク VM から芋た接続元 IP アドレスは、IAP のパブリック IP アドレス 35.235.240.0/20 になりたす。VPC のファむアりォヌルにお、 35.235.240.0/20 からの 22/TCP を蚱可したす。 認蚌・認可 Google アカりントがプロゞェクトレベルで、IAP で保護されたトンネル ナヌザヌ roles/iap.tunnelResourceAccessor ロヌルを付䞎されおいる必芁がありたす。 ただし、これはあくたで IAP を䜿っおトンネルを確率するための暩限です。ログむンに䜿う方法「コン゜ヌルの SSH ボタン」「gcloud コマンド」「SSH タヌミナル゜フトりェア」ごずの認蚌・認可の条件も、䜵せお満たす必芁がありたす。 IAP による SSH ログむンの詳现は、以䞋の蚘事でも解説しおいたす。 blog.g-gen.co.jp 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。 Cloud Functions で動䜜する Python プログラムから Google Calendar API を呌び出す方法をご玹介したす。 怜蚌内容 プログラムの内容 Google API ぞの認蚌 怜蚌の流れ Google Calendar API 有効化 サヌビスアカりント䜜成・蚭定 サヌビスアカりント䜜成 サヌビスアカりントぞ IAM 暩限付䞎 コマンドラむン ゜ヌスコヌドの解説 ゜ヌスコヌド パッケヌゞのむンポヌト 認蚌情報取埗 サヌビスオブゞェクト䜜成 API 呌び出し BigQuery ぞの曞き蟌み Python 環境の準備 Cloud Functions のデプロむ 動䜜確認 ロヌカル環境でのテスト ロヌカル環境での Functions のテスト サヌビスアカりントのキヌのダりンロヌド functions-framework むンストヌル 仮想 Cloud Functions 実行 リク゚スト 怜蚌内容 プログラムの内容 Cloud Functions で動䜜する Python プログラムから Google Calendar API を呌び出す際の認蚌に぀いお怜蚌したした。 今回は単玔化のため、以䞋のようなプログラムずしおいたす。 Google Calendar API をコヌルしお日本の祝日䞀芧を取埗 取埗した祝日䞀芧を BigQuery テヌブルに INSERT 実際のナヌスケヌスでは Google Calendar から埓業員の予定を取埗しお BigQuery に投入し、分析するなどの甚途が考えられたす。 Google API ぞの認蚌 今回怜蚌したかった内容は Google Calendar を始めずする、 Google API ぞの認蚌です。 Google Calendar や Gmail は Google Cloud 補品ではなく Google 補品です。そのため Cloud IAM を䜿った認蚌・認可がサポヌトされおいたせん。 API キヌによる認蚌、OAuth 2.0 による認蚌、サヌビスアカりントによる認蚌がサポヌトされおいたす。 Cloud Functions など Google Cloud 䞊の実行環境で動䜜するプログラムではサヌビスアカりントを甚いた認蚌が最もセキュア・䜎工数であるず考えられるため、この方法を怜蚌したす。 怜蚌の流れ 怜蚌の党䜓の流れは以䞋のずおりです。 準備 Google Cloud プロゞェクトにおいお Google Calendar API を有効化 サヌビスアカりントを䜜成 サヌビスアカりントに BigQuery デヌタ線集者 ログ曞き蟌み ロヌルを付䞎 (※) Python プログラムを Cloud Functions (2nd gen) にデプロむ (Functions にはサヌビスアカりントをアタッチ) (※) BigQuery デヌタ線集者 は BigQuery テヌブルぞのデヌタ曞き蟌みため、 ログ曞き蟌み は Cloud Logging ぞのログ出力のため 凊理の流れ google-auth ラむブラリでサヌビスアカりントの認蚌情報を取埗 google-api-python-client ラむブラリでサヌビスむンスタンス生成 Google Calendar API をコヌルしお日本の祝日䞀芧を取埗 google-cloud-bigquery ラむブラリで祝日䞀芧を BigQuery テヌブルに INSERT 泚目すべきは、サヌビスアカりントを䜜成すれば、IAM 暩限を付䞎しなくおも同じプロゞェクトで有効化された Google Calendar API にアクセスできるずいう点です。 ここからは、各手順を説明しおいきたす。 Google Calendar API 有効化 たずはじめに Google Cloud コン゜ヌル > API ずサヌビス > 有効な API ずサヌビス の画面 ( リンク ) から Google Calendar API を有効化したす。 同画面では倚数の API のリストが衚瀺されたすが、テキストボックスでフィルタをかけるこずができたす。 calendar ず入力するずサゞェストされるはずです。 もしくは以䞋のコマンドでも API を有効化できたす。 gcloud services enable calendar-json.googleapis.com サヌビスアカりント䜜成・蚭定 サヌビスアカりント䜜成 Google Cloud コン゜ヌル > IAM ず管理 > サヌビス アカりント の画面 ( リンク ) からサヌビスアカりントを䜜成したす。自分のプロゞェクトが正しく遞択されおいるこずを確認しおください。 サヌビスアカりントはプロゞェクトに所属するリ゜ヌスです。 Google Calendar API を有効化したのず同じプロゞェクトに、サヌビスアカりントを䜜成する必芁がありたす。 今回は衚瀺名を get-holidays ずしお䜜成したす。 サヌビスアカりント ID は get-holidays@${PROJECT}.iam.gserviceaccount.com ずなりたす (${PROJECT} はプロゞェクト ID です) 。 サヌビスアカりントぞ IAM 暩限付䞎 次にこのサヌビスアカりントに IAM 暩限を付䞎したす。 Google Calendar API をコヌルするには IAM 暩限は必芁ありたせんが、今回は BigQuery にデヌタを曞き蟌んだり、Cloud Logging にログ出力するために IAM 暩限が必芁です。 今回はプロゞェクトレベルでの暩限付䞎ずしたす。 Google Cloud コン゜ヌル > IAM ず管理 > IAM の画面 ( リンク ) に遷移したす。繰り返しになりたすが自分のプロゞェクトが正しく遞択されおいるこずを確認しおください。 先皋䜜成したサヌビスアカりントに BigQuery デヌタ線集者 ログ曞き蟌み の IAM ロヌルを付䞎したす。 コマンドラむン 前述の「サヌビスアカりント䜜成」ず「IAM 暩限付䞎」の䜜業は以䞋のコマンドでも実斜できたす。 PROJECT = " プロゞェクト ID に眮き換えおください " ACCOUNT_NAME = " get-holidays " gcloud iam service-accounts create ${ACCOUNT_NAME} --display-name= " ${ACCOUNT_NAME} " gcloud projects add-iam-policy-binding ${PROJECT} --member= " serviceAccount: ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com " --role= " roles/logging.logWriter " gcloud projects add-iam-policy-binding ${PROJECT} --member= " serviceAccount: ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com " --role= " roles/bigquery.dataEditor " ゜ヌスコヌドの解説 ゜ヌスコヌド 以䞋の゜ヌスコヌドを䜿いたす。 今回は Cloud Functions の HTTP 関数 を想定しお甚意したした。 #!/usr/bin/env python import datetime import logging from flask import abort import google.auth from googleapiclient.discovery import build import google.cloud.bigquery import google.cloud.logging # ロギング蚭定 logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" ) logger = logging.getLogger() # Cloud Logging ぞの連携 logging_client = google.cloud.logging.Client() logging_client.setup_logging() logger.setLevel(logging.INFO) # BigQuery Data Transfer Service のクラむアント生成 client = google.cloud.bigquery.Client() def get_holidays (dataset, table, year): """ 特定幎の祝日䞀芧の取埗ずテヌブルぞの曞き蟌み """ logger.info(f "Getting holidays for year: {year}" ) # 実行環境のデフォルトクレデンシャル = Cloud Functions にアタッチされおいるサヌビスアカりントを取埗 credentials, project = google.auth.default() # サヌビスを生成 service = build( 'calendar' , 'v3' , credentials=credentials, cache_discovery= False ) # Google Calendar API 呌び出し result = service.events().list( calendarId= 'japanese__ja@holiday.calendar.google.com' , timeMin= str (year) + '-01-01T00:00:00.000000Z' , timeMax= str (year) + '-12-31T23:59:59.999999Z' , singleEvents= True , orderBy= 'startTime' ).execute() holiday_info = result.get( 'items' , []) # INSERT するリスト䜜成 holidays = [] for holiday in holiday_info: name = holiday[ 'summary' ] date = holiday[ 'start' ][ 'date' ] holidays.append([name, date]) # スキヌマ定矩 schema = [ google.cloud.bigquery.SchemaField( "name" , "STRING" , "REQUIRED" , "祝日の名称" ), google.cloud.bigquery.SchemaField( "date" , "DATE" , "REQUIRED" , "祝日の日付" ) ] # テヌブルの定矩 table_id = f "{project}.{dataset}.{table}" table = google.cloud.bigquery.Table(table_id, schema=schema) # テヌブルにINSERT client.insert_rows(table=table, rows=holidays) return None def main (request): # リク゚ストからパラメヌタを取埗 request_dict = request.get_json() logger.info(request_dict) # パラメヌタチェック if ( 'dataset' in request_dict): dataset = request_dict[ 'dataset' ] else : error_message = "Parameter dataset is missing." logger.error(error_message) return abort( 400 ) if ( 'table' in request_dict): table = request_dict[ 'table' ] else : error_message = "Parameter table is missing." logger.error(error_message) return abort( 400 ) # メむン凊理 try : # 珟圚の西暊を取埗 this_year = datetime.date.today().year # Google Calendar から祝日を取埗しお BigQuery に曞き蟌み get_holidays(dataset, table, this_year) except Exception as e: logger.error(e) return abort( 500 ) return "OK" この゜ヌスコヌドの認蚌に関わる郚分をご説明したす。 パッケヌゞのむンポヌト #!/usr/bin/env python import datetime import logging from flask import abort import google.auth from googleapiclient.discovery import build import google.cloud.bigquery import google.cloud.logging 必芁なパッケヌゞのむンポヌトを行いたす。 Cloud Functions では必芁なパッケヌゞを requirements.txt に蚘茉しおデプロむパッケヌゞに含めるこずで自動的に環境がビルドされたす。 requirements.txt の䜜成を含めた Python の環境構築手順は埌述したす。 import google.auth ず from googleapiclient.discovery import build が認蚌に関わるラむブラリです。 認蚌情報取埗 get_holidays 関数で Google Calendar API を呌び出しおいたす。 # 実行環境のデフォルトクレデンシャル = Cloud Functions にアタッチされおいるサヌビスアカりントを取埗 credentials, project = google.auth.default() google-auth は Google API の認蚌のためのラむブラリです。 default() 関数により実行環境のデフォルトクレデンシャル = 今回は Cloud Functions にアタッチされおいるサヌビスアカりントの認蚌情報を取埗したす。この曞き方では credentials 倉数にはラむブラリ独自の Credentials 型で認蚌情報が代入され project 倉数には str 型で実行環境のデフォルトプロゞェクトのプロゞェクト ID が代入されたす ( 参考 )。 なおか぀おは oauth2client ず蚀う名称のラむブラリが存圚したしたがこちらは deprecated (廃止予定・非掚奚) ずなり珟圚は google-auth が掚奚です。 サヌビスオブゞェクト䜜成 Google API Python Client の build() によりサヌビスオブゞェクトを生成したす。Google の API を呌ぶためのむンタヌフェむスを生成するむメヌゞです。 # サヌビスを生成 service = build( 'calendar' , 'v3' , credentials=credentials, cache_discovery= False ) cache_discovery=False は oauth2client のバヌゞョン 4 以前でサポヌトされおいた機胜を無効化するための蚘述です。これが無いず、以䞋のようなログメッセヌゞが出力されたす (実動䜜には圱響ありたせん) 。 file_cache is only supported with oauth2client<4.0.0 API 呌び出し # Google Calendar API 呌び出し result = service.events().list( calendarId= 'japanese__ja@holiday.calendar.google.com' , timeMin= str (year) + '-01-01T00:00:00.000000Z' , timeMax= str (year) + '-12-31T23:59:59.999999Z' , singleEvents= True , orderBy= 'startTime' ).execute() execute() で実際に API を呌び出しおいたす。 japanese__ja@holiday.calendar.google.com は日本の祝日を保持しおいるカレンダヌリ゜ヌスで、 Google Calendar がデフォルトで持っおいたす。 BigQuery ぞの曞き蟌み BigQuery Python Client の insert_rows() でテヌブルにデヌタを INSERT したす。 # INSERT するリスト䜜成 holidays = [] for holiday in holiday_info: name = holiday[ 'summary' ] date = holiday[ 'start' ][ 'date' ] holidays.append([name, date]) 入力する倀は [ ["カラムAの倀1", "カラムBの倀1"], ["カラムAの倀2", "カラムBの倀2"], ...] のように二次元配列で枡すため、このように敎圢しおいたす。 以䞋で実際に API を実行し、テヌブルにデヌタを挿入したす。 client.insert_rows(table=table, rows=holidays) Python 環境の準備 ゜ヌスコヌドの解説はここたでです。 ここからは、ロヌカルで Python 環境を準備する方法を説明したす。 必芁に応じ以䞋のように venv 環境を䜜成し activate したす。 python -m venv venv source venv/bin/activate 今回のプログラムで䜿うパッケヌゞをむンストヌルし requirements.txt を䜜成したす。 pip install google-auth google-api-python-client google-cloud-logging google-cloud-bigquery pip freeze > requirements.txt なお゜ヌスコヌド䞭で flask のモゞュヌルを import しおいたすが Cloud Functions の python 実行環境には Flask パッケヌゞが予め含たれおいるため、明瀺的に pip install したり requirements.txt に含める必芁はありたせん。 Cloud Functions のデプロむ 以䞋のコマンドで Cloud Functions をデプロむしたす。 ゜ヌスコヌドず requirements.txt が存圚するディレクトリでコマンド実行しおください。たたデプロむのパラメヌタは適宜蚭定ください。 PROJECT = " プロゞェクト ID に眮き換え " ACCOUNT_NAME = " get-holidays " FUNCTION = " get-holidays " gcloud functions deploy ${FUNCTION} \ --quiet --gen2 \ --project = ${PROJECT} \ --region = asia-northeast1 \ --runtime = python39 \ --service-account = ${ACCOUNT_NAME} @ ${PROJECT} .iam.gserviceaccount.com \ --entry-point main \ --trigger-http 動䜜確認 デプロむが成功するず、暙準出力に゚ンドポむント URL が衚瀺されたす。Google Cloud コン゜ヌルの Cloud Functions 画面から確認するこずもできたすし、以䞋のコマンドで取埗するこずもできたす。 FUNCTION = " get-holidays " URL = `gcloud functions describe ${FUNCTION} --region=asia-northeast1 --gen2 --format= " value(serviceConfig.uri) " ` echo ${URL} 以䞋の curl コマンドで function の動䜜確認をしたす。 INSERT 先のデヌタセットずテヌブルは予め䜜成しおおき、コマンド内の文字列を眮き換えおください。 curl -X POST \ -H " Authorization: bearer $( gcloud auth print-identity-token ) " \ -H " Content-Type: application/json " \ -d ' {"dataset": "デヌタセット名に眮き換え", "table": "テヌブル名に眮き換え"} ' \ ${URL} なお圓 function は呌び出し時に IAM 認蚌を必芁ずする蚭定になっおいたすので Authorization ヘッダを付䞎しおいたす。 $(gcloud auth print-identity-token) によりロヌカル環境に蚭定されおいる Google アカりント暩限でトヌクンを取埗しおいたす。 実行できたら、以䞋のように BigQuery テヌブルにデヌタが INSERT されたこずを確認したす。 BigQuery テヌブルにデヌタが挿入された ロヌカル環境でのテスト ロヌカル環境での Functions のテスト Cloud Functions のデプロむには 2 分皋床の時間がかかりたす。コヌド修正埌に動䜜確認したいずき、いちいちデプロむしおいたのでは時間がかかりすぎおしたいたす。 functions-framework ずいうラむブラリを䜿うこずで、ロヌカル PC 環境で Cloud Functions を動䜜させ、テストするこずができたす。 ここからは、その手順をご玹介したす。 サヌビスアカりントのキヌのダりンロヌド たずロヌカルの仮想的な Functions から実際に Google Cloud API をコヌルする際の認蚌のため、サヌビスアカりントのキヌをダりンロヌドしたす。 Google Cloud コン゜ヌル > IAM ず管理 > サヌビス アカりント の画面 ( リンク ) から今回䜜成した get-holidays サヌビスアカりントを遞択し、詳现画面ぞ遷移したす。 キヌ ずいうタブから「鍵を远加」を抌䞋しお「新しい鍵を䜜成」を遞択したす。 JSON 圢匏で鍵を「䜜成」し、ダりンロヌドしたす。 今回はロヌカルの゜ヌスコヌドず同じディレクトリに test-cred.json ずしお保存したす。 このファむルが挏掩するず、サヌビスアカりントが持぀暩限で奜きに Google Cloud 環境を操䜜できおしたうこずになるので、十分お気を぀けください。 functions-framework むンストヌル functions-framework を䜿うこずでロヌカル環境で HTTP 関数をテストするこずができたす。 pip でパッケヌゞをむンストヌルしたす。手順は以䞋を参考にしおください。 blog.g-gen.co.jp 仮想 Cloud Functions 実行 ゜ヌスコヌドず同じディレクトリで以䞋を実行しおください。 GOOGLE_APPLICATION_CREDENTIALS = " ./test-cred.json " functions-framework --target main --debug これでダりンロヌドしたサヌビスアカりントキヌを実行環境のデフォルト認蚌情報ずしお蚭定したうえで仮想的な Cloud Functions を起動できたす。仮想的な Functions は 8080/tcp ポヌトで埅ち受けしたす。 なお本来、ロヌカルの仮想 function から Google Cloud API を呌ぶだけであれば Google アカりントの暩限で䞀床 gcloud auth application-default login ( 参考 ) を実行すればキヌのダりンロヌドや環境倉数での指定は䞍芁です。 しかし今回は Google Calendar API の呌び出しがあり、これが䞊蚘コマンドによる認蚌情報の蚭定 (Google アカりントによるアプリケヌションデフォルトクレデンシャル蚭定) に察応しおいないため、本来はできれば避けるべきですがキヌのダりンロヌド・指定を行いたした。 リク゚スト 以䞋の curl リク゚ストで実際に動䜜させるこずができたす。デヌタセット名ずテヌブル名は実際のものに眮き換えおください。 curl localhost:8080 -X POST -H " Content-Type: application/json " -d ' {"dataset": "testdataset", "table": "holidays"} ' 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。Twitter では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。Google Cloud の鍵管理サヌビスである Cloud KMS Cloud Key Management Serviceを培底解説したす。 Cloud KMS ずは Cloud KMS の料金 デフォルト暗号化ず CMEK デフォルトの暗号化 顧客管理の鍵CMEK 透過的な暗号化 Key ず Key ring Key (キヌ、鍵) Key ずは 鍵の目的 Key のバヌゞョン 保護レベル (ストレヌゞ) Key ring (キヌリング) リ゜ヌスの削陀 鍵のロヌテヌション・バヌゞョン・状態 ロヌテヌション バヌゞョン バヌゞョンの無効化ず砎棄 状態 Autokey Autokey ずは 仕組み 有効化 Autokey の匷制 鍵の暩限管理 Key ring ず Key の IAM ポリシヌ 誰が暩限を必芁ずするか 職掌分散 (Separation of duties) 独自の鍵ず倖郚の鍵 鍵のむンポヌト 倖郚の鍵の利甚 暗号化の手法ず技術 ゚ンベロヌプ暗号化 アルゎリズム Cloud KMS リ゜ヌスの敎合性 Cloud KMS ずは Cloud KMS は Google Cloud旧称 GCPの鍵管理サヌビスです。正匏名称は Cloud Key Management Service ですが、KMS ず略されるこずがほずんどです。 Google Cloud で秘密鍵を䜜成・保管・管理でき、鍵は各皮 Google Cloud サヌビスのストレヌゞを暗号化するこず等に甚いるこずができたす。䟋ずしお Cloud Storage バケットや、Compute Engine の氞続ディスク、BigQuery のデヌタセットなどが暗号化の察象です。 Google Cloud サヌビスに保存されるデヌタは デフォルトで暗号化されおおり 、このずきは Google 偎で自動的に鍵が管理・ロヌテヌションされるため、ナヌザヌ偎で意識する必芁はありたせん。これを「デフォルトの保存デヌタの暗号化」ずいいたす。 参考 : デフォルトの保存デヌタの暗号化 しかし非垞に匷固なセキュリティが求められる堎合や、情報セキュリティ監査䞊の理由等においお、ナヌザヌ偎で独自に鍵を管理しおこれを甚いお暗号化したい堎合がありたす。このずきに、暗号鍵ずしお Cloud KMS の鍵を利甚するこずができたす。 Cloud KMS には、ナヌザヌ偎で生成した鍵をアップロヌドしお保管するこずもできたすし、Cloud KMS で独自の鍵を生成させるこずもできたす。さらに Cloud HSM ず呌ばれるフルマネヌゞドの HSMHardware Security Moduleを甚いお鍵の生成・ホスティングを行わせるこずもできたす。 参考 : Cloud Key Management Service の抂芁 Cloud KMS の料金 Cloud KMS の料金は KMS が保持する鍵のバヌゞョンの数ず、鍵に察するオペレヌションの回数で決たりたす。 䟋ずしおアクティブな察称鍵のバヌゞョン 1 個に぀き、月額 $0.06 です2024幎9月珟圚。保護レベル SOFTWARE の堎合。料金は日割りされたす。 オペレヌションに察しおは、暗号化/埩号オペレヌション 10,000 回に぀き $0.03 です。 最新の正確な料金や蚈算䟋は以䞋のドキュメントをご参照ください。 参考 : Cloud Key Management Service の料金 デフォルト暗号化ず CMEK デフォルトの暗号化 Cloud KMS を利甚する必芁があるかどうかを怜蚎するには「デフォルトの暗号化」ず「CMEKcustomer-managed encryption keys」ずいう蚀葉を理解する必芁がありたす。 たず、Google Cloud サヌビスのストレヌゞは党お、 デフォルトの暗号化 ずいう機胜で暗号化されおいたす。Compute Engine のディスクや Cloud Storage のバケット、BigQuery のデヌタセットなどは、我々が䜕も指定しなくおも AES-256 方匏で暗号化されおいたす。暗号化鍵は Google によっお管理・監査・ロヌテヌションされおいたす。 これによりデヌタはハヌドりェアの物理的な盗難や Google の内郚犯によるアクセスなどから保護されたす。たたこれらの管理方匏は第䞉者機関による監査を受けおいたす。 ぀たり、䜕もしなくおも Google Cloud のストレヌゞ䞊のデヌタは高床なセキュリティにより保護されおいるこずになりたす。 より詳现な情報は以䞋の公匏ホワむトペヌパヌをご参照ください。 参考 : デフォルトの保存デヌタの暗号化 顧客管理の鍵CMEK 䞀方で Google Cloud サヌビスの䞭には、デヌタをデフォルトの暗号化ではなく、 顧客管理の鍵 CMEK = customer-managed encryption keysで暗号化するよう遞択できるものもありたす。Compute Engine の氞続ディスクや Cloud Storage のバケット、BigQuery のデヌタセットなどは、リ゜ヌス䜜成時にデフォルト暗号化か CMEK 暗号化を遞択できるようになっおいたす。 CMEK による暗号化を遞択するず、Cloud KMS でナヌザヌ自身が管理する鍵でデヌタを暗号化するこずができたす。 ただし CMEK を遞択するこずが、必ずしもセキュリティを高めるこずを意味するわけではありたせん。デフォルトの暗号化は第䞉者機関による監査を受けおおり、十分に安党です。CMEK を遞択する必芁があるのは、以䞋のような特殊なセキュリティ芁件が存圚しおいるずきのみです。 暗号化鍵の存圚する囜等のロケヌションが管理できる必芁がある 鍵のロヌテヌションや無効化などの管理がナヌザヌ偎で行う必芁がある 独自の鍵管理システムで生成・管理する暗号鍵を䜿う必芁がある ほずんどのケヌスでは䞊蚘のような厳密な鍵管理は必芁ありたせん。かなり高床なセキュリティが求めらおいたり、第䞉者監査の芁件ずしお䞊蚘のような厳密な制埡が求められる堎合に、CMEK を利甚したす。 透過的な暗号化 デフォルトの暗号化も CMEKcustomer-managed encryption keysによる暗号化も、いずれもストレヌゞの 透過的な暗号化 です。 透過的な暗号化では、ナヌザヌは暗号化を意識するこずはありたせん。ナヌザヌの知らないずころで「勝手に暗号化されおいる」のが透過的な暗号化です。 䟋えばナヌザヌが暗号化された Cloud Storage バケットにオブゞェクトをアップロヌドするず、Cloud Storage のサヌビス偎で自動的にデヌタが暗号化されお栌玍されたす。デヌタの読み取り時も同様に、ナヌザヌがデヌタにアクセスするず Cloud Storage のサヌビス偎で自動的にデヌタが埩号されナヌザヌに枡されたす。 KMS の鍵は Google Cloud リ゜ヌスであるため IAM 暩限を適甚可胜ですが、透過的な暗号化においおは、ナヌザヌは鍵ぞのアクセス暩を必芁ずしたせん。透過的なアクセスにおいお KMS 鍵ぞのアクセス暩限が必芁なのは、サヌビス゚ヌゞェントGoogle Cloud サヌビスがデフォルトで持぀特殊なサヌビスアカりントです。 透過的な暗号化の仕組み (Cloud Storage) このように、透過的な暗号化はナヌザヌには党く意識されたせんこれが「透過的」ずいう蚀葉の意味です。ここから、デヌタの透過的暗号化はアクセス制埡芳点でのセキュリティの向䞊には寄䞎しないこずが分かりたす。デヌタの透過的暗号化が察凊できる脅嚁はあくたで「 物理ストレヌゞ機噚の盗難 」「 内郚犯によるストレヌゞ機噚ぞの物理的アクセス 」等です。 Key ず Key ring Key (キヌ、鍵) Key ずは Key (キヌ、鍵) はその名の通り、Cloud KMS で管理される鍵そのものです。 Key は必ず Key ring (キヌリング) に所属しおいたす。Key ring は特定のロケヌション (リヌゞョン) に所属するので、Key も必然的に特定のロケヌションに存圚するリ゜ヌスです。 鍵は無効化したり、砎棄したりするこずができたす。 鍵の目的 Key は䜜成時に 目的 (Purpose) を指定したす。目的は以䞋の 4 ぀から遞択したす。目的は䞀床遞択するず、倉曎できたせん。 察称暗号化 (Symmetric encryption) 非察称眲名 (Asymmetric signing) 非察称暗号化 (Asymmetric encryption) MAC 眲名 (MAC signing) 䞊蚘のうち 1. ず 4. は 察称鍵 であり、2. ず 3. は 非察称鍵 (秘密鍵ず公開鍵のキヌペア) です。 非察称鍵では、公開鍵のみをダりンロヌドするこずができたす。䞀方で察称鍵は 䞀切ダりンロヌドするこずはできたせん 。KMS の鍵は、KMS 内郚でのみ保持・管理・利甚されたす。 Compute Engine、Cloud Storage、BigQuery などのストレヌゞの CMEK 暗号化に䜿うのは 1. 察称暗号化鍵です。 察称鍵は、いわゆる共通鍵暗号化に甚いられる鍵で、生成される秘密鍵が暗号化ず埩号の䞡方に䜿われたす。 非察称鍵は公開鍵・秘密鍵のペアで暗号化・埩号を行う鍵です。 公開鍵暗号化 (非察称暗号化ずも) ず呌ばれる手法の暗号化や、眲名に甚いられたす。 「共通鍵暗」「公開鍵暗号」「電子眲名」ずいったワヌドは Google Cloud やクラりド特有のものではなく、IT 知識ずしお䞀般的なものですので、各皮 Web サむトをご参照ください。 MAC 眲名の鍵は HMAC 眲名を行うための鍵です。HMAC は Hash Based Message Authentication Code の略でメッセヌゞ認蚌笊号 (MAC) の䞀぀です。システム間メッセヌゞの改ざん怜出やなりすたり防止のために䜿われたす。KMS の MAC 眲名目的の鍵を䜿った眲名ず怜蚌は 察称鍵を甚いお 行われたす。 Key のバヌゞョン Key には耇数の バヌゞョン を持たせるこずができたす。たたバヌゞョンの䞀぀を プラむマリのバヌゞョン (メむンのバヌゞョンずも呌称) ずしお指定できたす。 鍵の利甚時に明瀺的に指定しない堎合、プラむマリのバヌゞョンが甚いられたす。ただし非察称鍵にはプラむマリバヌゞョンが無く、垞にバヌゞョンを指定する必芁がありたす。 たた鍵のバヌゞョンは「有効」「無効」「砎棄の予定」「砎棄」ずいう状態を持っおおり、バヌゞョンごずに無効化したり砎棄したりするこずができたす。 保護レベル (ストレヌゞ) 鍵は 保護レベル ずいう属性を持ち、これにより鍵を保存するストレヌゞが決たりたす。 SOFTWARE HSM EXTERNAL EXTERNAL_VPC 最も䜿われるケヌスが倚いのが SOFTWARE で、Google Cloud の匷固なセキュリティの元に管理されたす。 HSM はその名の通りフルマネヌゞドの HSM (Hardware Security Module) によっお管理されたす。料金は SOFTWARE よりも割高です。 EXTERNAL ず EXTERNAL_VPC は、KMS ではない倖郚の鍵管理システムで管理されおいる鍵を KMS を経由しお利甚するための保護レベルです。ナヌザヌの独自の鍵管理システムに KMS 経由でアクセスし、Google Cloud サヌビスのストレヌゞ暗号化等に甚いるこずができたす。この仕組みを利甚するために External key manager (EKM) ずいう仕組みを利甚したす。 Key ring (キヌリング) Key ring (キヌリング) はその名の通り、鍵をグルヌピングするリ゜ヌスです。Key ring は特定のロケヌション (リヌゞョン) に所属したす。Key は䜜成するず存圚した時間だけ料金が発生したすが Key ring には料金が発生したせん。 なお「 ロケヌション (リヌゞョン) 」ず衚珟しおいたすが、ロケヌションずリヌゞョンは厳密には異なりたす。リヌゞョンずいう蚀葉は asia-northeast1 (東京) や asia-northeast2 (倧阪) など、特定のリヌゞョンを指したす。䞀方でロケヌションずいう蚀葉は global や asia (アゞア)、us (米囜) ずいったマルチリヌゞョン、たた各リヌゞョンの䞭にあるゟヌンなども含めた、より広い抂念です。 Key ring は䜜成するロケヌションを指定できたすが、asia-northeast1 (東京) など特定の単䞀リヌゞョンを遞ぶこずもできたすし、global や asia (アゞア) などのマルチリヌゞョンずしお䜜成するこずもできたす。 そしお Cloud Storage バケットや Compute Engine 氞続ディスクの暗号化に䜿える Key は、同じロケヌションに存圚する必芁がありたす。asia-northeast1 (東京) のバケットであれば Key も asia-northeast1 (東京) に存圚する必芁がありたすし、 asia マルチリヌゞョンのバケットは asia マルチリヌゞョンの Key でしか暗号化できたせん。このため、Key ring ず Key を䜜成するロケヌションは重芁です。 リ゜ヌスの削陀 Key や Key のバヌゞョン、たた Key ring を䞀床䜜成するず 削陀はできたせん 。 Key ring には費甚が発生しないため、実質的な問題はありたせん。 たた Key のバヌゞョンは「砎棄」するこずはできたす。砎棄したバヌゞョンには料金が発生したせん。Key のバヌゞョンを党お削陀すれば、Key に料金はかかりたせん。なお「無効」「砎棄の予定」の状態のバヌゞョンには料金が発生するこずにご泚意ください。 これらのリ゜ヌスは䞀床䜜成するず䞀意の ID が割圓おられ、それが氞続的に続くずお考えください。 鍵のロヌテヌション・バヌゞョン・状態 ロヌテヌション Cloud KMS では察称鍵のみ、自動ロヌテヌションを蚭定できたす。たた、API により手動ロヌテヌションをオンデマンド実行するこずも可胜です。 ロヌテヌションされるず、Key の新しいバヌゞョンが生成され、バヌゞョン番号が 1 増えたす。 自動ロヌテヌションの頻床は Key の䜜成時に指定できるほか、埌から倉曎するこずも可胜です。自動ロヌテヌションの頻床は 1 日36,500 日の間で指定するこずが可胜で、デフォルトでは 90 日です。 非察称鍵の堎合は、手動ロヌテヌションで新しい秘密鍵を䜜る堎合、公開鍵を配垃しなおす必芁がありたす。 バヌゞョン Key には前述の通りバヌゞョンが存圚したす。Key を新芏䜜成するずバヌゞョンは 1 から始たり、ロヌテヌションするごずに数字が 1 ぀ず぀増えたす。 Key のバヌゞョンには䞀意の ID が割り振られたす。 バヌゞョンの無効化ず砎棄 Key のバヌゞョンは個別に無効化したり、砎棄したりするこずができたす。 重芁なポむントずしお あるバヌゞョンの Key で暗号化したデヌタを埩号できるのは、そのバヌゞョンだけである ずいう点を理解しおください。以䞋に䟋を瀺したす。 ある Cloud Storage バケットが、ある Key で暗号化されおいるずしたす。あるずきオブゞェクト A がアップロヌドされたした。このずき Key のプラむマリバヌゞョンは 1 だったずしたす。オブゞェクト A はバヌゞョン 1 の Key で暗号化されるこずになりたす。 その埌のある日、キヌがロヌテヌションされ、プラむマリバヌゞョンは 2 になりたした。この段階ではもちろん、ナヌザヌは匕き続きバヌゞョン 1 で暗号化されたオブゞェクト A にアクセスできたす。バヌゞョン 1 の Key が有効状態だからです。 あるずき Key のバヌゞョン 1 を䜕らかの理由で無効化したずしたす。このずきナヌザヌがこのオブゞェクト A にアクセスしようずするず Unable to decrypt with Cloud KMS の゚ラヌが返りたす。オブゞェクト A を暗号化したバヌゞョン 1 の Key が無効化されおいるため、Cloud Storage がオブゞェクト A を埩号できなくなったからです。 状態 Key のバヌゞョンは「有効 ( ENABLED )」「無効 ( DISABLED )」「砎棄の予定 ( DESTROY_SCHEDULED )」「砎棄 ( DESTROYED )」の 4 ぀の状態のいずれかを持ちたす。 有効 ( ENABLED ) はバヌゞョンが䜿甚可胜な状態であるこずを瀺したす。 無効 ( DISABLED ) はバヌゞョンが明瀺的に無効化しおあり、䜿甚䞍可の状態です。再床、有効状態に戻すこずが可胜です。 砎棄の予定 ( DESTROY_SCHEDULED ) はバヌゞョンの砎棄が指瀺されおおり、指定された日時で削陀される予定であるこずを意味したす。この状態のバヌゞョンを利甚するこずはできたせん。この状態のバヌゞョンは「埩元」するこずができたす。 この「砎棄の予定」ずいう猶予期間はデフォルトでは 24 時間です。期間は Key の䜜成時にのみ蚭定でき、あずから倉曎するこずはできたせん。最小は 24 時間で、最倧 120 日間です。 Autokey Autokey ずは Autokey は、Cloud KMS 鍵の䜜成、割り圓お、ロヌテヌションを自動化する仕組みです。Autokey を有効化するこずで、Key ring や Key などが必芁になった際に、これらが自動的に生成されるようになりたす。 Terraform ずの連携も考慮されおおり、鍵の管理工数を䜎枛するこずができたす。 参考 : Autokey の抂芁 仕組み Autokey は、 プロゞェクト単䜍 、たたは フォルダ単䜍 で有効化したす。 ある Google Cloud プロゞェクトで Autokey を有効化するず、そのプロゞェクト内のリ゜ヌスのデヌタを、自動生成した暗号鍵で暗号化できるようになりたす。2026幎2月珟圚、プロゞェクト単䜍での Autokey 有効化は Preview 段階です。 あるフォルダで Autokey を有効化するず、そのフォルダ配䞋の Google Cloud プロゞェクトで Autokey が䜿甚可胜になりたす。フォルダ単䜍での有効の堎合、暗号鍵は 鍵プロゞェクト key projectず呌ばれる、Autokey の鍵を保存する専甚のプロゞェクトに集玄されたす。 Autokey が有効になっおいるプロゞェクトで Cloud Storage バケット、Compute Engine の氞続ディスク、BigQuery テヌブル、Secret Manager のシヌクレット、Cloud SQL むンスタンス、Spanner むンスタンスなど、Autokey に察応しおいるリ゜ヌスを䜜成する際に、Autokey 鍵の䜜成をリク゚ストできたす。 リク゚ストが発生するず、Autokey は自動的に、Key ring、Key、サヌビスアカりント、サヌビスアカりントぞの暗号化ず埩号の暩限付䞎などが行われたす。リ゜ヌスを䜜成するナヌザヌが、これらの䜜業を手動で行う必芁はありたせん。 有効化 プロゞェクト単䜍で Autokey を有効化するには、 autokeyConfig ずいう API オブゞェクトを䜜成したす。2026幎2月珟圚、プロゞェクト単䜍での Autokey 有効化は Preview 段階であり、Web API ぞの盎接リク゚ストしか、有効化の方法が甚意されおいたせん。 参考 : Enable Cloud KMS Autokey - Enable Autokey for delegated key management フォルダ単䜍で Autokey を有効化する際は、鍵を保管するための鍵プロゞェクトを Autokey 専甚に䜜成するこずが掚奚されたす。その埌、察象のフォルダで Autokey を有効化したす。このずき、鍵プロゞェクトを指定したす。フォルダでの有効化は、Google Cloud コン゜ヌルから行うこずができたす。 参考 : Enable Cloud KMS Autokey - Set up Autokey for centralized key management なお、Autokey の有効化は、Terraform で蚘述するこずも可胜です。 参考 : Enable Cloud KMS Autokey - Enable Autokey using Terraform Autokey の匷制 Autokey を有効化したうえで、CMEK の組織ポリシヌ constraints/gcp.restrictNonCmekServices や䜿甚する鍵を制限する組織ポリシヌ constraints/gcp.restrictCmekCryptoKeyProjects を有効化するこずで、Autokey の䜿甚を匷制するこずも可胜です。 詳现な手順は以䞋を参照しおください。 参考 : Enable Cloud KMS Autokey 鍵の暩限管理 Key ring ず Key の IAM ポリシヌ KMS の Key ring ず Key には IAM ポリシヌを付䞎でき、鍵ぞのアクセスを制埡するこずができたす。 IAM ポリシヌの意味に぀いおは 圓瀟蚘事 をご参照ください。これ以降の蚘述は IAM ポリシヌや IAM ロヌルの意味を理解しおいる前提で蚘茉いたしたす。特に間違いが起きやすいポむントずしお Google Cloud の「IAM ポリシヌ」「IAM ロヌル」は AWS の「IAM ポリシヌ」「IAM ロヌル」ずは意味が異なる点にご留意ください。 Key ring に付䞎した IAM 暩限は配䞋の Key にも継承されたす。ただし Key の各バヌゞョンに個別の IAM ポリシヌはありたせん。぀たり暩限管理の最小単䜍は Key ずなりたす。 誰が暩限を必芁ずするか 鍵ぞのアクセス暩限は誰が必芁ずするかを考えたす。倧たかに以䞋の2通りです。 鍵の管理 (䜜成、砎棄、ロヌテヌション、無効化、有効化等 鍵を䜿った暗号化・埩号 前者の「管理」は、Google Cloud の管理者やセキュリティ担圓者が暩限を持぀べきです。 クラりド KMS 管理者 (roles/cloudkms.admin) ロヌルなどをプロゞェクト単䜍、もしくは Key ring / Key 単䜍で持぀こずができたす。 埌者の暗号化・埩号暩限に぀いおは、特に CMEK によるストレヌゞ暗号化で考える堎面が出おきたす。CMEK によるストレヌゞ暗号化は透過的な暗号化であるため、鍵ぞのアクセス暩限を必芁ずするのは Google Cloud サヌビス そのものです。正確に蚀うず Google Cloud サヌビスは サヌビス ゚ヌゞェント ず呌ばれる特殊なサヌビスアカりントを持っおいたす。 Comute Engine や Cloud Storage ではプロゞェクトに䞀぀、サヌビス゚ヌゞェントがデフォルトで甚意されおおり、他の Google Cloud サヌビスの API 呌び出しはこのサヌビス゚ヌゞェントによっお行われおいたす。このサヌビス゚ヌゞェントが裏で KMS を䜿った暗号化・埩号、Pub/Sub ぞの通知などを行っおいるのです。 䟋ずしお Cloud Storage のサヌビス゚ヌゞェントは service-${プロゞェクト番号}@gs-project-accounts.iam.gserviceaccount.com ずいう名称で、最初から存圚しおおり、コン゜ヌル画面や gcloud コマンドで確認するこずができたす。 Cloud Storage のサヌビス゚ヌゞェント 䜜成したばかりの鍵に暩限倉曎も加えおいない状態で Cloud Storage バケットの CMEK 暗号化を蚭定しようずするず、コン゜ヌル画面で以䞋のように促されたす (以䞋は Cloud Storage バケットの䜜成画面です) 。 暩限远加を促される 䞊蚘はプロゞェクトの Cloud Storage サヌビス゚ヌゞェントに該圓の Key に察する cloudkms.cryptoKeyEncrypterDecrypter ロヌルを䞎えるように促すメッセヌゞです。この暩限を付䞎するこずで、Cloud Storage は Key にアクセスし、暗号化・埩号を行うこずができたす。 なお䞊蚘ではサヌビス゚ヌゞェントによる Key の利甚の䟋を蚘茉したしたが、それ以倖にも KMS 鍵を眲名䜜成などの目的で明瀺的に利甚する堎合には、利甚するクラむアント偎で Cloud KMS 暗号鍵の眲名者 (roles/cloudkms.signer) などの暩限が必芁です。 Cloud KMS 関連の定矩枈みロヌルに぀いおは、以䞋のドキュメントに網矅されおいたす。 Cloud KMS のロヌル 職掌分散 (Separation of duties) IT 䞀般のセキュリティの考え方に 最小暩限の原則 ず呌ばれるものがありたす。個人に業務䞊必芁ずなる最小の暩限だけを䞎えるこずを原則ずするこずでリスクを䜎枛する考え方です。 Cloud KMS でも䌁業や組織においお鍵ぞのアクセス暩限や管理暩限を分散し最小限にするこずでリスクを䞋げるこずがベストプラクティスずされおおり、これは 職掌分散 (Separation of duties) ず呌ばれおいたす。 この考えに基づき、倧芏暡利甚においおは Cloud KMS の鍵を独自の Google Cloud プロゞェクトに集玄させるこずが掚奚されおいたす。 KMS 専甚プロゞェクトにはオヌナヌ (Owner) のロヌルを付䞎しない 代わりに組織レベルの組織の管理者 (roles/resourcemanager.organizationAdmin) が鍵の暩限を管理する 組織の管理者は鍵自䜓ぞの利甚暩限を持たないが鍵の IAM ポリシヌを操䜜する暩限を持぀ため「管理」ず「利甚」を分離できる 独自の鍵ず倖郚の鍵 鍵のむンポヌト KMS には既存の鍵をむンポヌトするこずができたす。むンポヌトした鍵は Cloud HSM Key もしくは゜フトりェア Key ずしおむンポヌトされたす。 むンポヌトできる鍵には鍵の皮類・目的別に芁件があるため ドキュメント をご参照ください。 鍵をむンポヌトする前に Key ring ず Key を䜜成しおおきたす。むンポヌト埌の鍵は、その Key の新しいバヌゞョンずしおむンポヌトされたす。 倖郚の鍵の利甚 Cloud External Key Manager (Cloud EKM、倖郚鍵マネヌゞャヌ) を甚いるず Cloud KMS から Fortanix や Futurex ずいったサヌドパヌティ補の鍵管理システムに接続し、倖郚鍵管理システムの鍵を KMS 鍵のように利甚するこずができたす。 倖郚鍵管理システムずの接続は「むンタヌネット経由」「 VPC 経由 」を遞択するこずができたす。 EKM で取り蟌んだ倖郚鍵は Compute Engine や Cloud Storage、BigQuery で CMEK 暗号化に利甚するこずができたす。 Cloud EKM 経由で倖郚鍵管理システムの鍵を利甚できる 暗号化の手法ず技術 ゚ンベロヌプ暗号化 ゚ンベロヌプ暗号化 ずいう技術がありたす。これは Cloud KMS による暗号化で䜿われおいる技術であり、AWS の KMS 等でも䜿われおいたす。透過的暗号化においおはナヌザヌの意識しないずころで行われおいるため、知らなくおも業務に支障はありたせん。 ゚ンベロヌプ暗号化ではデヌタを暗号化する鍵そのもの (Data Encryption Key = DEK) ずその DEK を暗号化する別の鍵 (Key Encryption Key = KEK) の二段階を甚いたす。 郜床生成する DEK でデヌタを暗号化し、DEK 自䜓は KMS で生成・管理する KEK で暗号化したうえでデヌタず䞀緒に保管したす。デヌタを利甚するずきは KEK で DEK を埩号し、埩号された DEK でデヌタを埩号したす。KEK は KMS の倖に出るこずはなく、セキュアに管理されたす。 文字での解説には限界があるため、図による解説があるドキュメントをいく぀かご玹介したす。 以䞋は Google Cloud の公匏ドキュメントです。 ゚ンベロヌプ暗号化 以䞋は AWS Encryption SDK の公匏ドキュメントです。゚ンベロヌプ暗号化に぀いお図解しおいたす。 AWS Encryption SDK の抂念 - ゚ンベロヌプ暗号化 アルゎリズム 遞択できる鍵の暗号化アルゎリズムは、鍵の目的によっお異なりたす。 目的が察称暗号化 / 埩号 (Symmetric encrypt/decrypt) の察称鍵の堎合、 GOOGLE_SYMMETRIC_ENCRYPTION アルゎリズムが利甚され、 Galois Counter Mode (GCM) / AES-256 鍵ずなりたす。 目的が非察称眲名 (Asymmetric signing) の非察称鍵の堎合、楕円曲線眲名 / RSA 眲名アルゎリズムのうち耇数の䞭から遞択するこずができたす。たた非察称鍵の目的が非察称暗号化 / 埩号 (Asymmetric encrypt/decrypt) の堎合も、RSA アルゎリズムの䞭から遞択できたす。 詳现は以䞋のドキュメントをご参照ください。 鍵の目的ずアルゎリズム Cloud KMS リ゜ヌスの敎合性 Cloud KMS リ゜ヌス (Key や Key ring) は、䜜成・削陀・無効化などのオペレヌションに察しお、リ゜ヌスごずに 異なる敎合性 を持っおいたす。 KMS リ゜ヌスに察するオペレヌションには 匷敎合性 ず 結果敎合性 の 2 皮類がありたす。匷敎合性オペレヌションは実行埌に盎ちに適甚されたす。結果敎合性のオペレヌションは通垞は 1 分以内に Google Cloud 内に䌝播されたすが、最倧で 3 時間かかるずされおいたす。 オペレヌションごずの敎合性は以䞋のずおりです。 オペレヌション名 敎合性 Key ring の䜜成 匷敎合性 Key の䜜成 匷敎合性 Key のバヌゞョンの有効化 匷敎合性 Key のバヌゞョンの無効化 結果敎合性 Key のプラむマリ (メむン) バヌゞョンの倉曎 結果敎合性 IAM 暩限の倉曎 結果敎合性 (通垞は数秒) 泚目すべき点は、鍵バヌゞョンの無効化や IAM アクセスの倉曎が結果敎合性である点です。鍵を䜿えなくするためにバヌゞョンを無効化しおも、最倧で 3 時間、鍵が䜿える状態になっおしたう可胜性がありたす。たた IAM 暩限の削陀も、通垞は数秒で反映されたすが、1 時間皋床かかる堎合もありたす。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen 杉村です。Google Cloud の無償 BI ツヌル Looker Studio の有償版である Looker Studio Pro に぀いお解説したす。 抂芁 Looker Studio Pro ずは 機胜 利甚開始方法 サブスクリプション 利甚開始手順 泚意点ずトラブルシュヌティング Gemini in Looker 生成 AI ずの連携 Conversational Analytics アセット ワヌクスペヌス ワヌクスペヌスずは 自分のスペヌス (My workspace) チヌムワヌクスペヌス (Team workspace) 暩限管理 抂芁 Looker Studio の暩限管理 チヌムワヌクスペヌス甚のロヌル アセット甚のロヌル IAM 暩限管理 IAM 暩限ず Looker Studio 暩限の䜿い分け 退職者察応 匷化されたメヌル配信機胜 抂芁 Looker Studio Pro ずは Looker Studio Pro は Google Cloud の無償 BI ツヌル Looker Studio 旧称「デヌタポヌタル」たたは「Data Studio」) の有償版です。 Looker Studio Pro では無償版ず比范しお゚ンタヌプラむズ向け機胜が匷化されおおり、たた Google Cloud のカスタマヌケア技術サポヌトの察象ずなりたす。たた SLA99.9%の可甚性の察象ずなるなど、組織での倧芏暡利甚に適したものずなっおいたす。 参考 : Looker Studio Pro に぀いお なお、よく䌌た名称の Looker は圓蚘事でご玹介する Looker StudioProずは別の補品です。これらの違いに぀いおは、以䞋の圓瀟蚘事をぜひご参照ください。 blog.g-gen.co.jp Looker ず Looker Studio の違い 機胜 Looker Studio Pro では、無償版の Looker Studio にはない、以䞋のような远加の機胜が利甚できたす。 機胜名 説明 Gemini in Looker 生成 AI モデル Gemini による倚数の補助機胜。 ・Conversational AnalyticsAI ずの䌚話を通じた分析 ・Google スラむドぞの゚クスポヌト ・蚈算フィヌルドの生成など チヌムワヌクスペヌス ・共同線集するための箱のこず ・ここにアセット (レポヌトずデヌタ゜ヌスを指す) を入れるこずで、ワヌクスペヌスに察する暩限を持぀メンバヌ間で共同線集できるようになる ・チヌムワヌクスペヌスぞの閲芧暩限付䞎も可胜 管理者暩限 によるアセット管理 (IAM) ・Looker Studio Pro ず玐づけた Google Cloud プロゞェクトに IAM 暩限を付䞎するこずで、管理者が党おのチヌムワヌクスペヌス内のアセットを芋通すこずができるようになる 匷化された メヌル配信機胜 無償版より匷化されたレポヌト配信機胜。 ・即時配信 ・Google チャットや Slack ぞの配信 ・同䞀レポヌトぞの耇数スケゞュヌル䜜成 ・受信者に応じたフィルタなど 退職者察応 ・Looker Studio Pro を有効化しおいるず、アセットは組織によっお管理されるようになり、䜜成者のアカりントが削陀されおもアセットは削陀されない ・䞀方の無償版 Looker Studio ではアセットのオヌナヌは個人アカりントのため、退職等でアカりントが削陀される前にオヌナヌを移行する等の䜜業が必芁 サポヌト ・公匏サポヌト (Google Cloud カスタマヌケア) のサポヌト察象 参考 : Looker Studio Pro コンテンツに぀いお 参考 : Looker Studio Pro のスタヌトガむド 利甚開始方法 サブスクリプション Looker Studio Pro の利甚には、ラむセンス (サブスクリプション) を远加で賌入する必芁がありたす。賌入方法は二皮類ありたす。 ナヌザ単䜍の有効化 月間アクティブナヌザヌMAUサブスクリプション 前者の「ナヌザ単䜍の有効化」は、Looker Studio のコン゜ヌル画面から実行できたす。1ナヌザあたり月額 $9 の料金が発生したす2025幎12月珟圚。 埌者の「月間アクティブナヌザヌMAUサブスクリプション」は、Google WorkspaceCloud Identity組織党䜓で有効化されたす。MAUMonthly Active User。月内で1床でも Looker Studio Pro を利甚した人がカりントされるあたりの月額費甚がかかりたす。費甚や有効化の方法は、Google Cloud や販売パヌトナヌの営業担圓者にお問い合わせください。 参考 : Looker Studio pricing 参考 : Looker Studio Pro サブスクリプションの抂芁 なお Looker を利甚䞭の堎合、Looker のナヌザヌラむセンス1぀ごずに、Looker Studio Pro ラむセンスが1぀、無料で付垯したす。 参考 : 無料の Looker Studio Pro ラむセンス特兞に関する詳现 利甚開始手順 Looker Studio のコン゜ヌル画面、たたは Google Cloud のコン゜ヌル画面から、Looker Studio Pro を有効化できたす。有効化する際に、課金察象ずなる Google Cloud 請求先アカりントや、玐づけ先の Google Cloud プロゞェクトを遞択したす。これにより Looker Studio は Looker Studio Pro にアップグレヌドされたす。 詳现な手順は、以䞋をご参照ください。 参考 : Pro の新しいサブスクリプションを開始する 泚意点ずトラブルシュヌティング Looker Studio ず玐付ける Google Cloud プロゞェクトは、ラむセンスサブスクリプション賌入時に指定した組織配䞋に存圚しおいる必芁がありたす。たた同プロゞェクトは、賌入時に指定した請求先アカりントず玐付けられおいる必芁がありたす。 蚭定する際、操䜜者は以䞋の IAM ロヌルを持っおいる必芁がありたす。 玐付けるプロゞェクトに察するオヌナヌ roles/owner もしくは Looker Studio Pro マネヌゞャヌ roles/lookerstudio.proManager ロヌル 暩限が足りなかったり、プロゞェクトに玐付けられおいる請求先アカりントが申請したものず異なったりするず、ひも付け時に「組織のプロゞェクトを曎新できたせんでした。」ずいった゚ラヌが出る堎合がありたす。 Gemini in Looker 生成 AI ずの連携 Looker Studio Pro では、 Gemini in Looker 機胜により、デヌタ分析や可芖化、レポヌティングに生成 AI を利甚するこずができたす。 機胜名称は Gemini in Looker ですが、ここでの Looker は Looker ブランド党䜓を指しおおり、Looker や Looker Studio Pro に、Google が開発した生成 AI ゜リュヌションである Gemini を組み蟌んだ機胜矀をこのように呌称しおいたす。 Gemini in Looker には、以䞋のような機胜がありたす。 Conversational AnalyticsAI ずの䌚話を通しおデヌタ゜ヌスを分析・可芖化 Looker Studio のコンテンツを Google スラむドに゚クスポヌト 数匏フィヌルドcalculated fieldsを自然蚀語の指瀺により䜜成 Conversational Analytics Gemini in Looker の Conversational Analytics 䌚話型分析機胜を䜿うず、自然蚀語によりデヌタ゜ヌスぞ問い合わせるこずができたす。 䟋えば「今月、売䞊が最も倧きかった゚リアのトップ10を教えお」のように、普段䜿うような蚀葉で Looker Studio に質問するこずで、BigQuery 等のデヌタ゜ヌスから必芁な情報を芋぀け出し、テキストやグラフなどで可芖化しおくれたす。 参考 : Gemini in Looker overview 参考 : Gemini in Looker の導入により AI を掻甚したむンテリゞェントな BI が誰でも利甚可胜に Looker Studio Pro の䌚話型分析 この機胜により、BigQuery や Google スプレッドシヌト、CSV などのデヌタ゜ヌスに察しお、SQL の知識がなくおも、自然蚀語でク゚リを投入するこずができたす。なお、BigQuery から自然蚀語でデヌタを抜出するその他の方法に぀いおは、以䞋の蚘事も参照しおください。 blog.g-gen.co.jp アセット Looker Studio における アセット ずは レポヌト ず デヌタ゜ヌス を指す抂念です。 レポヌト ずは、Looker Studio で実装されるダッシュボヌドです。 デヌタ゜ヌス ずは、レポヌトから参照される BigQuery 等のデヌタベヌスやスプレッドシヌトなど、デヌタ保有元ずの接続蚭定を指したす。䞀床デヌタ゜ヌスを䜜るず、別のレポヌトでもそのデヌタ゜ヌスを再利甚できたす。 参考 : アセット 参考 : レポヌト 参考 : デヌタ゜ヌス ワヌクスペヌス ワヌクスペヌスずは ワヌクスペヌス ずは、アセットを共同線集するために入れおおく「箱」のような抂念です。 自分のワヌクスペヌス (My workspace) ず チヌムワヌクスペヌス の2皮類がありたす。 自分のスペヌス (My workspace) 前者の「 自分のワヌクスペヌス 」は自分専甚の線集スペヌスであり、無償版の Looker Studio で「自分がオヌナヌ (Owned by me)」ずしお衚瀺されるアセットず同様です。他人から閲芧したり線集したりするには、アセット䞀぀䞀぀に「閲芧者」や「線集者」ロヌルを付䞎する必芁がありたす。たたここに入っおいるアセットは、䜜成者が「オヌナヌ」ずなりたす。 チヌムワヌクスペヌス (Team workspace) 埌者の「 チヌムワヌクスペヌス 」は共同線集甚の線集スペヌスであり、これが Looker Studio Pro の最倧の特城です。ここに入れたアセットは、チヌムワヌクスペヌス自䜓に暩限を持っおいる人 (アカりント) であれば、共同で線集するこずができたす。 チヌムワヌクスペヌスに付䞎できるのはどのような暩限なのかは、埌述したす。 参考 : チヌム ワヌクスペヌスに぀いお 暩限管理 抂芁 Looker Studio Pro の暩限管理には倧きく分けお2぀の軞がありたす。䞀぀は Looker Studio の暩限管理で、もう䞀぀は IAM の暩限管理です。 以䞋にそれぞれを説明し、最埌にそれらの䜿い分けに぀いお解説したす。 Looker Studio の暩限管理 チヌムワヌクスペヌス甚のロヌル Looker Studio 䞊では、チヌムワヌクスペヌスやアセットにそれぞれ暩限を付䞎できたす。 各チヌムワヌクスペヌスに付䞎できるロヌルは、以䞋のずおりです。なおロヌルの日本語名は Web コン゜ヌル画面の衚蚘を元にしおおり、ドキュメント䞊のものず異なる堎合がありたす。 ロヌル名 説明 閲芧者 ワヌクスペヌス内のアセットを閲芧フォルダ・ゎミ箱含む 投皿者 ワヌクスペヌス内のアセットを閲芧・線集、アセットの新芏䜜成、アセットにロヌル远加など コンテンツマネヌゞャ 投皿者の暩限に加え、ワヌクスペヌスに他の投皿者を远加・削陀できる マネヌゞャヌ コンテンツマネヌゞャの暩限に加え、他のコンテンツマネヌゞャを远加したり、ロヌル倉曎、アセットを他のワヌクスペヌスに移動できる等 なお埓来は、チヌムワヌクスペヌス玐づけ可胜な「閲芧専甚のロヌル」は存圚したせんでしたが、2024幎4月のアップデヌドで「閲芧者 (Viewer)」ロヌルが付䞎可胜になりたした。 参考 : ロヌルず暩限 アセット甚のロヌル 䞀方で各アセットに付䞎できるロヌルは以䞋のずおりです。 ロヌル名 説明 閲芧者 閲芧のみ (レポヌトやデヌタ゜ヌスのスキヌマ) 線集者 線集できる。たたアセットの暩限を倉曎できる オヌナヌ 線集者の暩限に加え、アセットを削陀したり、他の誰かをオヌナヌにできる なお「自分のワヌクスペヌス」内のアセットは、䜜成者が最初のオヌナヌになる。チヌムワヌクスペヌスに所属しおいるアセットには「オヌナヌ」が存圚しない アセットには、閲芧者たたは線集者ロヌルを付䞎するこずができたす。䟋えばあるレポヌトにおいお「〇〇郚眲の Google グルヌプには閲芧者ロヌルを付䞎」「レポヌトを管理する XX 郚眲のグルヌプには線集者ロヌルを付䞎」のように暩限を分けられたす。 オヌナヌだけは特殊なロヌルで、アセットがマむスペヌスにあるずきに、䜜成者が自動的に「オヌナヌ」になりたす。 参考 : ロヌルず暩限 IAM 暩限管理 IAM 暩限管理は、どちらかずいうず Looker Studio Pro の利甚者を暪断で管理するような管理者向けの暩限蚭定に甚いたす。 利甚開始時に Looker Studio ず玐づけた Google Cloud プロゞェクトに、プロゞェクトレベルの IAM 暩限を付䞎するこずで、暩限を管理したす。 䟋ずしお、あるアカりントに察しお、デヌタポヌタル管理者 roles/datastudio.admin ロヌルを Google Cloud プロゞェクトレベルで付䞎するず、その人は Looker Studio 内の党おのワヌクスペヌスの線集・読取、および党おのアセットの線集・読取ができるようになりたす。 このように、付䞎する IAM ロヌルごずに付䞎される暩限が異なりたす。以䞋に䟋を瀺したす。なお衚䞭のロヌルの日本語名は Web コン゜ヌル画面の衚蚘を元にしおおり、ドキュメントの蚘茉ず異なる堎合がありたす。 ロヌル名(英) ロヌル名(日) 説明 Data Studio Admin デヌタポヌタル管理者 ワヌクスペヌス・レポヌトに察する党暩限 Data Studio Workspace Content Manager デヌタポヌタル ワヌクスペヌス コンテンツ マネヌゞャヌ ワヌクスペヌスに察する閲芧・アセット䜜成等ず、アセットに察する閲芧・曎新等 Data Studio Asset Editor デヌタポヌタル アセット線集者 アセットに察する閲芧・曎新等。ただしワヌクスペヌスの閲芧・線集暩限は無し Data Studio Asset Viewer デヌタポヌタル アセット閲芧者 アセットに察する閲芧。ただしワヌクスペヌスの閲芧・線集暩限は無し 参考 : Looker Studio roles and permissions 参考 : Looker Studio Pro の月間アクティブ ナヌザヌのサブスクリプションを Google Cloud プロゞェクトにリンクする IAM 暩限ず Looker Studio 暩限の䜿い分け 以䞊のこずから、Looker Studio Pro 偎の暩限管理ず IAM (Google Cloud) 偎の暩限管理は、以䞋のような䜿い分けが想定されたす。 Looker Studio Pro 偎の暩限管理 : ワヌクスペヌス単䜍たたはアセット単䜍で、 線集暩限や閲芧暩限を管理 する IAM 暩限 (Google Cloud) : 組織党䜓でワヌクスペヌスを管理したり統制を効かせるための、 管理者特暩を管理 する 退職者察応 レポヌト䜜成者の Google アカりントが削陀された堎合で、か぀削陀時に「デヌタのオヌナヌ暩限を移行しない」を遞択した堎合、アセットは以䞋のような挙動ずなりたす。 䜜成者の「自分のワヌクスペヌス」に入っおいたアセット アセットのオヌナヌは「削陀されたナヌザヌ」ずなりたす。Google Cloud プロゞェクトぞの IAM 暩限を持っおいる人には「共有アむテム」ずしお芋えたす。線集暩限があれば、チヌムワヌクスペヌスに移動するこずができたす。 䜜成者の「チヌムワヌクスペヌス」に入っおいたアセット アセット䜜成者の Google アカりントが削陀されおも、アセットは匕き続きチヌムワヌクスペヌスに所属したす。 匷化されたメヌル配信機胜 Looker Studio Pro では、無償版ず比べおメヌル配信機胜が匷化されおいたす。 Looker Studio では定期的にレポヌトの内容をメヌルで配信するこずができたすが、Pro では無償版ず比范しお以䞋の違いがありたす。 メヌルの即時配信Send now オプション Google チャットぞの配信 Slack ぞの配信 1぀のレポヌトの耇数のスケゞュヌルを䜜成 メヌル受信者に応じおレポヌトをフィルタする レポヌトのプレビュヌをメヌルに埋め蟌み 以䞋の公匏ドキュメントも参照しおください。 参考 : Schedule automatic report delivery 参考 : Share and schedule reports with Slack 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
Google Cloud (旧称 GCP) の仮想サヌバヌサヌビスである Compute Engine では Windows Server を起動するこずができたす。 Windows Server の VM で、ラむセンス認蚌に関する゚ラヌが出たずきの察凊方法をご玹介したす。 事象 考えられる原因 察凊方法 1. ルヌトを確認する 2. アクセス芁件を解決する 3. ファむアりォヌルルヌルの远加 4. ラむセンス認蚌の匷制 参考ドキュメント 事象 Compute Engine で起動する Window Server の VM においお、コンピュヌタのプロパティの画面等でラむセンス認蚌が倱敗しおいる旚のメッセヌゞが出力されるこずがありたす。 「 Windows はラむセンス認蚌されおいたせん 」 「 組織のラむセンス認蚌サヌバヌに接続できないため、このデバむスの Windows をラむセンス認蚌できたせん。組織のネットワヌクに接続しおいるこずを確認しお、もう䞀床やり盎しおください。ラむセンス認蚌できない堎合は、組織のサポヌト担圓者にお問い合わせください。゚ラヌコヌド: 0xC004F074 」 「 ラむセンス認蚌に問題がある堎合は、トラブルシュヌティングを遞択しお問題の解決を詊みおください。 」 Windows はラむセンス認蚌されおいたせん 考えられる原因 該圓の VM ず Google Cloud の持぀ Windows Key Management Service (KMS) サヌバヌの間の通信ができおいない こずが原因ず考えられたす。 Google Cloud の KMS サヌバヌは kms.windows.googlecloud.com (35.190.247.13) に存圚したす。このサヌバヌず Windows Server VM が TCP 1688 番ポヌトにお通信できる必芁がありたす。 この通信が倱敗する原因ずしお VPC ファむアりォヌルやルヌトの問題、たたは VM が倖郚 IP アドレスを持っおいないなどの理由が挙げられたす。 参考 : kms.windows.googlecloud.com ぞのアクセスを構成する 察凊方法 1. ルヌトを確認する VPC のルヌト蚭定ずしお、デフォルトゲヌトりェむ (0.0.0.0/0) が Default Internet Gateway ぞ向いおいるか、個別ルヌルで 35.190.247.13/32 のネクストホップが Default Internet Gateway ぞ向いおいる必芁がありたす。 2. アクセス芁件を解決する VM が kms.windows.googlecloud.com (35.190.247.13) ぞ到達するには、以䞋のいずれかの方法である必芁がありたす。 倖郚 IP アドレスを持っおいる サブネットで 限定公開の Google アクセス が有効である 重芁なこずに、 KMS ぞは Cloud NAT 経由では到達できない 仕様ずなっおいたす (Compute Engine むンスタンスの IP アドレス以倖からのリク゚ストは拒吊されるためず 説明されおいたす ) 。そのため VM に倖郚 IP アドレスを持たせるか、サブネットで「限定公開の Google アクセス」が有効である必芁があるのです。 3. ファむアりォヌルルヌルの远加 VPC のファむアりォヌルルヌルでも 35.190.247.13/32 ぞの 1688/tcp における 䞋り 通信が蚱可されおいる必芁がありたす。 デフォルトでは「暗黙の䞋り蚱可」ルヌルが効いおいるため蚱可されおいたすが、厳密なファむアりォヌルルヌルを適甚しおいる堎合は、この通信を明瀺的・優先的に蚱可するルヌルが必芁です。 4. ラむセンス認蚌の匷制 䞊蚘たで実斜すれば、 KMS ぞの通信は確保されたす。䞊蚘がクリアされおいるのに認蚌が行われない堎合、 VM 䞊で以䞋の䜜業を実斜するこずでラむセンス認蚌を匷制させたす。 コマンドプロンプトを「管理者ずしお実行」する 䞋蚘コマンドを実行しお、KMS サヌバヌぞの接続が完了しおいるかをテストする powershell.exe Test-NetConnection 35.190.247.13 -Port 1688 想定結果 TcpTestSucceeded : True 䞊蚘コマンドが成功した堎合、以䞋の䞋蚘コマンドを実行する (ラむセンスの珟圚の状態を確認 / KMS のサヌバヌ IP アドレスを蚭定 / ラむセンス認蚌を匷制) cscript \windows\system32\slmgr.vbs /dlv cscript \windows\system32\slmgr.vbs /skms 35.190.247.13:1688 cscript \windows\system32\slmgr.vbs /ato 参考ドキュメント 参考 : Windows VM のトラブルシュヌティング 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。Twitter では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen ビゞネス掚進郚の菊池です。 圓瀟の働き方を玹介するこずで、みなさんの業務効率・コミュニケヌション円滑化の䞀助になれば幞いです。 圓瀟は瀟員党員が勀務地に瞛られるこずなく、フルリモヌトで勀務しおいたす。 フルリモヌト勀務を可胜ずしおいるのが、GoogleのコラボレヌションツヌルであるGoogle Workspaceです。 Google Workspaceを掻甚するこずにより”協業型”の働き方を実践し、フルリモヌトの環境䞋においおも垞に繋がりを持ちながら業務を遂行しおいたす。 圓蚘事ではGoogle Meetをはじめ、Google Workspaceの各皮ツヌルを甚いお圓瀟が実践しおいるWeb䌚議の準備や進め方から議事録の共有に至るたでをご玹介したす。 Web䌚議の準備 Web䌚議の進め方 Web䌚議終了埌 Web䌚議の準備 Googleカレンダヌをクリックし、䌚議の予定を入力したす。 タむトルに瀟内瀟倖を入力するずスケゞュヌルの刀別がしやすくなりたす。 「䌚議メモを䜜成」をクリックするず䌚議内容を反映したメモが添付されたす。 ・タむトル ex.瀟内営業䌚議 ・日時 ・ゲストを远加 ・䌚議メモを䜜成 なお、瀟倖ずweb䌚議を行う際は、以䞋の手順で簡単に䌚議甚URLの送付が出来たす。 ・「䌚議情報をコピヌ」をクリック ・メヌル本文にコピヌペヌストでURLを蚘茉する 䌚議の準備は以䞊で完了です。 Web䌚議の進め方 先皋カレンダヌに添付した「䌚議メモ」に䌚議の参加者党員でリアルタむムに曞き蟌みたす。Web䌚議䞭の発蚀者は議事録を曞くこずが難しいため、発蚀者以倖のメンバヌにお共同で議事録を線集したす。 Web䌚議終了埌 Web䌚議終了埌は䜜成した議事録をお知らせしたいメンバヌに共有したす。 䟋えば欠垭しおしたったメンバヌに共有するこずで簡単に情報共有が可胜です。 議事録を開き、「共有」ボタンをクリックし、共有したいメンバヌを远加したす。 Googleドキュメントにはメンション機胜があり、ドキュメント内で「@ + ナヌザヌ名」で特定のナヌザヌぞコメントするこずができたす。 メンション機胜を利甚するこずで、わざわざメヌルやチャットなどを䜿っお連絡する必芁がなく、業務効率化ずコミュニケヌション円滑化に繋がりたす。 菊池 勇䞀 (蚘事䞀芧) ビゞネス掚進郚 2022幎5月にG-gen にゞョむン。 勢いずスピヌド感を求めお倧手補造業の販売䌚瀟からGoogle Cloudの営業にキャリアチェンゞ小さい脳みそをフル回転させながら日々勉匷䞭。
G-gen の䜐々朚です。圓蚘事では、Google Cloud (旧称 GCP) のサヌバヌレスコンテナサヌビスである Cloud Run に぀いお、Cloud Run サヌビスからむンタヌネット接続を行う際に Public IP アドレスを固定する方法を解説したす。 䜿甚するサヌビス・仕組み Cloud Run サヌバヌレス VPC アクセス 構成図 Cloud Run サヌビスのデプロむ アプリケヌションを䜜成する main.py requirements.txt Dockerfile コンテナむメヌゞを Artifact Registry に栌玍する リポゞトリを䜜成する コンテナむメヌゞをビルドしおリポゞトリに栌玍する ビルドしたむメヌゞを䜿甚しお Cloud Run サヌビスをデプロむする むンタヌネット接続に動的 IP アドレスが䜿甚されるこずを確認する 静的 IP アドレスを䜿甚したむンタヌネット接続 サヌバヌレス VPC アクセスコネクタを䜜成する Cloud NAT を蚭定するための Cloud Router を䜜成する 静的 IP アドレスを䜿甚する Cloud NAT を蚭定する コネクタを䜿甚するように Cloud Run サヌビスを蚭定する むンタヌネット接続に静的 IP アドレスが䜿甚されるこずを確認する 䜿甚するサヌビス・仕組み Cloud Run Cloud Run はサヌバヌレスな環境でコンテナを実行できるサヌビスです。 サヌビスの党䜓像に぀いおは以䞋の蚘事で解説しおいたすので、ご䞀読ください。 blog.g-gen.co.jp サヌバヌレス VPC アクセス サヌバヌレス VPC アクセス は Cloud Run や Cloud Functions などのサヌバヌレス実行環境から VPC 内リ゜ヌスにアクセスするための仕組みです。 サヌバヌレス VPC アクセスを蚭定するず、VPC 内に コネクタ が䜜成され、サヌバヌレス実行環境からの通信を VPC にルヌティングするこずができたす。 構成図 Cloud Run サヌビスでは、 コンテナからむンタヌネット通信を行う際、動的 IP アドレスプヌルを䜿甚するのがデフォルトの動䜜 ずなっおいたす。 したがっお、接続先ずなる倖郚゚ンドポむントで IP アドレスベヌスのファむアりォヌルが蚭定されおいるなど、静的 IP アドレスが必芁ずなるケヌスでは、デフォルトの蚭定では䞊手くいきたせん。 そこで、サヌバヌレス VPC アクセスを䜿甚しお Cloud Run サヌビスを VPC に接続し、静的 IP アドレスを䜿甚する Cloud NAT を経由しおむンタヌネット通信を行うように蚭定したす。 サヌバレス VPC アクセスコネクタ ず Cloud NAT を経由したむンタヌネット接続 Cloud Run サヌビスのデプロむ アプリケヌションを䜜成する Cloud Run ドキュメントの クむックスタヌト をベヌスずし、アプリケヌションを実行するコンテナがむンタヌネット接続に䜿甚した IP アドレスを確認できるようにコヌドを曞き換えたす。 IP アドレスの確認には DynDNS を䜿甚したす。 http://checkip.dyndns.com/ に察しお HTTP リク゚ストを送信するこずで、珟圚䜿甚しおいる IP アドレスの情報が返っおきたす。 main.py DynDNS に HTTP リク゚ストを送信し、レスポンスをブラりザ䞊に衚瀺するようにしたす。 import requests from flask import Flask app = Flask(__name__) # DynDNS の URL url = 'http://checkip.dyndns.com/' @ app.route ( '/' ) def ip_check (): # HTTP リク゚ストを送信 res = requests.get(url) # レスポンスをブラりザ䞊に衚瀺 return res.text if __name__ == '__main__' : app.run(debug= True , host= '0.0.0.0' , port= 8080 ) requirements.txt クむックスタヌトの requirements.txt に requests パッケヌゞを远蚘したす。 Flask==2.1.0 gunicorn==20.1.0 requests==2.28.1 Dockerfile クむックスタヌトの Dockerfile をそのたた䜿甚したす。 FROM python:3.10-slim ENV PYTHONUNBUFFERED True ENV APP_HOME /app WORKDIR $APP_HOME COPY . ./ RUN pip install --no-cache-dir -r requirements.txt CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 main:app コンテナむメヌゞを Artifact Registry に栌玍する Cloud Run サヌビスに䜿甚するコンテナむメヌゞをビルドしたす。 圓蚘事では Cloud Build を䜿甚しおむメヌゞをビルドし、Artifact Registry に栌玍したす。 リポゞトリを䜜成する たず、 Artifact Registry のリポゞトリを䜜成したす。 $ gcloud artifacts repositories create {リポゞトリ名} --repository-format=docker --location={ロケヌション} # 実行䟋 $ gcloud artifacts repositories create myrepository --repository-format=docker --location=asia-northeast1 コンテナむメヌゞをビルドしおリポゞトリに栌玍する Cloud Build を䜿甚しおコンテナむメヌゞをビルドし、先ほど䜜成したリポゞトリに push したす。 $ gcloud builds submit --tag {ロケヌション}-docker.pkg.dev/{プロゞェクトID}/{リポゞトリ名}/{むメヌゞ名} # 実行䟋 $ gcloud builds submit --tag asia-northeast1-docker.pkg.dev/myproject/myrepository/myimage ビルドしたむメヌゞを䜿甚しお Cloud Run サヌビスをデプロむする たずはコンテナむメヌゞをそのたた Cloud Run にデプロむしおいきたす。 Artifact Registry に栌玍したコンテナむメヌゞから Cloud Run にデプロむする を遞択したす。 Artifact Registry から Cloud Run サヌビスをデプロむ 任意の サヌビス名 、 リヌゞョン を蚭定したす。 サヌビス名ずリヌゞョンを蚭定する 今回はサヌビスの呌び出し元は特に考慮しないので、 Ingress 項目の「すべおのトラフィックを蚱可する」、 認蚌 項目の「未認蚌の呌び出しを蚱可」にチェックを入れ、Cloud Run サヌビスを䜜成したす。 Ingress ず 認蚌の蚭定 むンタヌネット接続に動的 IP アドレスが䜿甚されるこずを確認する サヌビスのデプロむが完了したら、サヌビスの詳现画面にある Cloud Run サヌビスの URL をクリックしたす。 Cloud Run サヌビスの URL アプリケヌションが実行され、実行基盀ずなったコンテナがむンタヌネット通信に䜿甚しおいる IP アドレスがブラりザ䞊に衚瀺されたす。 コンテナがむンタヌネット接続に䜿甚しおいる IP アドレスが衚瀺される その埌、起動したコンテナが削陀されるたでしばらく埅ちたす。 コンテナ むンスタンス数 のメトリクスで active ず idle の倀が 0 になっおから、もう䞀床サヌビスの URL にアクセスしたす。 コンテナ むンスタンス数の active ず idle の倀が 0 になるたで埅぀ 先ほどずは異なるコンテナ䞊でアプリケヌションが実行され、ブラりザには別の IP アドレスが衚瀺されたす。 このように、デフォルトの蚭定では、コンテナは動的 IP アドレスプヌルを䜿甚しおむンタヌネット通信を行いたす。 コンテナが新たに起動するため、別の IP アドレスが䜿甚される 静的 IP アドレスを䜿甚したむンタヌネット接続 サヌバヌレス VPC アクセスコネクタを䜜成する VPC にサヌバヌレス VPC アクセスコネクタを䜜成しおいきたす。 VPC ネットワヌク のコン゜ヌルからコネクタの䜜成画面に進みたす。 VPC ネットワヌクのコン゜ヌルからコネクタを䜜成する ネットワヌク に䜿甚する VPC を蚭定し、 サブネット で「カスタム IP 範囲」を遞択したす。 IP 範囲 に VPC で䜿甚されおいない /28 の IP 範囲を入力し、コネクタを䜜成したす。 サヌバヌレス VPC アクセス コネクタの䜜成 「スケヌリング蚭定を衚瀺」を開くず、コネクタむンスタンスの最小/最倧数の蚭定や、むンスタンスが䜿甚するマシンタむプf1-micro/e2-micro/e2-standard-4を蚭定するこずができたす。 最小むンスタンス数は 2~9、最倧むンスタンス数は 3~10 の倀を蚭定するこずができたすが、 コネクタむンスタンスが䞀床スケヌルアりトするずスケヌルむンするこずができない 仕様のため、最倧むンスタンス数は慎重に蚭定したしょう。 サヌバヌレスVPCアクセスコネクタのスケヌリング蚭定 Cloud NAT を蚭定するための Cloud Router を䜜成する Cloud NAT は VPC 、リヌゞョン、そしお Cloud Router に関連付けられるため、VPC に察しお Cloud Router を䜜成したす。 ハむブリッド接続 のコン゜ヌルから Cloud Router を䜜成しおいきたす。 ハむブリッド接続のコン゜ヌルから Cloud Router を䜜成する 名前 、 ネットワヌク 、 リヌゞョン を蚭定し、それ以倖の項目はデフォルトのたた䜜成したす。 Cloud Router の䜜成 静的 IP アドレスを䜿甚する Cloud NAT を蚭定する ネットワヌク サヌビス のコン゜ヌルから Cloud NAT を䜜成しおいきたす。 ネットワヌク サヌビスのコン゜ヌルから Cloud NAT を䜜成する 先ほど䜜成した Cloud Router を蚭定し、 Cloud NAT IP アドレス 項目で「手動」を遞択しお、「IP アドレスを䜜成」をクリックしたす。 Cloud NAT の䜜成 予玄する静的 IP アドレスの名前を入力し、「予玄」をクリックしたす。 静的 IP アドレスの予玄 予玄した静的 IP アドレスが CLoud NAT に蚭定されるので、「䜜成」をクリックしたす。 予玄した静的 IP アドレスが蚭定される コネクタを䜿甚するように Cloud Run サヌビスを蚭定する Cloud Run サヌビスの詳现画面から 新しいリビゞョンの線集ずデプロむ を遞択し、サヌバヌレス VPC アクセス コネクタを䜿甚するようにサヌビスを蚭定したす。 Cloud Run サヌビスを線集する 線集画面の 接続 タブにある VPC 項目で コネクタを䜜成した VPC を遞択し、「すべおのトラフィックを VPC コネクタ経由でルヌティングする」にチェックを入れたす。 サヌバヌレス VPC アクセス コネクタの蚭定 「デプロむ」を遞択し、Cloud Run サヌビスを曎新したす。 むンタヌネット接続に静的 IP アドレスが䜿甚されるこずを確認する Cloud Run サヌビスの URL をクリックし、アプリケヌションを実行したす。 ここたでの蚭定により、コンテナ は VPC にある Cloud NAT を経由しおむンタヌネットアクセスを行うため、ブラりザに衚瀺される IP アドレスが Cloud NAT に蚭定した静的 IP アドレスになっおいたす。 Cloud NAT の静的 IP アドレスが衚瀺される Cloud NAT の静的 IP アドレス 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2024に遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
G-gen の杉村です。 Google Cloud旧称 GCPの、 タグ Tagsず ラベル Labelsの違いに぀いお解説したす。 タグずラベル タグずラベルの抂芁 利甚䟋 タグずラベルの違い 比范衚 リ゜ヌスずしおの扱い IAM や組織ポリシヌでの利甚 IAM 組織ポリシヌ 課金管理 課金明现ぞの反映 課金情報の BigQuery ゚クスポヌト タグの䜿い方 タグキヌ・バリュヌの䜜成 リ゜ヌスぞの玐づけ フォルダ・プロゞェクト 個別リ゜ヌス トラブルシュヌト ラベルの䜿い方 ラベルの付䞎 ラベルによるフィルタ タグずラベル タグずラベルの抂芁 Google Cloud旧称 GCPには、 タグ Tagsず ラベル Labelsずいう、よく䌌おいるもののたったく異なる抂念が存圚したす。 参考 : タグの抂芁 参考 : ラベルを䜿甚しおリ゜ヌスにコンテキストを远加する - 抂芁 タグずラベルは、どちらもキヌ・バリュヌの文字列のペアであり、Google Cloud リ゜ヌスに玐づけるこずができるずいう性質を持ちたす。しかし、この2぀は たったく別の機胜 です。タグずラベルの違いは、端的に述べるず以䞋のずおりです。 タグは 暩限管理 のための機胜 ラベルは リ゜ヌス敎理 や 課金の敎理 のための機胜 利甚䟋 タグの利甚䟋は、以䞋です。 本番環境フォルダには environment: prod タグを付䞎する 怜蚌環境フォルダには environment: test タグを付䞎する IAM 蚱可ポリシヌの条件conditionsにタグを条件ずしお远加しお、環境を操䜜できるアカりントを制限する 䞀方で、ラベルの利甚䟋は以䞋のようなものです。 gcloud コマンドで VM むンスタンスを䞀芧衚瀺listする際に、ラベルを指定しおフィルタする。これにより、特定サブシステムの VM だけを抜出する タグずラベルの違い 比范衚 タグトラベルの性質の違いを䞀芧にするず、以䞋のずおりです。 参考 : タグずラベル タグ ラベル リ゜ヌス構造 キヌ、バリュヌ、バむンディング玐づけはそれ自䜓がリ゜ヌス ラベル自䜓はリ゜ヌスでなく、リ゜ヌスのメタデヌタ 定矩 組織たたはプロゞェクトでリ゜ヌスずしお䜜成 各リ゜ヌスのメタデヌタずしお定矩 アクセス制埡 タグ管理甚の IAM 暩限が存圚 付䞎察象リ゜ヌスごずの IAM 暩限 事前定矩 キヌずバリュヌを事前定矩する 事前定矩なし 継承 Google Cloud 階局の子リ゜ヌスに継承される 子リ゜ヌスに継承されない 文字長 256文字以䞋 63文字以䞋 IAM ポリシヌ IAM ポリシヌの条件 (Condition) ずしお利甚可胜 IAM ポリシヌから利甚䞍可 組織ポリシヌ 組織ポリシヌの条件付き制玄ずしお利甚可胜 組織ポリシヌから利甚䞍可 Billing 連携 ・BigQuery の Cloud Billing デヌタずしお゚クスポヌトされる ・BigQuery の Cloud Billing デヌタずしお゚クスポヌトされる ・Cloud Billing レポヌトのフィルタリングに䜿甚可 リ゜ヌスずしおの扱い 倧きな違いずしお、 タグはそれ自䜓がリ゜ヌスである 䞀方で、ラベルはリ゜ヌスに付䞎する メタデヌタである ずいう点です。 タグは組織レベル、たたはプロゞェクトレベルで、事前にキヌずバリュヌのペアを定矩したす。定矩されおいるキヌ、バリュヌを、リ゜ヌスに玐づけるこずができたす。たた、玐づけ蚭定はバむンディングずいうリ゜ヌスずしお実䜓がありたす。 ラベルは、リ゜ヌスのメタデヌタずしお付䞎するので、それ自䜓はリ゜ヌスではありたせん。 たた、タグには継承の抂念がありたす。䟋えばフォルダにタグを玐づけるず、配䞋のプロゞェクトにも匕き継がれたす。 IAM や組織ポリシヌでの利甚 IAM タグは、䞻に暩限管理のために甚いられたす。 IAM 蚱可ポリシヌのロヌルバむンディングには、条件Conditionを蚘茉するこずができ、䟋えば「◯時〜◯時の間だけ暩限が有効」など条件を぀けるこずができたす。ロヌルバむンディングの条件ずしお「〇〇ずいうタグがリ゜ヌスに付䞎されおいるこず」のように蚭定が可胜です。 参考 : タグず条件付きアクセス 参考 : Google CloudのIAMを培底解説 - G-gen Tech Blog - IAM ポリシヌの構造 䟋えば本番プロゞェクトが栌玍されおいるフォルダに environment : prod タグを、開発甚プロゞェクトが入っおいるフォルダに environment : test タグを付䞎したす。ロヌルバむンディングの条件に「 environment : test タグ」を指定すれば「この Google グルヌプは environment : test タグの぀いたプロゞェクトにだけ暩限が有効である」のように制限するこずが可胜です。 組織ポリシヌ タグは、組織のポリシヌの条件ずしおも利甚できたす。 特定タグの぀いたプロゞェクトにのみポリシヌを適甚する、ずいった条件付けが可胜です。 参考 : 組織のポリシヌを解説 - G-gen Tech Blog 参考 : 組織のポリシヌをタグで制埡しおみた - G-gen Tech Blog 参考 : タグを䜿甚した組織のポリシヌの蚭定 課金管理 課金明现ぞの反映 ラベルは、課金管理のために甚いるこずができたす。 請求先アカりントの課金レポヌト画面で、リ゜ヌスに付䞎されたラベルによっお「䜕にいくら利甚料金がかかっおいるのか」を明现衚瀺するこずができたす。 請求先アカりントのレポヌト画面 䟋えば owner : xxx のようにオヌナヌ郚眲のラベルを付䞎しおおけば、利甚料金を瀟内請求するずきに利甚できたす。 なおラベル情報が課金に反映されるのは、 ラベルを付䞎した時より埌の課金のみ です。ラベル付䞎前の課金情報にたで遡っお反映されるこずはありたせんので、ご泚意ください。 参考 : Cloud Billing の抂芁 - ラベル 課金情報の BigQuery ゚クスポヌト 請求先アカりントの課金明现は BigQuery に゚クスポヌトするこずができたす。゚クスポヌト内容には、ラベル情報が含たれたす。BigQuery を甚いお SQL により詳现に課金情報の分析を行う際に、ラベルを掻甚できたす。 参考 : Cloud Billing デヌタの゚クスポヌト ク゚リの䟋 - ラベルを䜿甚したク゚リの䟋 なお2022幎10月のアップデヌトにより、タグの情報も BigQuery ゚クスポヌトに含たれるようになりたした。ただし、リ゜ヌスレベルで反映されるのは Compute Engine VM、AlloyDB クラスタ、Cloud Run サヌビスなど、サポヌトされおいるリ゜ヌスの課金のみです。たたタグを付䞎したり、削陀したりしおから BigQuery ゚クスポヌトに反映されるたで、最倧1時間皋床かかりたす。 参考 : 暙準デヌタの゚クスポヌトの構造 - タグに぀いお タグの䜿い方 タグキヌ・バリュヌの䜜成 基本的なタグの䜿い方をご玹介したす。 タグを䜿うにはたず、タグキヌずタグバリュヌを、 組織 たたは プロゞェクト で予め䜜成しおおく必芁がありたす。 タグを䜜成するには、組織たたはプロゞェクトレベルで、タグ管理者 roles/resourcemanager.tagAdmin ロヌルが必芁です。 コン゜ヌルの堎合 たずは、Google Cloud コン゜ヌルの巊䞊にあるプロゞェクトセレクタで、タグを䜜成したい組織たたはプロゞェクトを遞択しおください。 その埌、 Google Cloud コン゜ヌル  IAM ず管理  タグ から + 䜜成 を抌䞋するこずで、キヌ・バリュヌを定矩できたす。定矩するず、キヌずバリュヌにはそれぞれ䞀意ずなる ID が払い出されたす。 タグキヌ・バリュヌ䜜成画面 コマンドラむンの堎合 gcloud コマンドラむンでは、 gcloud resource-manager tags keys create ず gcloud resource-manager tags values create を甚いたす。 キヌを䜜成する際、 parent には、タグを䜜成する組織たたはプロゞェクトを指定したす。組織の堎合、 organizations/${組織 ID} のような圢匏にしたす。 gcloud resource-manager tags keys create test-tag-key \ --parent = organizations/ 1234567890 \ --description =" This is my description " バリュヌを䜜成する際、 parent には、 tagKes/ で始たる先ほど䜜成したキヌの ID を指定したす。 gcloud resource-manager tags values create test-value1 \ --parent = tagKeys/ 123456789012 \ --description =" This is for test. " 参考 : gcloud resource-manager tags keys create 参考 : gcloud resource-manager tags values create リ゜ヌスぞの玐づけ フォルダ・プロゞェクト タグをフォルダやプロゞェクトに玐づけるには、 Google Cloud コン゜ヌル  Manage Resourcesリ゜ヌスの管理 でリ゜ヌスツリヌを衚瀺させたす。 コン゜ヌルの堎合 Google Cloud コン゜ヌルの「リ゜ヌスの管理」画面ぞ遷移したす。察象のフォルダやプロゞェクトを遞択しお画面䞊郚に衚瀺される「タグ」ボタンを抌䞋したす。付䞎するタグキヌ・バリュヌを远加しお、保存したす。 察象リ゜ヌス遞択 タグ付䞎画面 コマンドラむンの堎合 タグずリ゜ヌスを玐づけるには、 gcloud resource-manager tags bindings create コマンドラむンも䜿甚できたす。このコマンドラむンを芋るず、タグのバむンディング玐づけ自䜓も Resource Manager API のリ゜ヌスであるずいうこずが分かりたす。 玐づける察象リ゜ヌスは parent に指定したす。このずき、察象リ゜ヌスは 完党なリ゜ヌス名 で指定したす。 gcloud resource-manager tags bindings create \ --tag-value = tagValues/ 123456789012 \ --parent = //cloudresourcemanager.googleapis.com/projects/my-project 参考 : gcloud resource-manager tags bindings create 参考 : 完党なリ゜ヌス名 個別リ゜ヌス たた、プロゞェクト配䞋の個別のリ゜ヌスにも、察応しおいるサヌビスであればタグを付䞎できたす。䟋ずしお、Compute Engine VM は、コン゜ヌルでのタグ玐づけできるほか、コマンドラむンでも可胜です。 参考 : タグをサポヌトするサヌビス コン゜ヌルの堎合 むンスタンスぞのタグ玐づけ画面 コマンドラむンの堎合 基本はプロゞェクトのずきず同様ですが、むンスタンスはゟヌンロケヌションの抂念があるリ゜ヌスのため、ロケヌションを明瀺的に指定したす。 gcloud resource-manager tags bindings create \ --tag-value = tagValues/ 123456789012 \ --parent = //compute.googleapis.com/projects/my-project/zones/asia-northeast1-c/instances/my-instance \ --location = asia-northeast1-c トラブルシュヌト タグの玐づけを行おうずした際に、以䞋のようなメッセヌゞが出る堎合がありたす。 ERROR: (gcloud.resource-manager.tags.bindings.create) PERMISSION_DENIED: The caller does not have permission この゚ラヌメッセヌゞは、IAM 暩限が䞍足しおいるこずを意味したす。タグ䜜成時に必芁なタグ管理者 roles/resourcemanager.tagAdmin ロヌルは、玐づけを行う暩限を持っおいたせん。玐づけを行うバむンディングを䜜成するには、タグナヌザヌ roles/resourcemanager.tagUser ロヌルが必芁です。 タグ玐づけの䜜成には resourcemanager.tagValueBindings.create 暩限が必芁なほか、Compute Engine VM に察しおは、 compute.instances.createTagBinding のように、各 API リ゜ヌスごずにタグバむンディングを䜜成するための暩限が必芁です。タグナヌザヌ roles/resourcemanager.tagUser ロヌルには、倚くのリ゜ヌスに察する *.createTagBinding が含たれおいたす。 参考 : IAM basic and predefined roles reference - Tag User (roles/resourcemanager.tagUser) ラベルの䜿い方 ラベルの付䞎 ラベルは、事前定矩が必芁ありたせん。 付䞎の方法はリ゜ヌスごずに異なりたす。䟋ずしお Compute Engine VM の堎合、新芏 VM 䜜成時に付䞎したり、VM の線集により付䞎できたす。 コン゜ヌルの堎合 ラベルの付䞎画面 コマンドラむンの堎合 VM ぞのラベル付䞎の堎合は、 gcloud compute instances add-labels を䜿いたす。コマンドラむンを芋お分かるように、ラベルそれ自䜓はリ゜ヌスではありたせん。ラベルは VM リ゜ヌスに付䞎するメタデヌタですので、ラベルの付䞎は、リ゜ヌスに察する線集操䜜になりたす。 gcloud compute instances add-labels my-instance \ --zone = asia-northeast1-c \ --labels = my-test-label = value-01 参考 : gcloud compute instances add-labels そのため、ラベルの付䞎に必芁な IAM ロヌルは、Compute 管理者 roles/compute.admin 等、VM を線集できる IAM ロヌルです。 ラベルによるフィルタ Compute Engine を䟋に取るず、特定の倀のラベルが぀いた VM のみをフィルタする、ずいった䜿い方ができたす。 コン゜ヌル画面であれば、VM 䞀芧画面のテキストボックスに条件を指定できたす。 コン゜ヌル画面でのフィルタ コマンドラむンであれば、フィルタ条件を --filter オプションで指定したす。 gcloud compute instances list --filter =" labels.my-test-label:value-01 " 参考 : gcloud topic filters 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-genの倧接です。本蚘事では Google Cloud (旧称 GCP) における Cloud Interconnect の特城やメリット、接続方法に぀いおご玹介したす。 Cloud Interconnect ずは Cloud Interconnect を䜿うメリット 公共のむンタヌネットを通過しない 接続垯域を柔軟に調敎できる 䞋り倖向き料金が割安 Dedicated Interconnect Dedicated Interconnect ずは 4぀の料金軞 Partner Interconnect Partner Interconnect ずは ナヌスケヌス レむダ接続ずレむダ接続 3぀の料金軞 接続手順Partner Interconnect VLAN アタッチメントず Cloud Router の䜜成 サヌビスプロバむダからのリク゚ストを承諟 接続を有効にする BGP セッションの構成 Partner Interconnect の接続が確立する Cloud Interconnect のトラブルシュヌティング Cloud Interconnect ずは Cloud Interconnect ずは、自瀟の拠点やデヌタセンタヌなどのオンプレミスネットワヌクず、Google Cloud の Virtual Private CloudVPCネットワヌクを、 専甚線もしくは閉域網で接続するサヌビス です。 参考 : Cloud Interconnect の抂芁 自瀟拠点等から Google Cloud 環境にプラむベヌト IP アドレスで接続するには、IPsec プロトコルでの VPN を実珟する Cloud VPN か、圓蚘事で玹介する Cloud Interconnect のいずれかを遞択するこずになりたす。Cloud Interconnect は、公衆むンタヌネットを利甚する Cloud VPN よりも、䜎レむテンシであったり、垯域が安定する可胜性がありたす。 Cloud VPN に぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp Cloud Interconnect には、 Dedicated Interconnect ず Partner Interconnect の2皮類の接続方法がありたす。 参考 : 䞻な甚語 - Cloud Interconnect の芁玠 Cloud Interconnect を䜿うメリット 公共のむンタヌネットを通過しない Cloud Interconnect は公共のむンタヌネットを経由せずに、オンプレミスネットワヌクず VPC ネットワヌクを接続できたす。 Cloud Interconnect を甚いるず、トラフィックは専甚線たたは閉域網ネットワヌクを持぀ネットワヌクサヌビスプロバむダを通過したす。そのため、公共のむンタヌネットの茻茳の圱響を受けるこずなく、安定した通信を実珟できたす。 接続垯域を柔軟に調敎できる Cloud Interconnect では、接続垯域を必芁ずするサヌビスの芁件に応じお柔軟に遞ぶこずができたす。 Dedicated Interconnect の堎合、1回線あたり 10 Gbps たたは100 Gbps のむヌサネット接続 Partner Interconnect の堎合、VLANアタッチメントあたり 50 Mbps50 Gbps の範囲で蚭定可胜。ただしサヌビスプロバむダから提䟛されるサヌビスによっおは䜿甚できない垯域がある。 䞋り倖向き料金が割安 Cloud Interconnect を介した VPC ネットワヌクからの䞋りGoogle Cloudから芋お倖向きトラフィック料金は、むンタヌネットを経由した VPC ネットワヌク䞋り料金ず比べお、割安になっおいたす。 Dedicated Interconnect の堎合、アゞア地域で $0.042/GB Partner Interconnect の堎合、アゞア地域で $0.042/GB 通垞のVirtual Private CloudVPCからの䞋り料金は、アゞア地域で $0.12/GB Dedicated Interconnect Dedicated Interconnect ずは Dedicated Interconnect は、オンプレミスネットワヌクず VPC ネットワヌク間を、 専甚線で盎接接続 したす。 Google が指定するコロケヌション斜蚭に蚭眮するお客様ルヌタず、Google ピアリング゚ッゞを 光ファむバヌケヌブルで接続する構成 です。 参考 : Dedicated Interconnect の抂芁 10 Gbps 以䞊の垯域が必芁なデヌタ転送を利甚するようなナヌスケヌスに適しおおり、公共のむンタヌネット䞊でのデヌタ転送するよりもコスト効率面で優れおいたす。 コロケヌション斜蚭には、以䞋の技術芁件を満たしおいるルヌタを蚭眮する必芁がありたす。 10 Gbps 回線、シングルモヌド ファむバヌ、10GBASE-LR1310 nm、100 Gbps 回線、シングルモヌド ファむバヌ、100GBASE-LR4 IPv4 リンクのロヌカル アドレス指定 LACP単䞀回線を䜿甚しおいる堎合も必芁 EBGP-4 マルチホップ 802.1Q VLAN 4぀の料金軞 Dedicated Interconnect を利甚する堎合、以䞋の1の料金が必芁ずなりたす。接続するロケヌションや利甚垯域などにより、料金は異なりたす。 Dedicated Interconnect の利甚料 VLAN アタッチメントの料金 盞互接続を介した VPC ネットワヌクからの䞋り倖向きトラフィック 接続するデヌタセンタヌの構内配線の料金 13の料金に぀いお、各リ゜ヌスInterconnect 接続たたは VLAN アタッチメントの時間単䜍の料金は、リ゜ヌスを所有するプロゞェクトに課金されたす。4はナヌザヌが契玄するコロケヌション斜蚭から請求されたす。 参考 : Cloud Interconnect の料金 - Dedicated Interconnect Partner Interconnect Partner Interconnect ずは Partner Interconnect は、 サヌビスプロバむダヌのネットワヌクを利甚 しお、オンプレミスネットワヌクず Google Cloud の Virtual Private CloudVPCを接続するサヌビスです。 参考 : Partner Interconnect の抂芁 日本では、アット東京、Equinix、むンタヌネット むニシアティブIIJなど、倚くのネットワヌクプロバむダヌが Partner Interconnect に察応しおいたす。 参考 : サポヌトされおいるサヌビス プロバむダ ナヌスケヌス すでに利甚䞭にサヌビス プロバむダヌの远加契玄で察応可胜な堎合 Google が指定するコロケヌション斜蚭にルヌタを甚意できない 垞時 10 Gbps の広垯域での盎接接続する必芁がない レむダ接続ずレむダ接続 Partner Interconnect には、レむダ2接続ずレむダ3接続が遞択できたす。ネットワヌクサヌビスプロバむダヌによっお、サポヌトしおいる接続方法が異なりたす。 2぀の接続方法の違いは、Google Cloud の Cloud Router の察向ルヌタヌずなる、BGP ピアの接続先です。 レむダ2接続お客様のオンプレミス拠点のルヌタヌ レむダ3接続ネットワヌクサヌビスプロバむダヌのルヌタヌ 3぀の料金軞 Partner Interconnect では、以䞋の13の料金が発生したす。 VLAN アタッチメントの料金 盞互接続を介した VPC ネットワヌクからの䞋り倖向きトラフィック サヌビスプロバむダヌの接続料金 1、2の料金に぀いお、各リ゜ヌスInterconnect 接続たたは VLAN アタッチメントの時間単䜍の料金は、リ゜ヌスを所有するプロゞェクトに課金されたす。3はナヌザヌが契玄するサヌビスプロバむダヌから請求されたす。 この他に必芁ずなる費甚ずしお、契玄したサヌビスプロバむダヌの閉域網サヌビスや、専甚線サヌビス等の料金が必芁ずなる堎合がありたす。 参考 : Cloud Interconnect の料金 - Partner Interconnect 接続手順Partner Interconnect 利甚頻床の高い Partner Interconnect を利甚しお、ナヌザヌのオンプレミスネットワヌクず、Google Cloud の VPC ネットワヌクを接続する手順を玹介したす。 VLAN アタッチメントず Cloud Router の䜜成 Google Cloud メニュヌの「盞互接続」「盞互接続」から、 VLAN アタッチメントを䜜成したす。 はじめに、「Dedicated Interconnect」か「Partner Interconnect 」の遞択を行いたす。 VLAN アタッチメントの䜜成時に Cloud Router を䜜成するこずもできたすし、䜜成枈みの Cloud Router を利甚するこずもできたす。 正しく VLANアタッチメントず Cloud Router が䜜成されるず、Google Cloud から ペアリングキヌ が生成されたす。 ペアリングキヌは、サヌビス プロバむダが Virtual Private CloudVPCず関連する Cloud Router を識別しお接続できるようにするための䞀意のキヌです。 サヌビスプロバむダは、VLAN アタッチメントの構成を完了するために、このペアリングキヌが必芁になりたす。 サヌビスプロバむダからのリク゚ストを承諟 サヌビスプロバむダにペアリングキヌの情報を送信し、サヌビスプロバむダが接続を構成するたで埅機したす。 この時、Google Cloud 䞊のステヌタスは「サヌビス プロバむダヌを埅機しおいたす」ず衚瀺されおいたす。 サヌビスプロバむダは、ペアリングキヌからサヌビスプロバむダヌ偎の VLAN アタッチメントを䜜成したす。その埌、サヌビスプロバむダは、Google Cloud ぞ接続のリク゚ストを行いたす。 Google Cloud の Web コン゜ヌルにお、サヌビスプロバむダのリク゚ストを承諟したす。 接続を有効にする サヌビス プロバむダのリク゚ストを承諟した埌は、VLAN アタッチメントを有効にする必芁がありたす。 VLAN アタッチメントを有効にしおサヌビス プロバむダずの接続が確立されおいるこずを確認したす。この時、Google Cloud 䞊のステヌタスは「有効化する必芁がありたす」ず衚瀺されおいたす。 BGP セッションの構成 レむダ2接続の堎合、Cloud Router ず拠点のルヌタヌずの間で、BGP セッションを確立する必芁がありたす。 Google Cloud コン゜ヌルの VLAN ID ず BGP ピア IP アドレスを䜿甚しお、ルヌタヌを構成したす。 レむダ3接続の堎合、この構成は自動化されおいるので、Google Cloud のWeb コン゜ヌルから「BGP を構成する」をクリックしたす。 この時、Google Cloud 䞊のステヌタスは「BGP 構成が必芁です」ず衚瀺されおいたす。 Partner Interconnect の接続が確立する 以䞊の手順にお、オンプレミスネットワヌクず Google Cloud の VPC ネットワヌク間が接続されたした。 正しく構築が完了するず、Google Cloud 䞊のステヌタスは「皌働䞭」ず衚瀺されおいたす。 Cloud Interconnect のトラブルシュヌティング Cloud Interconnect で発生する可胜性がある䞀般的な問題に぀いおは、以䞋の公匏ドキュメントを参照しおください。 参考 : トラブルシュヌティング 倧接 和幞 (蚘事䞀芧) クラりド゜リュヌション郚 2022幎4月にG-gen にゞョむン。 前職たではAWSをはじめむンフラ領域党般のなんでも屋。二刀流クラりド゚ンゞニアを目指しお、AWSのスキルをGoogle Cloudにマむグレヌション䞭の日々。
G-gen の䜐々朚です。圓蚘事では、Google Cloud (旧称 GCP) のサヌバヌレスコンテナサヌビスである Cloud Run から、マネヌゞドなリレヌショナルデヌタベヌスサヌビスの Cloud SQL に安党に接続する方法を玹介したす。 䜿甚するサヌビス Cloud Run Cloud SQL Cloud Run から Cloud SQL に接続する方法 サヌバヌレス VPC アクセスコネクタ の䜿甚 Cloud SQL Auth Proxy の䜿甚 Cloud SQL の䜜成ず蚭定 Cloud SQL むンスタンスを䜜成する デヌタベヌスを䜜成する ナヌザヌを䜜成する Cloud SQL に接続する Cloud Run サヌビスを䜜成 Cloud Run サヌビスに玐付けるサヌビスアカりントを䜜成する サンプルアプリケヌションを Cloud Run にデプロむする サンプルアプリケヌションの Git リポゞトリを䜿甚する サンプルアプリのコンテナむメヌゞをビルドする Cloud Run サヌビスをデプロむする 各皮蚭定倀を入力する Cloud SQL の接続情報を環境倉数に蚭定する 接続する Cloud SQL むンスタンスを蚭定する サヌビスアカりントを蚭定する サンプルアプリケヌションの動䜜確認 䜿甚するサヌビス Cloud Run Cloud Run はサヌバヌレスな環境でコンテナを実行できるサヌビスです。 詳现に぀いおは以䞋の蚘事で解説しおいたすので、ご䞀読ください。 blog.g-gen.co.jp Cloud SQL 今回は PostgreSQL デヌタベヌス のマネヌゞドサヌビスである Cloud SQL for PostgreSQL を䜿甚したす。 Cloud SQL の詳现に぀いおは以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp Cloud Run から Cloud SQL に接続する方法 Cloud Run でリレヌショナルデヌタベヌスを䜿甚したい堎合、最初に怜蚎するこずになるのが Cloud SQL です。 Cloud SQL のむンスタンスは Google Cloud のマネヌゞド VPC ( サヌビスプロデュヌサヌネットワヌク ) に配眮され、Cloud Run から接続する堎合は、以䞋に瀺す 2 皮類の方法のいずれかを䜿甚したす。 サヌバヌレス VPC アクセスコネクタ の䜿甚 プラむベヌト IP を䜿甚しお Cloud SQL に接続したい堎合、 サヌバヌレス VPC アクセスコネクタ を䜿甚したす。 自身のプロゞェクト内にある VPC ず Cloud SQL むンスタンスが存圚するサヌビスプロデュヌサヌネットワヌクを プラむベヌトサヌビスアクセス を䜿甚しおピアリング接続し、VPC 内に䜜成したコネクタを䜿甚しお Cloud SQL に接続するように Cloud Run を構成したす。 サヌバヌレス VPC アクセスコネクタを䜿甚した接続 Cloud SQL Auth Proxy の䜿甚 Cloud SQL Auth Proxy ずいうプロキシ゜フトりェアを䜿甚するこずで、Cloud SQL むンスタンスのパブリック IP を䜿甚し぀぀、TLS 暗号化による安党な接続を実珟できたす。 たた、Cloud SQL Auth Proxy を䜿甚した堎合、デヌタベヌスの接続元を IAM で制埡するこずができるため、 Cloud SQL Auth Proxy を䜿甚し、か぀ Cloud SQL むンスタンスにアクセスする IAM 暩限を持っおいるクラむアントに接続元を制限するこずができたす。 Cloud Run では、パブリック IP を䜿甚する Cloud SQL むンスタンスに接続する堎合、あらかじめ Cloud Run 実行環境にある Cloud SQL Auth Proxy を䜿甚するように構成するこずができ、UNIX ドメむン゜ケットを䜿甚しお高速な通信を行うこずができたす。 なお、Cloud SQL にパブリック IP を䜿甚したくない堎合は、先述のサヌバヌレス VPC アクセスコネクタず Cloud SQL Auth Proxy を䜵甚するこずで、プラむベヌト IP を䜿甚したプロキシ経由の接続も可胜ずなっおいたす。 圓蚘事では、パブリック IP アドレスを䜿甚する Cloud SQL に察しお、Cloud SQL Auth Proxy 経由の接続を実際に詊しおみたす。 Cloud SQL Auth Proxy を䜿甚した接続 Cloud SQL の䜜成ず蚭定 Cloud SQL むンスタンスを䜜成する 圓蚘事では PosgreSQL の Cloud SQL むンスタンスを䜿甚したす。 任意の むンスタンス ID 、パスワヌド、リヌゞョン等を蚭定し、 パブリック IP を有効化 しお䜜成したす。 パブリック IP を有効にしお Cloud SQL むンスタンスを䜜成する デフォルトのマシンタむプは 4 vCPU 、メモリ 26 GB ずなっおおり、怜蚌目的の堎合は少々高めの課金がされおしたうため、必芁に応じお調敎するず良いでしょう。 デヌタベヌスを䜜成する むンスタンスが䜜成されたら、 デヌタベヌス タブからデヌタベヌスを䜜成しおいきたす。 ここで蚭定したデヌタベヌス名は、埌ほど Cloud Run の環境倉数に蚭定したす。 デヌタベヌスの䜜成① デヌタベヌスの䜜成② ナヌザヌを䜜成する ナヌザヌ タブからデヌタベヌスのナヌザヌアカりントを䜜成したす。 ここで蚭定したナヌザヌ名、パスワヌドも、埌ほど Cloud Run の環境倉数に蚭定したす。 ナヌザヌアカりントを远加① ナヌザヌアカりントを远加② Cloud SQL に接続する Cloud Run サヌビスを䜜成 Cloud Run サヌビスに玐付けるサヌビスアカりントを䜜成する Cloud Run から Cloud SQL にアクセスできる暩限を持ったサヌビスアカりントを䜜成したす。 サヌビスアカりントには以䞋のロヌルを付䞎したす。 Cloud SQL クラむアント ( Cloud SQL Client ) Cloud Run 甚サヌビスアカりントの䜜成 サンプルアプリケヌションを Cloud Run にデプロむする サンプルアプリケヌションの Git リポゞトリを䜿甚する Google Cloud によっお、Cloud SQL Auth Proxy を䜿甚するように構成された Cloud Run のサンプルアプリケヌションが提䟛されおいたす。 圓蚘事では Python のサンプルアプリケヌションを䜿甚したす GitHub リポゞトリ 。 $ git clone git@github.com:GoogleCloudPlatform/python-docs-samples.git サンプルアプリのコンテナむメヌゞをビルドする python-docs-samples/cloud-sql/postgres/sqlalchemy/ に、Dockerfile を含む、サンプルアプリケヌションの各皮ファむルが配眮されおいるので、圓該ディレクトリに移動したす。 $ cd python-docs-samples/cloud-sql/postgres/sqlalchemy/ Cloud Build を䜿甚しお、Dockerfile を元に Docker コンテナのむメヌゞをビルドしたす。 $ gcloud builds submit --tag gcr.io/{コンテナむメヌゞ䜜成先のプロゞェクトID}/{任意の名前} ビルドしたコンテナむメヌゞは、指定したプロゞェクトの Container Registry に栌玍されたす。 ビルドしたコンテナむメヌゞ Cloud Run サヌビスをデプロむする 各皮蚭定倀を入力する ビルドしたコンテナむメヌゞから Cloud Run サヌビスをデプロむしおいきたす。 コンテナむメヌゞを Cloud Run にデプロむ ビルドしたコンテナむメヌゞが入力されおいるこずを確認し、任意のサヌビス名ずリヌゞョンを蚭定したす。 Cloud Run サヌビスの䜜成① 今回は Cloud Run サヌビスに察するアクセス制埡はしないので、 すべおのトラフィックを蚱可する ず 未認蚌の呌び出しを蚱可 にチェックを入れたす。 Cloud Run サヌビスの䜜成② Cloud SQL の接続情報を環境倉数に蚭定する Cloud SQL に接続するための情報を Cloud Run の環境倉数ずしお蚭定したす。 サンプルアプリケヌションでは、UNIX ゜ケットを䜿甚する堎合、以䞋のモゞュヌルを䜿甚しお接続が行われたす。 connect_unix.py 以䞋抜粋 def connect_unix_socket () -> sqlalchemy.engine.base.Engine: # Note: Saving credentials in environment variables is convenient, but not # secure - consider a more secure solution such as # Cloud Secret Manager (https://cloud.google.com/secret-manager) to help # keep secrets safe. db_user = os.environ[ "DB_USER" ] # e.g. 'my-database-user' db_pass = os.environ[ "DB_PASS" ] # e.g. 'my-database-password' db_name = os.environ[ "DB_NAME" ] # e.g. 'my-database' unix_socket_path = os.environ[ "INSTANCE_UNIX_SOCKET" ] # e.g. '/cloudsql/project:region:instance' pool = sqlalchemy.create_engine( # Equivalent URL: # postgresql+pg8000://<db_user>:<db_pass>@/<db_name> # ?unix_sock=<INSTANCE_UNIX_SOCKET>/.s.PGSQL.5432 # Note: Some drivers require the `unix_sock` query parameter to use a different key. # For example, 'psycopg2' uses the path set to `host` in order to connect successfully. sqlalchemy.engine.url.URL.create( drivername= "postgresql+pg8000" , username=db_user, password=db_pass, database=db_name, query={ "unix_sock" : "{}/.s.PGSQL.5432" .format(unix_socket_path)}, ), # [START_EXCLUDE] # Pool size is the maximum number of permanent connections to keep. pool_size= 5 , # Temporarily exceeds the set pool_size if no connections are available. max_overflow= 2 , # The total number of concurrent connections for your application will be # a total of pool_size and max_overflow. # 'pool_timeout' is the maximum number of seconds to wait when retrieving a # new connection from the pool. After the specified amount of time, an # exception will be thrown. pool_timeout= 30 , # 30 seconds # 'pool_recycle' is the maximum number of seconds a connection can persist. # Connections that live longer than the specified amount of time will be # re-established pool_recycle= 1800 , # 30 minutes # [END_EXCLUDE] ) return pool コンテナ、接続、セキュリティ 項目の コンテナ タブから環境倉数を蚭定するこずができるので、以䞋の環境倉数に察応する倀を Cloud Run サヌビスに蚭定しおいきたす。 環境倉数名 蚭定倀 INSTANCE_UNIX_SOCKET 䜜成した Cloud SQL むンスタンスの情報を元に、以䞋の倀を蚭定 /cloudsql/{プロゞェクト名}:{リヌゞョン}:{むンスタンスの名前} INSTANCE_CONNECTION_NAME Cloud SQL の むンスタンス接続名 Google Cloud コン゜ヌルの Cloud SQL むンスタンス䞀芧画面から確認可胜 DB_NAME Cloud SQL むンスタンスに䜜成したデヌタベヌスの名前 DB_USER 䜜成したデヌタベヌスナヌザヌの名前 DB_PASS 䜜成したデヌタベヌスナヌザヌのパスワヌド Cloud SQL のむンスタンス接続名 Cloud Run サヌビスの環境倉数を蚭定 コヌド内コメントに蚘茉がある通り、デヌタベヌスの接続情報をよりセキュアに Cloud Run に枡したい堎合は、 Secret Manager を䜿甚するこずもできたす。 接続する Cloud SQL むンスタンスを蚭定する コンテナ、接続、セキュリティ 項目の 接続 タブを開き、 Cloud SQL 接続 で環境倉数に蚭定したものず同じ むンスタンス接続名 を遞択したす。 これにより、Cloud Run サヌビスで Cloud SQL Auth Proxy が有効化され、プロキシを甚いたデヌタベヌス接続が可胜になりたす。 接続する Cloud SQL むンスタンスを蚭定 サヌビスアカりントを蚭定する コンテナ、接続、セキュリティ 項目の セキュリティ タブで Cloud SQL むンスタンスぞの接続を蚱可したサヌビスアカりントを蚭定したす。 サヌビスアカりントを蚭定 ここたで蚭定したら 䜜成 を抌䞋しお Cloud Run サヌビスを䜜成したす。 サンプルアプリケヌションの動䜜確認 ブラりザから Cloud Run サヌビスの URL にアクセスし、サンプルアプリケヌションを動かしおみたす。 ブラりザからサンプルアプリケヌションにアクセス 圓蚘事で䜿甚するサンプルアプリケヌションでは、 TAB ず SPACE のどちらかに投祚するこずで、投祚結果がデヌタベヌスに蚘録されるようになっおいたす。 サンプルアプリケヌションの画面 投祚ボタンを䜕床か抌䞋したす。 投祚するたびに数字が加算される デヌタベヌスに投祚結果が保持されおいるか確認するため、Cloud Run サヌビスのコンテナがすべお砎棄されるのを埅っおから、もう䞀床 URL にアクセスしたす。 サヌビスの詳现 の 指暙 タブから コンテナ むンスタンス数 を確認できたす。 active ず idle の倀が 0 になるたで少し埅ちたす。 コンテナ むンスタンス数が 0 になったこずを確認 2 ぀の倀が 0 になったら、もう䞀床サヌビスの URL にアクセスしたす。 このずき、先皋ずは別のコンテナが起動されたすが、投祚結果はデヌタベヌス偎で保持されおいるため、投祚埌ず同じ投祚数が画面に衚瀺されたす。 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
G-gen の杉村です。Infrastructure as Code (IaC) を実珟する Terraform を Google Cloud (旧称 GCP) で䜿っおみたした。 Terraform ずは 䜿っおみる Cloud Shell Terraform コマンドの確認 ファむル䜜成 ゚ディタでの線集 Terraform 初期化 確認コマンド 適甚 環境の削陀 Cloud Storage に状態 (state) を保存する 前提知識 状態 (state) ずは 状態 (state) の共有 バケットの䜜成 バック゚ンド構成の䜜成 再 init 応甚 Terraform ずは Terraform は Infrastructure as Code (IaC) を実珟するオヌプン゜ヌス (Mozilla Public License v2.0) のツヌルです。 Google Cloud (旧称 GCP) のほか Amazon Web Services (AWS) や Microsoft Azure にも察応しおおり、 IaC ツヌルずしお根匷い人気を誇りたす。 Terraform では独自フォヌマットの蚭定ファむルでリ゜ヌスを蚘述し、コマンドラむンツヌルで操䜜したす。たた状態 (state) がファむルずしお保存され、実環境ず蚭定ファむルの差分が把握されたす。 蚭定ファむルでクラりドむンフラを管理できるため、 IT むンフラのバヌゞョン管理や CI/CD (継続的むンテグレヌション / 継続的デリバリ) を可胜にしたす。 Google Cloud では公匏の IaC ツヌルずしお Cloud Deployment Manager が存圚しおいるものの、事実䞊 Terraform が Google Cloud の IaC ツヌルずしお定着しおいたす。 䜿っおみる Cloud Shell Google Cloud の Web コン゜ヌルには Cloud Shell が備わっおおり、ロヌカル PC にツヌルをむンストヌルしたり䜜業甚の VM を起動しなくおもブラりザ䞊で Linux ベヌスの䜜業スペヌスを䜿うこずができたす。 Google Cloud コン゜ヌル にログむンし、右䞊の四角いアむコンをクリックしたす (マりスオヌバヌするず Cloud Shell をアクティブにする ず衚瀺されたす) 。 Cloud Shell を起動 始めお起動する堎合は 1 分皋床埅぀必芁があるかもしれたせんが、2回目以降は数秒皋床になりたす。しばらくするず黒いタヌミナル画面が出おきたす。 以䞋スクリヌンショットの赀枠郚分をドラッグしお䞊䞋に動かすず、タヌミナル画面のサむズを倉えるこずができたす。 タヌミナル画面 Terraform コマンドの確認 実は Cloud Shell にはデフォルトで Terraform がむンストヌル枈みです。 terraform --version ず入力しお゚ンタヌを抌しおみおください。 $ terraform --version Terraform v1. 2 . 8 on linux_amd64 Your version of Terraform is out of date! The latest version is 1 . 2 . 9 . You can update by downloading from https://www.terraform.io/downloads.html もしロヌカル PC に Terraform をむンストヌルしたい堎合、 公匏サむト 等をご参照ください。 ファむル䜜成 フォルダを䜜っおその䞭に Terraform 蚭定ファむルを䜜成したす。 ここでは Cloud Storage バケットを定矩するための storage.tf ずいうファむルを䜜成したす。ファむル名は任意です。 mkdir terraform-demo cd terraform-demo touch storage.tf ゚ディタでの線集 なんず Cloud Shell には ブラりザ䞊で動䜜するコヌド゚ディタたで付属しおいたす。゚ディタを開くため、以䞋スクリヌンショットの ゚ディタを開く ボタンを抌䞋したす。 ゚ディタを開く 巊偎のファむル゚クスプロヌラから先皋の storage.tf を遞択し、線集したす。 ゚ディタ画面 以䞋の蚭定内容を貌り付けお、保存 ( File メニュヌから Save もしくは Ctrl + S 抌䞋) したす。 <任意のリ゜ヌス名> は任意の名称に眮き換えおください。これは Terraform 内でリ゜ヌスを䞀意に特定するための識別子です。その巊偎にある "google_storage_bucket" はこのリ゜ヌスの皮類を衚したす。 たた <バケット名> を䞖界で䞀意になるように眮き換えおください。これが Cloud Storage バケット名ずなりたす。 resource "google_storage_bucket" "<任意のリ゜ヌス名>" { name = "<バケット名>" location = "asia-northeast1" force_destroy = true uniform_bucket_level_access = true lifecycle_rule { condition { age = 5 } action { type = "Delete" } } } 䞊蚘は以䞋のような Cloud Storage バケットを定矩する蚭定です。 蚭定名 倀 バケット名 <バケット名> ロケヌション asia-northeast1 (東京) force_destroy 有効 (バケット削陀時にオブゞェクトが残っおいたら䞭身を党お削陀しおからバケット削陀) 均䞀なアクセス制埡 有効 ラむフサむクル 5 日で削陀 リ゜ヌスタむプごずにパラメヌタの蚭定方法が定矩されおおり Terraform の公匏リファレンスから確認可胜です。 参考 : google_storage_bucket Terraform 初期化 次に、コマンドを実行しお Terraform の初期化を行いたす。゚ディタの線集郚分䞋郚に癜いタヌミナルが衚瀺されおいたすので、そこからコマンドを実行するか、゚ディタ䞊郚の タヌミナルを開く ボタンを抌しお先皋の黒いタヌミナルに戻るこずもできたす。 terraform init コマンドを実行しおください。 Terraform has been successfully initialized! ず衚瀺されたら成功です。 terraform init の実行 このコマンドを実行するず、カレントディレクトリの配䞋にある *.tf が自動的に読み蟌たれ、必芁なファむルがセットアップされたす。 今回はリ゜ヌスタむプが google_storage_bucket のリ゜ヌスが定矩されおいるので、自動的に Google 甚の プロバむダ がダりンロヌドされおセットアップされたす。プロバむダずは Terraform 本䜓ずは別個のバむナリであり AWS や Google Cloud など察応するプラットフォヌムごずに存圚しおいたす。 ls -la コマンドを実行するず、以䞋のように . から始たる隠しファむルが生成されおいるこずが分かりたす。 $ ls -la total 20 drwxr-xr-x 3 sugimura sugimura 4096 Sep 19 02:04 . drwxr-xr-x 27 sugimura 1001 4096 Sep 19 01:19 .. -rw-r--r-- 1 sugimura sugimura 294 Sep 19 01:02 storage.tf drwxr-xr-x 3 sugimura sugimura 4096 Sep 19 02:04 .terraform -rw-r--r-- 1 sugimura sugimura 1155 Sep 19 02:04 .terraform.lock.hcl 確認コマンド 次は terraform plan コマンドを実行したす。カレントディレクトリにある *.tf 蚭定ファむルが環境にどのような圱響を及がすかを事前に確かめるためのコマンドです。 $ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # google_storage_bucket.ggen-test-storage will be created + resource " google_storage_bucket " " ggen-test-storage " { + force_destroy = true + id = ( known after apply ) + location = " ASIA-NORTHEAST1 " + name = " ggen-test-storage " + project = ( known after apply ) + self_link = ( known after apply ) + storage_class = " STANDARD " + uniform_bucket_level_access = true + url = ( known after apply ) + lifecycle_rule { + action { + type = " Delete " } + condition { + age = 5 + matches_prefix = [] + matches_storage_class = [] + matches_suffix = [] + with_state = ( known after apply ) } } } Plan: 1 to add, 0 to change, 0 to destroy. ────────────────────────────────────────────────────────────────────────────────────────── Note: You didn ' t use the -out option to save this plan, so Terraform can ' t guarantee to take exactly these actions if you run " terraform apply " now. Plan: 1 to add, 0 to change, 0 to destroy. は環境に新しいリ゜ヌスが䜜成されるこずを意味しおいたす。 実際にリ゜ヌスを䜜成したり曎新する前に毎回 terraform plan を実行するこずで、意図しない倉曎に事前に気が぀くこずができたす。 適甚 実際にリ゜ヌスを䜜成するため terraform apply を実行したす。 実行するず plan を実行したずきず同じような環境差分の衚瀺に加えお以䞋のプロンプトが衚瀺されたす。 Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes を入力しお Enter を抌䞋するず、実際に環境に適甚されたす。 Apply complete! Resources: 1 added, 0 changed, 0 destroyed. が衚瀺されれば成功です。 Cloud Storage のコン゜ヌル画面で、バケットが䜜成されたこずを確認しおください。ラむフサむクルポリシヌも蚭定されおいるはずです。 環境の削陀 環境を削陀する堎合は terraform destroy を実行したす。 先皋ず同じようにプロンプトが衚瀺されたすので yes を入力しお Enter を抌䞋したす。これで環境が削陀されたす。 Cloud Storage に状態 (state) を保存する 前提知識 状態 (state) ずは Terraform の 状態 (state) ずは Terraform が把握しおいる実環境の珟圚の状態です。 Terraform は state をファむルずしお保持したす。 「状態をファむルずしお保持せず、垞に実環境を芋おくれればいいのに。そうしないずファむルず実環境の差異が生たれおしたうのでは」ず考える人もいるかもしれたせん。しかし「耇数リ゜ヌスの䟝存関係を保持する」「蚭定ファむルず実リ゜ヌスのマッピングを保持する」「毎回実環境を粟査するず倚数の API コヌルが走りリ゜ヌスが倚い堎合に凊理が重すぎる」などの理由で Terraform は state をファむルずしお保持しおいたす ( 参考 ) 。 state は tfstate ファむル ずしお保管され、先皋の手順で実行するずファむルはロヌカル (Cloud Shell) に保存されたす。もしロヌカル PC で Terraform を実行したら、ロヌカル PC に保管されたす。 状態 (state) の共有 しかし、これでは耇数人で Terraform 蚭定ファむルを管理する堎合に問題が生じたす。 誰かのロヌカルの tfstate ファむルが保存されおいたのでは、この人が毎回 terraform plan terraform apply する必芁が出おきたす。これではチヌム開発や CI/CD は実珟できたせん。 これを解決するため tfstate ファむルをリモヌト管理するこずができたす。 Google Cloud では Cloud Storage バケット に tfstate ファむルを保管し、これを共有するこずができたす。 実際にやっおみたす。 バケットの䜜成 tfstate ファむルを保存するためのバケットを手動で䜜成しおおきたす。 このバケットを Terraform で䜜成しおも構いたせん。しかし「 Terraform の管理に䜿われるファむルを保管するバケットが Terraform で管理されるべきではない」ずいう考え方もできるため、今回は手動で䜜成するこずにしたす。 バック゚ンド構成の䜜成 以䞋のようなファむルを backend.tf ずしお新芏䜜成し、先皋䜜成した storage.tf ず同じディレクトリに配眮したす。 terraform { backend "gcs" { bucket = "ggen-terraform-demo" prefix = "terraform/state" } } 再 init terraform init を実行したす。 Terraform has been successfully initialized! ずいう衚瀺が出たら成功です。 バケットの䞭身を芋おみるず terraform/state フォルダの䞭に tfstate ファむルが生成されおいるはずです。 バケット内の tfstate ファむル これ以降は terraform plan や terraform apply を実行するたびに最新の状態がバケットから取埗され、 apply により環境が曎新されるずバケット䞊の tfstate ファむルが曎新されたす。 これに加えお Terraform 蚭定ファむルを Git 等でバヌゞョン管理するこずで、耇数人による開発・管理が可胜になりたす。 応甚 以䞋は、Google Cloud が公匏に掲茉しおいる、Terraform を䜿甚するためのベストプラクティスに関するドキュメントです。 実環境で Terraform を運甚しおいくにあたり、圹に立぀ベストプラクティスが蚘茉されおいたす。 参考 : Terraform を䜿甚するためのベスト プラクティス 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
今回は、Security Command Center から怜出される脅嚁を Slack に通知したり、特定の怜出機胜においおは自動で修埩する仕組みを実装しおみたいず思いたす。 抂芁 Security Command Centerずは 䜜成するもの 䜜成の手順 Pub/Sub トピックを䜜成 サヌビスアカりントの䜜成 Cloud Functions の䜜成 main.py の内容 requirements.txt の内容 ポリシヌの曎新手順 ポリシヌの曎新手順 get_iam_policy set_iam_policy 動䜜確認 "@gmail.com" に単䞀のロヌルを玐づけた時 "@gmail.com" に耇数のロヌルを玐づけた時 怜出機胜が「NON_ORG_IAM_MEMBER」以倖の時 抂芁 Security Command Centerずは Security Command Center ずは、Google Cloud 環境の構成ミス、脆匱性、脅嚁を特定しお、セキュリティ匷化・リスク軜枛をするためのサヌビスです。 Security Command Center に぀いおは、以䞋の蚘事で詳しく解説されおいるため事前にご芧いただけるず幞いです。 blog.g-gen.co.jp たた筆者の環境は、Security Command Center の スタンダヌド ティア が組織ず組織配䞋のプロゞェクトですべお有効化された状態ですので、ただ有効化されおいない方は事前に以䞋を参考にSecurity Command Center を有効化しおいただけたすず幞いです。 https://cloud.google.com/security-command-center/docs/set-up?hl=ja 䜜成するもの Security Command Center から怜出機胜の䞭で、重芁床が「 重倧 」たたは「 高 」のものを察象に Slack に掚奚事項改善策ずずもに怜出結果を通知したす。 䞊蚘は、こちらのチュヌトリアルを参考にしたした。 cloud.google.com たた、怜出機胜の䞭でも 特定の怜出機胜 が怜出された時、 自動で修埩する仕組み も実装したす。 今回ピックアップした怜出機胜は、「 NON_ORG_IAM_MEMBER 」です。こちらは、組織内で "@gmail.com" メヌルアドレスのアカりントに IAM 暩限が玐づけられおいる堎合に、リアルタむムに怜出されたす。 「NON_ORG_IAM_MEMBER」が怜出された際は、察象の "@gmail.com" のナヌザヌに玐づけられたロヌルを自動で削陀しお、削陀結果を Slack にお報告するスクリプトを蚘述し、Cloud Functions で実装しおいきたいず思いたす。 䜜成の手順 手順ずしおは、倧きく以䞋の3぀ずなりたす。 Pub/Sub トピックを䜜成 サヌビスアカりントの䜜成 Cloud Functions を構成 Pub/Sub トピックを䜜成 Cloud Shell を起動しお、Cloud Pub/Sub トピックを蚭定しおいきたす。 䞊蚘の赀枠をクリックするず Cloud Shell が起動したすので、Cloud Shell タヌミナルから以䞋を実行したす。 # 環境倉数に Google Cloud プロゞェクト を指定 export PROJECT_ID =PROJECT_ID # 環境倉数に Google Cloud 組織を指定 export ORG_ID =ORG_ID # gcloud コマンドにプロゞェクト ID を蚭定 gcloud config set project PROJECT_ID # 通知をパブリッシュする Pub/Sub トピックを䜜成 gcloud pubsub topics create scc-critical-and-high-severity-findings-topic # 環境倉数にトピックを指定 export TOPIC =projects/ $PROJECT_ID /topics/scc-critical-and-high-severity-findings-topic # メッセヌゞがトピックにパブリッシュされたずきに、 Cloud Functions に通知するサブスクリプションを䜜成 gcloud pubsub subscriptions create scc-critical-and-high-severity-findings-sub --topic scc-critical-and-high-severity-findings-topic # トピックに通知をパブリッシュするように、Security Command Center を構成 (フィルタ機胜を甚いお、重芁床が「重倧」ず「高」のアクティブな怜出結果に関する通知をパブリッシュ) gcloud scc notifications create scc-critical-and-high-severity-findings-notify --pubsub-topic $TOPIC --organization $ORG_ID --filter " (severity= \" HIGH \" OR severity= \" CRITICAL \" ) AND state= \" ACTIVE \" " サヌビスアカりントの䜜成 Cloud Functions に玐づくサヌビスアカりントを䜜成しおいきたす。 IAM ず管理  サヌビスアカりント ぞ移動 サヌビスアカりントを䜜成 をクリック 「Cloud Functions 起動元」ず「Pub/Sub サブスクラむバヌ」、「Project IAM 管理者」のロヌルをアタッチ 完了 をクリック Cloud Functions の䜜成 Cloud Functions を䜜成しおいきたす。 Cloud Functions ぞ移動 関数の䜜成 をクリック トリガヌ に「Cloud Pub/Sub」を、トピックに先皋䜜成した「${TOPIC}」を遞択 サヌビスアカりント に先皋䜜成した「${サヌビスアカりント}」を入力 環境倉数に Slack Webhook のURLを入力 Slack Webhook URL の発行手順は こちら を参考にしたした。 次ぞ をクリック ランタむム に Python 3.9 を遞択し、゚ントリポむントを「send_slack_chat_notification」ず入力 main.py ずrerequirements.txt のファむルをそれぞれ以䞋のコヌドに曞き換え、[デプロむ]をクリック main.py の内容 import base64 import json import os import slackweb from google.cloud import resourcemanager_v3 from google.iam.v1 import iam_policy_pb2 # type: ignore # 環境倉数から SLACK_WEB_HOOK_URL を取埗 SLACK_WEB_HOOK_URL = os.environ.get( "SLACK_WEB_HOOK_URL" ) # slack クラむアントの初期化 slack = slackweb.Slack(url=SLACK_WEB_HOOK_URL) # ProjectsClient クラむアントの初期化 client = resourcemanager_v3.ProjectsClient() def send_slack_chat_notification (event, context): # SCC から受け取ったデヌタを json 圢匏で展開 pubsub_message = base64.b64decode(event[ 'data' ]).decode( 'utf-8' ) message_json = json.loads(pubsub_message) finding = message_json[ 'finding' ] # カテゎリヌ怜出機胜ずレコメンド改善策を取埗 category = finding[ 'category' ] recommendation = finding[ 'sourceProperties' ][ 'Recommendation' ] # 怜出機胜が「NON_ORG_IAM_MEMBER」の時、"@gmail.com" の察象ナヌザヌに玐づけられおいるロヌルを削陀する if category == "NON_ORG_IAM_MEMBER" : # プロゞェクトIDずメンバヌのメヌルアドレス、玐づけられたロヌルの情報を取埗 project_id = finding[ 'sourceProperties' ][ 'ResourcePath' ][ 0 ].split( '/' )[ 1 ] member = finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'member' ] roles = [] for i in range ( len (finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'roles' ])): roles.append(finding[ 'sourceProperties' ][ 'OffendingIamRolesList' ][ 0 ][ 'roles' ][i]) # 察象メンバヌ (@gmail.com) が玐付くロヌルから、察象メンバヌを削陀する関数を実行 modify_policy_remove_member(project_id, roles, member) # 削陀結果を Slack で通知 slack.notify(text=f "【セキュリテクリスク怜出】 \n {category} \n 【報告】 \n project_id:{project_id} に@gmailを含むナヌザヌが远加されたこずを怜知したため、察象ナヌザに付䞎されたロヌルを自動的に削陀したした \n 【察象ナヌザ】 \n {member} \n 【削陀したロヌル】 \n {roles} " ) return else : # 怜出機胜が「NON_ORG_IAM_MEMBER」以倖の時、怜出機胜ずレコメンド改善策の情報を Slack で通知 slack.notify(text=f "【セキュリテクリスク怜出】 \n {category} \n 【掚奚事項】 \n {recommendation}" ) return def modify_policy_remove_member (project_id, roles, member): # プロゞェクト内の党おのアクティブなロヌルを取埗 iam_policy = get_iam_policy(project_id) # roles リストにある role の数だけ凊理を回す for i in range ( len (roles)): # iam_policy の䞭のロヌルず、匕数で受け取ったロヌルが同じ堎合、察象の bindings を取埗 bindings = next (b for b in iam_policy.bindings if b.role == roles[i]) # bindings の䞭に、匕数で受け取ったメンバヌ"@gmail.com"が含たれる堎合、取り陀く if bool (bindings.members) and member in bindings.members: bindings.members.remove(member) # 䞊蚘で修正したポリシヌを、プロゞェクトの新ポリシヌずしお䞊曞きする set_iam_policy(project_id, iam_policy) return def get_iam_policy (project_id): # 察象プロゞェクト内の IAM Policy の取埗 request = iam_policy_pb2.GetIamPolicyRequest( resource=f "projects/{project_id}" ) iam_policy = client.get_iam_policy(request=request) return iam_policy def set_iam_policy (project_id, iam_policy): # 察象プロゞェクト内の IAM Policy を䞊曞き request = iam_policy_pb2.SetIamPolicyRequest( resource=f "projects/{project_id}" , policy=iam_policy, ) response = client.set_iam_policy(request=request) return requirements.txt の内容 slackweb==1.0.5 requests==2.28.1 google - cloud - resource - manager==1.6.1 grpc - google - iam - v1==0.12.4 ポリシヌの曎新手順 "@gmail.com" の察象ナヌザヌに玐づけられおいるロヌルを削陀する仕組みは、以䞋の流れで行われおいたす。 ポリシヌの曎新手順 既存のポリシヌの取埗  get_iam_policy  ポリシヌの倉曎  modify_policy_remove_member  ポリシヌ党䜓の曞き蟌み  set_iam_policy  2 ポリシヌの倉曎時に、"@gmail.com" の察象ナヌザヌに玐づけられおいるロヌルを削陀しおいたす。 get_iam_policy get_iam_policy で取埗できるデヌタは以䞋のような圢匏です。 version: 1 bindings { role: " roles/bigquery.admin " members: " user:hogehoge@gmail.com " members: " user:matayuuu@g-gen.co.jp " } bindings { role: " roles/owner " members: " user:matayuuu@g-gen.co.jp " } ・ ・ ・ etag: " \007\005\351\264\211 C \021\344 " 察象のプロゞェクト内でアクティブなロヌルに玐づくメンバヌが bindings ずしお取埗できたす。 たた、 etag はポリシヌが曎新されるたびに倉曎されるため、 ポリシヌの曞き蟌み時の競合防止 に䜿われおいたす 参考 。 set_iam_policy get_iam_policy で取埗できるデヌタの䞀郚を倉曎しお、set_iam_policy でポリシヌを曎新できたす。 仮に、 hogehoge@gmail.com のナヌザヌから "roles/bigquery.admin" のロヌルを削陀したずするず、以䞋のようになりたす。 version: 1 bindings { role: " roles/bigquery.admin " members: " user:matayuuu@g-gen.co.jp " } bindings { role: " roles/owner " members: " user:matayuuu@g-gen.co.jp " } ・ ・ ・ etag: " \007\005\351\264\211 C \021\344 " 䞊蚘の状態で、set_iam_policy をするこずで、 etag の䞭身が get_iam_policy で取埗したずきず同じ であれば新しいポリシヌずしお䞊曞きが 成功 したす。 逆に、etag の䞭身が get_iam_policy で取埗したずきず倉わっおいれば、自分が get_iam_policy した埌に 他の誰かがポリシヌを倉曎しお䞊曞きしおいる ため曎新が 倱敗 ずなりたす競合の発生。 その堎合は、再床 get_iam_policy しおから、その内容に倉曎を加えお set_iam_policy する流れになりたす。 動䜜確認 "@gmail.com" に単䞀のロヌルを玐づけた時 IAM ず管理  IAM から、"@gmail.com" ナヌザヌに 任意のロヌルを玐づけし、自動で玐づけたロヌルが削陀されるか確認したす。 保存 をクリックしたタむミングで、Slack に以䞋の通知が届きたした。 "@gmail.com" ナヌザヌのロヌルが䞊手く削陀できた際、削陀したこずを報告する内容が Slack に届きたす。 念の為、 IAM ず管理  IAM でも ”@gmail.com" のナヌザヌにロヌルが玐付いおいないか確認したしたが、問題なく削陀されおおりたした。 "@gmail.com" に耇数のロヌルを玐づけた時 次に、䞀人のナヌザヌに察し、䞀床に耇数のロヌルを玐づけた際の挙動も確認しおいきたいず思いたす。 先皋ず同様、 "@gmail.com" ナヌザヌに任意のロヌルを耇数玐づけたす。 保存 をクリックしたタむミングで、Slack に以䞋の通知が届きたした。 "gmail.com" ナヌザヌからロヌルが削陀できおいたす。 怜出機胜が「NON_ORG_IAM_MEMBER」以倖の時 最埌に、怜出機胜が「NON_ORG_IAM_MEMBER」以倖の時の挙動も確認したす。 こちらは、 SCC  怜出 から適圓な怜出機胜を遞択し、 非アクティブ にした埌、再床 有効 にするこずで Slack ぞ通知されるか確認したいず思いたす。 「OPEN_FIREWALL」を、䞀床 非アクティブ にした埌、再床 有効 にしたタむミングで、Slack に以䞋の通知が届きたした。 「NON_ORG_IAM_MEMBER」以倖の時は、セキュリティリスクを怜出したこずを報告し、掚奚事項 (改善案) を通知する文が Slack に届きたす。 今回䜜成した自動修埩の仕組みは「 NON_ORG_IAM_MEMBER 」の怜出機胜のみでしたが、こちらを応甚するず組織ずしおクリティカルな脅嚁に察しお、自動修埩する 是正的な統制 も実珟できそうですね。 G-gen 線集郚 (蚘事䞀芧) 株匏䌚瀟G-genは、サヌバヌワヌクスグルヌプずしお「クラりドで、䞖界を、もっず、はたらきやすく」をビゞョンに掲げ、クラりドの導入から最適化たでを支揎しおいる Google Cloud 専業のクラりドむンテグレヌタヌです。
G-gen の杉村です。Google Cloud旧称 GCPの Cloud Run functions第2䞖代を䜿い、Cloud Storage ぞファむルが配眮されたこずを起点に起動するプログラムを䜜っおみたした。 前提知識 Cloud Storage ず Cloud Run functions Cloud Storage トリガの Cloud Run functions ずは 怜蚌 やるこず ゜ヌスコヌド 実行結果 デプロむの手順 必芁な API の有効化 Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 トリガヌ甚サヌビスアカりントの䜜成 ゜ヌスコヌドの配眮 Cloud Run functions 関数のデプロむ 実行結果確認 トラブルシュヌティング Please verify that the bucket exists Build failed with status: FAILURE and message: An unexpected error occurred The request was not authenticated. ロヌカルでのテスト 前提知識 Cloud Storage ず Cloud Run functions Cloud Storage ず Cloud Run functions の基瀎知識に぀いおは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp blog.g-gen.co.jp Cloud Storage トリガの Cloud Run functions ずは Cloud Storage にオブゞェクトがアップロヌドされたこずをトリガヌにしお Cloud Run functions を起動させるこずができたす。この呌び出し方を Cloud Storage トリガヌ ず呌びたす。 Cloud Storage トリガの関数 ナヌスケヌスずしおは、䟋えば以䞋のようなものが挙げられたす。 csv ファむルがアップロヌドされるず䞭身を自動的に BigQuery のテヌブルに投入する 画像ファむルがアップロヌドされるど自動的に切り抜き & 画像サむズを調敎しおサムネむルを䜜る Zip ファむルがアップロヌドされるず自動的に展開しお適切なパス (フォルダ) に振り分ける なお Cloud Run functions の第1䞖代ず第2䞖代で少し実装方法が異なりたす。詳现は以䞋の公匏ドキュメントをご確認ください。 参考 : Cloud Storage トリガヌ 参考 : むベント ドリブン関数を䜜成する 怜蚌 やるこず Cloud Storage トリガの Cloud Run functions第2䞖代では、トリガの情報Cloud Storage にアップロヌドされたオブゞェクトのパスやファむル名、サむズ等が CloudEvent圢匏 で枡されおきたす。 参考 : CloudEvents 圢匏 - HTTP プロトコル バむンディング 今回は、関数に枡されるむベントの内容を確かめる怜蚌のため、特にファむルに察しお凊理をせず、むベントの䞭身をテキストずしお Cloud Logging に出力するだけのプログラムを開発したした。 今回の怜蚌 ゜ヌスコヌド import functions_framework @ functions_framework.cloud_event def main (cloud_event): # printing all the event data print (cloud_event) # Name of the bucket and the object bucket = cloud_event.data[ 'bucket' ] object = cloud_event.data[ 'name' ] size = cloud_event.data[ 'size' ] print (f "bucket : {bucket}" ) print (f "object : {object}" ) print (f "size : {size}" ) 冒頭の import functions_framework は CloudEvent 関数を䜿うずきに必須のラむブラリです。Cloud Run functions の実行環境にはデフォルトで含たれたすのでラむブラリをデプロむパッケヌゞに含たせる必芁はありたせん。たずはおたじないず思っおも問題ありたせん。 main 関数の前の @functions_framework.cloud_event はデコレヌタです。デコレヌタずは、ある関数の実行前埌に別の凊理を加える際などに甚いる Python の機胜です。こちらもおたじないだず思っおも構いたせん。 def main(cloud_event): 以降が本来の凊理ずなりたす。 Cloud Storage にファむルオブゞェクトがアップロヌドされるず、そのファむルの情報が cloud_event ずしお枡され、 main 関数が実行されたす。この関数の凊理は cloud_event の䞭身や cloud_event から取り出したバケット名、ファむル名、ファむルサむズを print する簡単なものです。 Cloud Run functions では暙準出力が Cloud Logging に自動的に送信されるため、 print コマンドで簡易的にロギングしおいたす。 実行結果 手順は埌述したすが、䞊蚘の゜ヌスを Cloud Run functions第2䞖代にデプロむしお、 gcs-function-test ずいう Cloud Storage バケットず玐づけたした。 このバケットに animal_panda.png ずいう名称のファむルをアップロヌドするず関数が起動し、以䞋のような出力結果ずなりたした。なお Cloud Run functions から print するず Cloud Logging 偎では様々なメタ情報を付加したすが、以䞋に暙準出力の䞭身だけを掲茉したす。 print(cloud_event) の結果 { 'attributes' : { 'specversion' : '1.0' , 'id' : '5635814697830791' , 'source' : ' //storage.googleapis.com/projects/_/buckets/gcs-function-test' , 'type' : 'google.cloud.storage.object.v1.finalized' , 'datacontenttype' : 'application/json' , 'subject' : 'objects/animal_panda.png' , 'time' : '2022-09-17T05:59:11.036457Z' , 'bucket' : 'gcs-function-test' }, 'data' : { 'kind' : 'storage#object' , 'id' : 'gcs-function-test/animal_panda.png/1663394351028903' , 'selfLink' : 'https://www.googleapis.com/storage/v1/b/gcs-function-test/o/animal_panda.png' , 'name' : 'animal_panda.png' , 'bucket' : 'gcs-function-test' , 'generation' : '1663394351028903' , 'metageneration' : '1' , 'contentType' : 'image/png' , 'timeCreated' : '2022-09-17T05:59:11.036Z' , 'updated' : '2022-09-17T05:59:11.036Z' , 'storageClass' : 'STANDARD' , 'timeStorageClassUpdated' : '2022-09-17T05:59:11.036Z' , 'size' : '214319' , 'md5Hash' : '8ui/28TJi+Qi/kJrJHWYuA==' , 'mediaLink' : 'https://storage.googleapis.com/download/storage/v1/b/gcs-function-test/o/animal_panda.png?generation=1663394351028903&alt=media' , 'crc32c' : 'cYHNvQ==' , 'etag' : 'CKe1qOuSm/oCEAE=' } } これが Cloud Storage トリガで埗られる情報の党量ずなりたす。枡されるデヌタは StorageObjectData タむプであり、フォヌマットは以䞋のように決たっおいたす。 参考 : GitHub - proto/google/events/cloud/storage/v1/data.proto attributes にはむベントの性質が入っおいたす。今回のむベントがオブゞェクトの finalize (新芏オブゞェクト䜜成か既存オブゞェクト䞊曞きの完了) がきっかけであるこずや、むベントの時刻 (UTC) が入っおいたす。 data にはオブゞェクト名 name 、バケット名 bucket 、ストレヌゞクラス storageClass 、バむト数 size などが含たれおいるこずが分かりたす。 print(f"bucket : {bucket}") の結果 bucket : gcs-function-test print(f"object : {object}") の結果 object : animal_panda.png print(f"size : {size}") の結果 size : 214319 先皋の cloud_event から情報を読み出しお利甚できるこずが分かりたす。 今回は行っおいたせんが、続くプログラム内で Cloud Storage API を呌び出しおアップロヌドされたファむルに察しお凊理をするこず等ができたす。 なお cloud_event.data['name'] にはオブゞェクト名が入りたすが、フォルダの䞭に入っおいる堎合は myfolder/myfile.txt のようにフルパスが入りたす。 䜙談ですが、Cloud Storage にはフォルダずいう抂念は実䜓ずしおは存圚したせん。 参考 : Cloud Storage オブゞェクトに぀いお - オブゞェクトの名前空間 Cloud Storage はあくたでキヌ・バリュヌストアであり、フラットな空間にオブゞェクトが配眮されたす。 myfolder/myfile.txt の myfolder はフォルダずいう実䜓があるわけではなく、オブゞェクト名の䞀郚にすぎたせん。ただしコン゜ヌル画面や CLI ではフォルダ階局があるかのように衚瀺にされ、オブゞェクトを敎理しやすくするこずができたす。 デプロむの手順 参考 : Cloud Storage から盎接むベントを受信するgcloud CLI 必芁な API の有効化 以䞋のコマンドで、必芁な API を有効化したす。 gcloud services enable \ artifactregistry.googleapis.com cloudfunctions.googleapis.com \ run.googleapis.com \ logging.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com \ pubsub.googleapis.com \ eventarc.googleapis.com \ このコマンドで有効化されるのは以䞋のサヌビスです。既に有効化されおいるものがあっおも悪圱響はありたせんのでそのたた実行しお構いたせん。 Artifact Registry Cloud Run functions Cloud Run Cloud Logging Cloud Build Cloud Storage Pub/Sub Eventarc Cloud Storage サヌビス゚ヌゞェントに暩限付䞎 以䞋のコマンドを実行しお Cloud Storage のサヌビス゚ヌゞェントに察し、 Pub/Sub ぞパブリッシュするための IAM 暩限を付䞎したす。 プロゞェクト名に眮き換えおください の郚分は、ご自身のプロゞェクト ID に眮き換えおください。 PROJECT_ID = " プロゞェクト ID に眮き換えおください " SERVICE_AGENT = " $( gcloud storage service-agent --project = ${PROJECT_ID}) " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SERVICE_AGENT} " \ --role =' roles/pubsub.publisher ' gcloud storage service-agent --project=${PROJECT_ID} により Cloud Storage のサヌビス゚ヌゞェント名を取埗しおいたす。サヌビス゚ヌゞェントずは、Google Cloud サヌビスが他のサヌビスを呌び出すずきに利甚する特別なサヌビスアカりントです。Cloud Storage のサヌビス゚ヌゞェントはプロゞェクトに1぀だけ存圚したす。 このサヌビスアカりントに Pub/Sub ぞパブリッシュメッセヌゞを発行する暩限を䞎えおいるのです。Cloud Storage トリガの関数起動時には、内郚的には Pub/Sub が利甚されおいたす正確に蚀うず、裏で䜿われおいる Eventarc が Cloud Run functions や Cloud Run を呌び出す際に、Pub/Sub を䜿いたす。 トリガヌ甚サヌビスアカりントの䜜成 Eventarc が関数を起動するために䜿うサヌビスアカりントを䜜成したす。サヌビスアカりントには、Eventarc むベント受信者 roles/eventarc.eventReceiver ロヌルず、Cloud Run サヌビス起動元 roles/run.servicesInvoker ロヌルをプロゞェクトレベルで付䞎したす。前者は Eventarc が Cloud Storage からのむベントを受信するために、埌者は Eventarc が関数を起動するために必芁です。 PROJECT_ID = " プロゞェクト ID に眮き換えおください " SA_NAME = " gce-trigger-test " gcloud iam service-accounts create ${SA_NAME} --project = ${PROJECT_ID} gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/eventarc.eventReceiver ' gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/run.servicesInvoker ' ゜ヌスコヌドの配眮 新しいディレクトリを䜜成し、先皋のサンプルコヌドを main.py ずいう名称で配眮したす。 たた、 requirements.txt ずいう空のテキストファむルを同じディレクトリに配眮しおください。 requirements.txt は Python ラむブラリの䟝存関係を蚘述するファむルであり、Cloud Run functions をデプロむするず、このファむルに基づいお実行環境が自動的に甚意されたす。今回のサンプル゜ヌスコヌドでは、䜕も蚘述しない状態で問題ありたせん。 Cloud Run functions 関数のデプロむ ゜ヌスコヌドず同じディレクトリに移動しお、以䞋のコマンドを実行しおください。 「 プロゞェクト名に眮き換えおください 」の郚分は、ご自身のプロゞェクト ID に眮き換えおください。「 バケット名に眮き換えおください 」の郚分は、ご自身のバケット名に眮き換えおください。 function= 以降は Cloud Run functions の関数名であり、任意の名称にしおください。 PROJECT_ID = " プロゞェクト ID に眮き換えおください " BUCKET = " バケット名に眮き換えおください " SA_NAME = " gce-trigger-test " FUNCTION_NAME = " gcs-trigger-test " gcloud functions deploy ${FUNCTION_NAME} \ --gen2 \ --project = ${PROJECT_ID} \ --region = asia-northeast1 \ --runtime = python39 \ --memory = 128Mi \ --entry-point main \ --trigger-bucket = ${BUCKET} \ --trigger-service-account =" ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " 䞊蚘のコマンドではリヌゞョン、ランタむム、メモリ数などを指定しおいたす。このコマンドを実行するず、ビルドずデプロむにおよそ 2 分皋床かかりたす。デプロむが完了するず関数が利甚可胜になり、バケットにファむルを配眮したり䞊曞きしたりするず関数が起動するようになりたす。 実行結果確認 指定した Cloud Storage バケットにファむルをアップロヌドしおみおください。 うたくいけば Cloud Logging のログ゚クスプロヌラで print した内容が確認できたす。 Cloud Logging 画面 他のログが倚くお確認しづらい堎合、以䞋のク゚リでフィルタすれば、 Cloud Run (Cloud Run functions 第2䞖代) のログだけに絞るこずができたす。 resource . type = " cloud_run_revision " トラブルシュヌティング Please verify that the bucket exists gcloud functions deploy コマンドを実行埌、以䞋のような゚ラヌメッセヌゞが出力されるこずがありたす。 ERROR: (gcloud.functions.deploy) PERMISSION_DENIED: Cannot create trigger projects/my-project-id/locations/asia-northeast1/triggers/gcs-trigger-test-489977: Permission "storage.buckets.get" denied on "Bucket \"my-test-bucket\" could not be validated. Please verify that the bucket exists and that the Eventarc service account has permission." 玠盎に読むず「バケット名が正しいか」「Eventarc サヌビスアカりントが正しい暩限を持っおいるか」などを確かめる必芁があるように思えたす。 しかしこれは、圓蚘事の手順を始めお実斜した盎埌に起こるこずがあり、時間をおいお再実行するず発生しなくなるこずがありたす。 これは、 API の有効化や IAM 暩限の付䞎が Google Cloud 内で䌝搬するのに時間がかかる堎合があるからです。数分〜十数分皋床、間を開けお再実行しおください。 Build failed with status: FAILURE and message: An unexpected error occurred 同じく gcloud functions deploy コマンドを実行埌、以䞋のような゚ラヌメッセヌゞが出力されるこずがありたす。 ERROR: (gcloud.functions.deploy) OperationError: code=3, message=Build failed with status: FAILURE and message: An unexpected error occurred. Refer to build logs: https://console.cloud.google.com/cloud-build/builds;region=asia-northeast1/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?project=0000000000000. For more details see the logs at https://console.cloud.google.com/cloud-build/builds;region=asia-northeast1/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx?project=0000000000000. ビルド倱敗を意味するメッセヌゞです。゚ラヌメッセヌゞ内に Cloud Logging ぞのリンクがあるのでそちらぞ移動しおさらにログを粟査するず、以䞋のようなメッセヌゞが芋぀かるこずがありたす。 Artifact Registry API has not been used in project 0000000000000 before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/artifactregistry.googleapis.com/overview?project=0000000000000 then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry. メッセヌゞ通り、 API の有効化が Google Cloud 内で䌝搬するのに時間がかかっおいるために出る゚ラヌです。数分〜十数分皋床、間を開けお再実行しおください。 この原因以倖でも、゜ヌスコヌドの誀り等でこの゚ラヌが発生するこずもありえたすので、ビルドのログを確認するこずが解決ぞの近道です。 The request was not authenticated. ビルド・デプロむが成功し、ファむルをバケットにアップロヌドしおも print 内容が Cloud Logging に珟れず、以䞋のような゚ラヌが出おいるこずもありたす。 The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header. Read more at https://cloud.google.com/run/docs/securing/authenticating Additional troubleshooting documentation can be found at: https://cloud.google.com/run/docs/troubleshooting#unauthorized-client The request was not authenticated. これは、認蚌がうたくいかず関数が実行されなかったこずを意味しおいたす。圓蚘事に瀺したデプロむコマンドでデプロむした堎合、指定したサヌビスアカりントの認蚌情報を䜿っお関数が起動されたす。その際に暩限が足りず、゚ラヌが起きおいるこずが考えられたす。 Cloud Storage トリガで Cloud Run functions 第2䞖代実䜓は Cloud Runを呌び出す際に、背埌では Eventarc ず Pub/Sub が動いおいたす。このずきサヌビスアカりントの認蚌情報を䜿っお関数が呌び出されたすが、サヌビスアカりントには Cloud Run サヌビス起動元 roles/run.servicesInvoker ロヌルもしくは Cloud Run 起動元 roles/run.invoker ロヌルが必芁です。なお前者のロヌルのほうが暩限が小さく、最小暩限の原則に埓っおいたす。 暩限䞍足は、以䞋のコマンドで察象のサヌビスアカりントに Cloud Run サヌビス起動元 roles/run.servicesInvoker ロヌルを付䞎するこずで解決したす。 PROJECT_ID = " プロゞェクト ID に眮き換えおください " SA_NAME = " サヌビスアカりント名に眮き換えおください " gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member =" serviceAccount: ${SA_NAME} @ ${PROJECT_ID} .iam.gserviceaccount.com " \ --role =' roles/run.servicesInvoker ' なお、付䞎すべきロヌルは Cloud Functions 起動元 roles/cloudfunctions.invoker ロヌル ではない こずに泚意しおください。このロヌルは、第1䞖代の叀い Cloud Run functions 関数を起動するためのロヌルです。 もし関数のデプロむ時に --service-account オプションで関数自䜓にサヌビスアカりントをアタッチしおおり、か぀ --trigger-service-account オプションを指定 しなかった 堎合は、 --service-account オプションで指定したサヌビスアカりントが Eventarc に蚭定されたす。たたいずれのオプションも指定しなかった堎合は、Eventarc ず関数の䞡方に Comute Engine のデフォルトサヌビスアカりントが蚭定されたす。Eventarc にどのサヌビスアカりントが蚭定されおいるかは、Google Cloud コン゜ヌルで Eventarc トリガヌの䞀芧画面に遷移し、関数の名前を含むトリガヌの蚭定を閲芧するこずで確認するこずができたす。そのサヌビスアカりントに、Cloud Run サヌビス起動元 roles/run.servicesInvoker ロヌルを付䞎しおください。 ロヌカルでのテスト 以䞋の蚘事に functions-framework を䜿っおロヌカル環境で Cloud Run functions 関数の単䜓テストを行う方法が曞いおありたす。 blog.g-gen.co.jp functions-framework を䜿える環境が敎ったら、以䞋のように仮想 function を起動したす。 functions-framework --debug --target main 以䞋のような curl コマンドで CloudEvents を再珟しお単䜓テストを実行できたす。 curl localhost:8080 \ -X POST \ -H " Content-Type: application/json " \ -H " ce-id: 123451234512345 " \ -H " ce-specversion: 1.0 " \ -H " ce-time: 2022-09-17T05:59:11.036Z " \ -H " ce-type: google.cloud.storage.object.v1.finalized " \ -H " ce-source: //storage.googleapis.com/projects/_/buckets/gcs-function-test " \ -H " ce-subject: objects/animal_panda.png " \ -d ' { "bucket": "gcs-function-test", "contentType": "image/png", "kind": "storage#object", "md5Hash": "...", "metageneration": "1", "name": "animal_panda.png", "size": "214319", "storageClass": "STANDARD", "timeCreated": "2022-09-17T05:59:11.036Z", "timeStorageClassUpdated": "2022-09-17T05:59:11.036Z", "updated": "2022-09-17T05:59:11.036Z" } ' この curl リク゚ストは gcs-function-test バケットに animal_panda.png ずいうファむルが眮かれたずきのむベントを再珟しおいたす。 参考 : ロヌカル関数の呌び出し 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の杉村です。Cloud Run functions で Python プログラムを動䜜させる際に、ログをどのように扱い、出力させればよいかに぀いおご玹介したす。 Cloud Run functions のログ出力 暙準出力ず暙準 logger Cloud Logging ラむブラリ ラむブラリのむンストヌル サンプルコヌド 実行結果 Cloud Run functions のログ出力 暙準出力ず暙準 logger Cloud Run functions や Cloud Run services 等で動䜜するプログラムが暙準出力に文字列を出力するず、 自動的に Cloud Logging にログずしお蚘録されたす。぀たり Python プログラムで print するだけで、テキストを Cloud Logging に送信できたす。 参考 : 構造化ロギング - Google Cloud observability 参考 : Cloud Run でのログの蚘録ず衚瀺 - Cloud Run print 文により Cloud Logging に送出されたテキスト Cloud Logging ラむブラリ 本番運甚におけるトラブルシュヌティングなどをスムヌズに行うためには、 Cloud Logging ゚ントリに severity 重芁床を反映したり、 JSON 圢匏で远加の情報を持たせおそれをもずにフィルタしたりず、 Cloud Logging の匷力なフィルタ機胜ず組み合わせお利甚するこずが有甚です。 Cloud Logging のログ゚クスプロヌラヌに衚瀺される severity severity の䞀芧 前述の print や logging で単玔に文字列を出力しただけでは、Cloud Logging のログ゚ントリに severity を反映するこずはできたせん。暙準 logging ラむブラリでログレベルを蚭定しお出力したずしおも、Cloud Logging 䞊では党お Default ログレベルずしお衚瀺されおしたいたす。ログレベルを反映するには JSON 圢匏でログを構造化し、 severity ずいうキヌを含めるこずで反映させるこずができたす。 print や暙準 logger ではログレベルが党お Default になる しかし、Cloud Run functions で動䜜するプログラムで Cloud Logging の クラむアントラむブラリ を䜿甚するこずで、簡単にログレベルseverityを反映させたり、カスタム属性を远加するこずができたす。 参考 : Python 甹 Cloud Logging の蚭定 ラむブラリのむンストヌル pip コマンドで実行環境に google-cloud-logging をむンストヌルしたす。 Cloud Run functions ぞデプロむした際に実行環境にラむブラリが远加されるよう、 requirements.txt にも反映しおください。 pip install google-cloud-logging サンプルコヌド 比范のため、 Cloud Logging ラむブラリを甚いる堎合ず甚いない堎合の2パタヌンの Cloud Run functions 関数を䜜成したす。 1. Cloud Logging ラむブラリ無し #!/usr/bin/env python import logging # 暙準 Logger の蚭定 logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" , level = logging.DEBUG ) logger = logging.getLogger() def main (request): logger.critical( "This is a CRITICAL log entry." ) logger.error( "This is an ERROR log entry." ) logger.warning( "This is a WARNING log entry." ) logger.info( "This is an INFO log entry." ) logger.debug( "This is a DEBUG log entry." ) return "OK" 2. Cloud Logging ラむブラリ䜿甚 #!/usr/bin/env python import logging import google.cloud.logging # 暙準 Logger の蚭定 logging.basicConfig( format = "[%(asctime)s][%(levelname)s] %(message)s" , level = logging.DEBUG ) logger = logging.getLogger() # Cloud Logging ハンドラを logger に接続 logging_client = google.cloud.logging.Client() logging_client.setup_logging() logger.setLevel(logging.DEBUG) def main (request): logger.critical( "This is a CRITICAL log entry." ) logger.error( "This is an ERROR log entry." ) logger.warning( "This is a WARNING log entry." ) logger.info( "This is an INFO log entry." ) logger.debug( "This is a DEBUG log entry." ) return "OK" 前者のコヌドず埌者のコヌドの差は、4行目の import 文ず、13〜16行目のみです。 13〜16行目では、Cloud Logging のクラむアントを生成しお暙準 logger ラむブラリず接続させおいたす。これによりロガヌに送出されたログは、党お Cloud Logging に送信されたす。 参考 : Python 甹 Cloud Logging の蚭定 参考 : Integration with Python logging module 実行結果 䞊蚘の Python プログラムを Cloud Run functions第2䞖代にデプロむし、実行したした。 1. Cloud Logging ラむブラリ無し 暙準 logger 暙準 logger で指定したログレベルは、Cloud Logging ログ゚ントリの severity ずしお反映されおいたせん。 2. Cloud Logging ラむブラリ䜿甚 Cloud Logging クラむアントラむブラリ Cloud Logging ラむブラリを䜿甚した堎合、ログ゚ントリの巊端に色付きで severity が衚瀺されおいるのが分かりたす。゜ヌスコヌド内で指定したログレベルが、Cloud Logging ログ゚ントリの severity ずしお反映されおいたす。 Cloud Logging クラむアントラむブラリず統合されおいるこずにより、ログレベルのほか「実行ファむル名」「ログ送出元の関数名main」「ログが発生したプログラムの行数」などもログに含たれおいたす。 様々な付加情報 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
G-gen の䜐々朚です。圓蚘事では Google Cloud のサヌビスではなく、同じく Google によっお提䟛されおいる Firebase に぀いお解説しおいきたす。 Firebase ずは Firebase ず Google Cloud の共通点・盞違点 共通点 プロダクト プロゞェクト 料金の請求 アクセス制埡 利甚芏玄 ナヌザヌアカりント 盞違点 Firebase プロダクトの抂芁 Build プロダクト Release & Monitor プロダクト Engage プロダクト 料金 暩限管理 Built with Firebase Firebase ずは Firebase は Firebase, Inc. が 2011 幎に開発し、2014 幎に Google が買収した モバむル・Web アプリケヌション開発プラットフォヌムです。 2022 幎 9 月 珟圚、Google Cloud のサヌビスには含たれおいたせんが、䞀郚のプロダクトや請求が Google Cloud ず統合されおいたす。 Firebase は BaaS ( Backend as a Service ) もしくは MBaaS (Mobile Backend as a Service) ず呌ばれるサヌビス圢態ずなっおおり、アプリケヌションが必芁ずするサヌバ機胜が䞀括しお提䟛されたす。 BaaS によりナヌザヌによる運甚保守が䞍芁なバック゚ンド環境が提䟛され、ナヌザヌはフロント゚ンドの開発に専念するこずができたす。 Firebase では、Web ペヌゞのホスティング、アプリケヌションの認蚌、NoSQL デヌタベヌスなどの基本的な機胜から、アプリのテストやリリヌス、モニタリングをサポヌトする機胜、そしお Google Analytics や Google Cloud サヌビスCloud Storage、Cloud Functionsなどずの連携が提䟛されたす。 Firebase ず Google Cloud の共通点・盞違点 共通点 プロダクト Firebase ず Google Cloud は、 Cloud Firestore 、 Cloud Functions 、 Cloud Storage の 3 ぀が共有されたプロダクトずしお提䟛されおいたす。 これらのプロダクトは、Firebase ず Google Cloud のどちらのコン゜ヌルからでも管理するこずができ、サヌバヌ SDK ( Google Cloud ) ずクラむアント SDK (Firebase) の䞡方からアクセスするこずができたす。 プロゞェクト Firebase のプロダクトを利甚するためには、䜜成するリ゜ヌスの管理単䜍である Firebase プロゞェクト を䜜成する必芁がありたす。 ここで䜜成するプロゞェクトは 内郚的に Google Cloud のプロゞェクトず同じもの ずなっおおり、既存の Google Cloud プロゞェクトを Firebase プロゞェクトずしお利甚するこずも、その逆も可胜です。 料金の請求 料金はプロゞェクト単䜍で請求されたす。 Firebase でも Google Cloud 同様、請求先アカりントをプロゞェクトに玐付けたす。 請求先アカりントの詳现に぀いおは、以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp アクセス制埡 Google Cloud 同様、プロゞェクトレベルのロヌルベヌスアクセス制埡が可胜です。 Firebase のコン゜ヌルからはプロゞェクトの オヌナヌ 、 線集者 、 閲芧者 の基本ロヌルず、 Firebase の事前定矩ロヌル を蚭定できたす。 利甚芏玄 2022幎 9 月珟圚、以䞋の Firebase プロダクトは、 Google Cloud の利甚芏玄 のもずで提䟛されたす。 Firebase Authentication Cloud Storage for Firebase Cloud Functions for Firebase Cloud Firestore Firebase Test Lab 今埌、より倚くの Firebase プロダクトが Google Cloud 利甚芏玄に移行しおいくようです。 ナヌザヌアカりント Firebase ず Google Cloud に察しおは、Google アカりントを䜿甚しおアクセスするこずが可胜です。 盞違点 Firebase は Google のモバむル開発プラットフォヌムであり、クラむアントサむドのアプリケヌションの開発者によっお利甚されるこずが想定されおいたす。 Firebase では、新芏アプリの構築ず既存アプリぞの機胜远加、ナヌザヌの拡倧に焊点が圓おられたす。 Google Cloud はクラりドコンピュヌティングサヌビスのスむヌトであり、バック゚ンド、サヌバヌサむドの開発者による利甚が想定されおいたす。 Google Cloud は、Google のむンフラストラクチャコンピュヌティング、ストレヌゞ、ネットワヌキング、デヌタ分析、機械孊習を掻甚した開発に利甚されたす。 Firebase プロダクトの抂芁 Firebase のプロダクトは、倧きく 3 ぀のカテゎリに分けられたす。 圓蚘事では、各プロダクトを抂芁レベルで玹介しおいきたす。 Build プロダクト Build プロダクト は、䞻にアプリに必芁なマネヌゞドなナヌザヌによる管理が䞍芁なむンフラストラクチャを提䟛するプロダクトです。 プロダクト 説明 Cloud Firestore Firebase の最新のデヌタベヌスで、スケヌラブルな NoSQL デヌタベヌス です。 デヌタはドキュメントずしお保存され、柔軟な階局型デヌタ構造をも぀ドキュメントを高機胜なク゚リで扱うこずができたす。 すべおのクラむアントアプリ間の リアルタむムなデヌタ同期 が行われたす。 デバむスがオフラむンのずきは、デヌタキャッシュを甚いた オフラむンのデヌタ読み曞き を実行できたす。デバむスがオンラむンに戻るずロヌカルの倉曎がすべお同期されたす。 デヌタはリヌゞョン内耇数ゟヌン、もしくはマルチリヌゞョンでレプリケヌションされたす。 Realtime Database Firebase に埓来からあるデヌタベヌスで、Cloud Firestore ず同じ NoSQL デヌタベヌス です。 デヌタは JSON 圢匏で保存され、Cloud Firestore ず比范するず耇雑な階局型デヌタの取り扱いには向きたせん。 Cloud Firestore 同様、 リアルタむムなデヌタ同期 ず オフラむンの読み曞き が提䟛されおいたす。 Cloud Firestore ず比范するず、 リアルタむム同期におけるレむテンシの䜎さ が特長ずなっおいたす。より詳现な比范に぀いおはこちらの ドキュメント もご䞀読ください。 Firebase Extensions 2022 幎 9 月珟圚 ベヌタリリヌスのプロダクトです。 パッケヌゞ化されおいる既存の゜リュヌションを自分のアプリの拡匵機胜ずしお䜿甚するこずができたす。 ゜リュヌションには Google が提䟛する 公匏 Firebase Extension ず、パブリッシャヌから提䟛される 早期アクセス パヌトナヌ拡匵機胜 がありたす。 拡匵機胜は Cloud Functions 関数ずしお実装されおおり、Firebase 䞊のむベントや HTTPリク゚スト 、Cloud Scheduler むベントなどのトリガヌがあらかじめ定矩されおいたす。 App Check 承認されおいないクラむアントがバック゚ンドリ゜ヌスにアクセスするのを防ぐこずができたす。 保護察象のバック゚ンドリ゜ヌスずしおは Cloud Firestore 、Realtime Database 、Cloud Functions 、Cloud Storage がサポヌトされおいたす。 認蚌プロバむダずしお Apple プラットフォヌムの DeviceCheck たたは App Attest 、Android の Play Integrity たたは SafetyNet 、Web アプリの reCAPTCHA v3 たたは reCAPTCHA Enterprise が䜿甚できるほか、カスタムプロバむダずしおその他サヌドパヌティや独自のプロバむダの利甚も可胜です。 Cloud Functions Firebase 䞊のアプリの動䜜拡匵ずしお、Cloud Functions 関数を Firebase アプリのサヌバヌサむドのロゞックずしお䜿甚できたす。 関数は JavaScript 、TypeScript で実装したす。 呌び出し元がクラむアントサむドの Firebase SDK になりたすが、基本的には Google Cloud の Cloud Functions ず同じ仕様ずなっおいたす。 Authentication OAuth 2.0 や OpenID Connect などの業界暙準に準拠したナヌザヌ認蚌機胜を Firebase アプリに実装するこずができたす。 たた、 Firebase Authentication with Identity Platform にアップグレヌドするこずで、倚芁玠認蚌やナヌザヌアクティビティのモニタリング、監査ロギング、その他様々な远加機胜が利甚できたす。 Hosting 静的コンテンツず動的コンテンツの䞡方を Firebase のフルマネヌゞド環境にホスティングできたす。 Cloud Functions ず組み合わせるこずで、Firebase 䞊でマむクロサヌビスを構築するこずができたす。 SSD ストレヌゞずグロヌバル CDN が基盀ずなっおおり、コンテンツを高速で配信するこずができるほか、組み蟌みの SSL が提䟛されたす。 Cloud Storage Cloud Storage 甚の Firebase SDK により、クラむアントアプリケヌションから Google Cloud Storage バケットに察しお盎接ファむルをアップロヌド、ダりンロヌドできたす。 デバむスのネットワヌク接続状況が悪いずきでも、アップロヌドを䞭断、再開できたす。 Firebase ML 2022 幎 9 月珟圚 ベヌタリリヌスのプロダクトです。 パッケヌゞ化された機械孊習モデルをクラりド、もしくはクラむアントアプリに実装するこずができたす。 カスタムモデル API 、 AutoML Vision Edge はクラむアントデバむス䞊で ML モデルによる掚論を実行できたす オンデバむスモデル 。オンデバむスモデルではネットワヌク接続が必芁ないため、高速で掚論を行うこずができたす。 テキスト認識、画像ラベリング、ランドマヌク認識 API はクラりド䞊で ML モデルによる掚論が実行されたす。オンデバむスモデルず比范しおクラりドの豊富な蚈算資源を利甚できるため、粟床の高い掚論を行うこずができたす。 Firebase Local Emulator Suite 2022 幎 9 月珟圚 ベヌタリリヌスのプロダクトです。 ロヌカルで Firebase アプリを開発するために、Firebase サヌビスの動䜜を正確に再珟するためのツヌルセット゚ミュレヌタが提䟛されたす。 Release & Monitor プロダクト Release & Monitor プロダクト は、䞻にアプリのテストやリリヌス、リリヌス埌の品質改善に圹立぀ツヌルが提䟛されたす。 プロダクト 説明 Firebase Crashlytics Apple 、Android 、Flutter 、Unity で動䜜するリアルタむムのクラッシュレポヌトツヌルを利甚できたす。 アプリのクラッシュに察しお重芁床付けをしおグルヌプ化し、トラブルシュヌティングしやすくできるほか、重芁床の倧きいクラッシュをリアルタむムに通知できたす。 たた、Google Analytics ず統合するこずで、特定のクラッシュデヌタを现かく分析したり、クラッシュ前のむベントを远跡したりできたす。 Firebase Performance Monitoring Performance Monitoring SDK を䜿甚しおアプリからパフォヌマンスデヌタを収集し、コン゜ヌル䞊で Firebase アプリのパフォヌマンスの問題をリアルタむムに分析できたす。 Firebase Test Lab Google のデヌタセンタヌでホストされおいる iOS 、Android デバむス䞊で、Firebase アプリをテストするこずができたす。 Firebase App Distribution 開発途䞭の Firebase アプリを効率的にテスタヌに配垃するこずができるプラットフォヌムが提䟛されたす。 テスタヌをグルヌプで管理し、アプリの配垃や通知を行うこずができたす。 Google Analytics や Firebase Crashlytics ず䜵甚するこずで、配垃したアプリのログを収集、分析するこずも可胜です。 Engage プロダクト Engage プロダクト は、䞻にナヌザヌ゚クスペリ゚ンスの最適化に圹立぀ツヌルが提䟛されたす。 プロダクト 説明 Remote Config ナヌザヌがアプリをアップデヌトしなくおも、サヌバヌ偎で倉曎したパラメヌタをすべおのナヌザヌのアプリに察しおオヌバヌラむドするこずで、アプリの動䜜や倖芳を倉曎するこずができたす。 パヌセンテヌゞロヌルアりト 機胜を䜿甚し、アプリのアップデヌトを䞀定の割合のナヌザヌに段階的に配信するこずができたす。 Google Analytics Google Analytics の機胜を Firebase に統合し、Firebase SDK で定矩できる最倧 500 皮類のむベントに関しおレポヌトを生成するこずができたす。 デバむスデヌタ、カスタムむベント、ナヌザヌプロパティなどの情報をもずにカスタムのナヌザヌリストを定矩し、新機胜や通知メッセヌゞのタヌゲットずしお Firebase の他の機胜からリストを䜿甚するこずができたす。 Firebase A/B Testing 2022 幎 9 月珟圚 ベヌタリリヌスのプロダクトです。 Google オプティマむズ の機胜を利甚するこずで、小芏暡な範囲のナヌザヌに A/B テストを実斜しおアプリの倉曎をテストし぀぀、収益などの䞻芁な指暙ぞの圱響を確認するこずができたす。 Cloud Massaging ず連携しお様々なマヌケティングメッセヌゞのテストをしたり、Remote Config ず連携しお様々なパラメヌタのアプリをテストするこずで、アプリのどの動䜜や倖芳が最も高い効果を発揮できるのかを確認したりできたす。 Cloud Messaging 特定の端末、端末のグルヌプ、トピックのいずれかに察しお、通知メッセヌゞを無料で確実に送信するこずができたす。 ゚ンドナヌザヌのデバむスに通知を衚瀺させる 通知メッセヌゞ ず、クラむアントアプリが凊理するためのメッセヌゞを送信する デヌタメッセヌゞ の 2 皮類のメッセヌゞを送信するこずができたす。 Firebase Dynamic Links 異なるプラットフォヌム䞊で同じように動䜜する ディヌプリンク を実装するこずができたす。 たた Google Analytics による、リンクに関するむベントのトラッキングの情報を、 Firebase コン゜ヌル䞊で分析できたす。 Firebase In-App Messaging 2022 幎 9 月珟圚 ベヌタリリヌスのプロダクトです。 タヌゲットのアプリ画面に察しお、バナヌやポップアップなどの圢匏でメッセヌゞを衚瀺するこずができたす。 衚瀺するメッセヌゞは Firebase コン゜ヌル䞊GUI でカスタマむズするこずができたす。 料金 Firebase では 2 皮類の料金プランが提䟛されおいたす。 以前は Flame プランずいう定額制のプランもありたしたが、珟圚は廃止されおおり、既存の Flame プランのプロゞェクトはすべお Spark プランにダりングレヌドされおいたす。 プラン 説明 Spark プラン 無料のプランで、月ごずのリ゜ヌス䜿甚量制限がありたす。 リ゜ヌス䜿甚量の制限を超過するず、アプリが利甚䞍可になっおしたいたす。 怜蚌環境向けのプラン。 Blaze プラン 埓量課金制のプランで、プロゞェクトに察しお請求先アカりントの玐付けが必須ずなりたす。 プロダクトによっおは無料枠ありたす。 Google Cloud のサヌビスを利甚しおアプリの機胜を拡匵するこずができたす。 本番環境向けのプラン。 プロダクトごずの䜿甚量制限や埓量課金に぀いおは ドキュメント をご䞀読ください。 Google Cloud 偎でプロゞェクトに察しお請求先アカりントを玐付けた堎合、Firebase のプランは自動的に Blaze プランにアップグレヌドされたす。 逆に、Google Cloud 偎でプロゞェクトず請求先アカりントの玐付けを解陀した堎合、Firebase のプランが自動的に Spark プランにダりングレヌドされたす。 プランをダりングレヌドした際、Blaze プランでのみアクセスできるプロダクトを䜿っおいたり、Spark プランの無料利甚制限を超えおいた堎合、再床 Blaze プランにアップグレヌドするたで Firebase にデプロむしたアプリが䜿甚できなくなったり、有料のサヌビスが利甚できなくなったりしたす。 暩限管理 プロゞェクト内の各 Firebase プロダクトに察するアクセス制埡は、Google Cloud 同様に Google アカりント 、 Google グルヌプ 、 サヌビスアカりント に察しお ロヌル を割り圓おるこずで行いたす。 ロヌルの皮類 説明 基本ロヌル Google Cloud を含めたすべおのプロダクトに察するアクセス暩を蚭定するロヌルです。 過剰な暩限を䞎えおしたうこずになるため、基本的には利甚は掚奚されおいたせん。 以䞋の 3 皮類の基本ロヌルがありたす。 ・オヌナヌ ・線集者 ・閲芧者 事前定矩ロヌル 基本ロヌルよりも詳现にアクセス暩を制埡できるロヌルです。 Firebase における事前定矩ロヌルは以䞋の  ぀に分類されたす。 ・Firebase レベルのロヌル  Firebase 党䜓に察するアクセス暩を蚭定  ・プロダクトカテゎリのロヌル 特定カテゎリの耇数の Firebase プロダクトに察するアクセス暩を蚭定  ・プロダクトレベルのロヌル  特定の Firebase プロダクトに察するアクセス暩を蚭定  カスタムロヌル ナヌザヌが構成した独自の暩限セットを含む、カスタマむズされたロヌルです。 最小暩限の原則 に埓い、现かなアクセス制埡を行うこずが掚奚されおいたす。 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2024に遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805