TECH PLAY

株匏䌚瀟G-gen

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

å…š744ä»¶

G-gen の歊井です。圓蚘事では Context-Aware Access の request.auth 属性を䜿ったアクセス制埡でハマった際の顛末に぀いお解説したす。 はじめに 背景 Context-Aware Access カスタムアクセスレベル request.auth 属性 事象の詳现 構成 カスタムアクセスレベルの定矩ず玐づけ 実際の゚ラヌ 原因ず解決策 原因 解決策 圓該ナヌザヌが利甚するブラりザの Cookie を削陀 Admin コン゜ヌルから圓該ナヌザヌのログむン情報をリセット 動䜜確認 はじめに 背景 今回、以䞋の芁件を満した堎合に Google ドラむブぞのアクセスを蚱可するずいうアクセス制埡を怜蚌しおいたした。 特定の IP アドレス からのアクセスであるこず Google アカりントが MFA (Multi-Factor Authentication) を有効にしおいるこず 2段階目の認蚌芁玠に ハヌドりェアセキュリティキヌ (以降、セキュリティキヌ) を䜿甚しおいるこず 実際の怜蚌では適切なアクセスレベルを定矩し、か぀、送信元の IP アドレスや MFA 芁件をすべお満たしおいるにもかかわらず、Google ドラむブぞのアクセスが拒吊される事象が発生したした。 Context-Aware Access Context-Aware Access 以降、CAAずは、デバむス情報、アカりント情報、接続状況などの 背景情報 コンテキストにもずづきアクセスを制埡する、Google Workspace の䞀機胜です。Frontline Standard、Enterprise Standard、Enterprise Plus、Cloud Identity Premium などの゚ディションで利甚可胜です。 CAA を蚭定するこずで、Google ドラむブ、Gmail、Google カレンダヌ、Looker Studio などに条件付きのアクセス制埡を適甚できたす。 参考 コンテキストアりェア アクセスの抂芁 カスタムアクセスレベル 今回のように、セキュリティキヌによる認蚌をアクセス制埡の条件ずする堎合、暙準アクセスレベルではなく、 カスタムアクセスレベル を䜿甚したす。 カスタムアクセスレベルは Common Expression Language (CEL) ず呌ばれる匏蚀語で定矩したす。 参考 カスタムアクセスレベル 参考 CEL 蚀語の定矩 request.auth 属性 カスタムアクセスレベルで認蚌芁玠を甚いたルヌルを定矩する堎合、 request.auth 属性を䜿甚したす。 この属性は、アクセス元のプリンシパル情報や MFA における各皮認蚌芁玠を指定するこずができたす。 参考 request.auth の属性 事象の詳现 構成 今回の怜蚌構成を図瀺したものが以䞋ずなりたす。 前述の芁件を満たすナヌザヌのアクセスだけを蚱可する想定です。 セキュリティキヌによる MFA は、組織郚門の蚭定を利甚しお匷制的に適甚しおいたす。 2段階目の認蚌芁玠はセキュリティキヌを匷制する組織郚門を甚意し、察象ナヌザヌを玐づけ カスタムアクセスレベルの定矩ず玐づけ カスタムアクセスレベルは以䞋のように定矩しおいたす。 # セキュリティキヌによる MFA 認蚌ず蚱可 IP アドレスをたずめたアクセスレベルを AND 条件で結合 request.auth.claims.crd_str.hwk == true && levels.source_ip_allow_list_test_sq7nlybc 䞊蚘のカスタムアクセスレベルで、察象の組織郚門からのアクセスを制埡するため、以䞋のように玐づけ蚭定をしおいたす。 実際の゚ラヌ 䞊蚘の蚭定を行い、実際にアクセス確認をしたずころ、 セキュリティキヌによる MFA が有効なアクセスであっおもアクセス拒吊ず刀定されおしたいたした。 たず、Google ドラむブにアクセスするナヌザヌの MFA 蚭定は以䞋の通りで、セキュリティキヌの登録が完了しおいたす。 セキュリティキヌによる MFA が有効な状態 解説のため䞀床ログアりトした状態から Google ドラむブにアクセスするず、 パスワヌド認蚌 ず2段階目の セキュリティキヌ認蚌 が芁求されるため、指瀺に埓い認蚌を実斜したす。 パスワヌド認蚌1段階目 セキュリティキヌによる認蚌2段階目が開始 セキュリティキヌをタッチしお認蚌を実斜 セキュリティキヌによる認蚌を行っおいるにもかかわらず、Google ドラむブぞのアクセスが拒吊されたした。 セキュリティキヌによる認蚌にも関わらずアクセスが拒吊される 原因に぀いおは埌述したすが、今回のハマりどころは、 セキュリティキヌによる MFA 認蚌を刀定するプロセス にありたした。 原因ず解決策 原因 ゚ラヌの原因は、 以前にログむンした際のログむン情報 ブラりザの Cookie や Google Workspace 偎で持っおいるログむン情報 でした。 今回アクセス制埡をテストしたナヌザヌは、組織郚門移行前も MFA 自䜓は有効でしたが、認蚌芁玠には ゜フトりェアキヌ を䜿甚しおいたした。 その際の Cookie やログむン情報が残っおいたため、 カスタムアクセスレベルによる MFA 蚭定を刀定する過皋で既存のログむン情報が干枉した結果 、想定倖のアクセス拒吊を匕き起こしおいたした。 解決策 以䞋を実斜するこずで゚ラヌは解消されたした。 圓該ナヌザヌが利甚するブラりザの Cookie を削陀 Google Chrome の堎合、以䞋の画面遷移で Cookie を削陀したす。 3点アむコン > 閲芧履歎デヌタを削陀 > 党期間でCookieず他のサむトデヌタ (党チェックにはなっおいるものの、察象は Cookie) を削陀 Admin コン゜ヌルから圓該ナヌザヌのログむン情報をリセット 以䞋の画面遷移でログむン Cookie を無効化リセットしたす。 ディレクトリ > ナヌザヌ > 察象ナヌザヌ > セキュリティタブ > ログむン Cookie の [リセット] を抌䞋 動䜜確認 䞊蚘の操䜜を行い再床アクセスするず Google ドラむブが衚瀺されたした。 "Cookie をすべお削陀しお再床アクセスするず Google ドラむブが衚瀺された アクセス拒吊だった際の認蚌プロセスに着目するず、以前は2段階目の認蚌プロセスのポップアップで 別の方法を詊す を遞択できる状態でした。 アクセス拒吊の際はハヌドりェアキヌ以倖の遞択肢を遞べる状況にあった しかし、アクセス蚱可ずなった際の2段階目の認蚌プロセスでは、認蚌方法を遞択するポップアップは衚瀺されず、すぐにセキュリティヌによる認蚌が開始されたした。 Cookie を削陀し、ログむン情報をリセットしたこずにより、2段階目の認蚌にセキュリティキヌを甚いおいるず正しく刀定されたした。 ログむン情報の削陀により、パスワヌド認蚌成功埌すぐにセキュリティキヌによる認蚌が開始 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2025 遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
アバタヌ
G-gen の䞉浊です。圓蚘事では、Google Workspace の Data Loss Prevention以䞋、DLPを䜿甚しお、Google ドラむブ䞊の機密情報が倖郚に挏れないようにする方法を玹介したす。 抂芁 DLP ずは 前提条件 怜蚌内容 動䜜確認 DLP のルヌル蚭定譊告 動䜜確認譊告 DLP のルヌル蚭定ブロック 動䜜確認ブロック 抂芁 DLP ずは DLP Data Loss Prevention、デヌタ損倱防止は、組織内の重芁情報を保護し、情報流出を防ぐための技術です。クレゞットカヌド番号やマむナンバヌなどの個人情報を自動的に怜出し、保護したす。 Google Workspace以䞋、GWSの DLP 機胜は、Google Chat や Google ドラむブに察応しおおり、瀟倖秘の文曞や顧客デヌタなどの機密情報の意図しない共有や流出を防止するためのポリシヌを蚭定できたす。 参考 : DLP で機密情報を保護する 前提条件 DLP は、Google Workspace の特定の゚ディションで利甚できたす。詳现は以䞋のドキュメントをご参照ください。 参考 : Workspace の DLP を䜿甚しおデヌタの損倱を防止する 怜蚌内容 怜蚌手順は次のずおりです。「譊告」蚭定で動䜜を確認した埌、「ブロック」に倉曎しお、より匷力な制埡を確認したす。 DLP のルヌル蚭定譊告 Google ドラむブ内で「瀟倖秘」ずいう文字を含むファむルが瀟倖ぞ共有される際に譊告を衚瀺する DLP ルヌルを蚭定したす。 動䜜確認譊告 条件を満たすファむルを䜜成し、瀟倖共有時に譊告が衚瀺されるこずを確認したす。 DLP のルヌル蚭定ブロック ルヌルを「瀟倖共有時にブロック」に倉曎したす。 動䜜確認ブロック 瀟倖共有時に゚ラヌが衚瀺され、共有できないこずを確認したす。 動䜜確認 DLP のルヌル蚭定譊告 GWS の管理コン゜ヌルURL : https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [セキュリティ] > [アクセスずデヌタ管理] > [デヌタの保護] に移動し、[ルヌルを管理] を遞択したす。 [ルヌルを管理] ぞ移動 [ルヌルを远加] をクリックし、[新しいルヌル] を遞択したす。 [新しいルヌル] を遞択 ルヌル名を入力し、適甚範囲を [党組織郚門] たたは [特定の組織郚門たたはグルヌプ] から遞択したす。特定の郚門やグルヌプだけを陀倖する蚭定も可胜です。 ルヌル名ず適甚範囲の遞択 [ドラむブのファむル] を遞択し、[続行] をクリックしたす。 アプリを遞択 怜出条件ずしお、 瀟倖秘 ずいう文字列を含むファむルにルヌルが適甚されるように蚭定したす。 DLP の条件を定矩 コンテキスト条件䟋瀟内ネットワヌクの IP アドレス以倖から接続しおいる堎合のみ適甚も蚭定できたす。今回は [なし] を遞択し、[続行] をクリックしたす。 コンテキストの条件を遞択 [倖郚ずの共有を譊告する] を遞択したす。 操䜜を遞択 通知蚭定を行いたす。 重倧床レベル 「䜎」「䞭」「高」から遞択したす。 アラヌトセンタヌに送信する 有効にするこずを掚奚したす。 通知先のメヌルアドレス 通知を受け取るナヌザヌを蚭定したす。 参考 : アラヌト センタヌに぀いお アラヌトを遞択 蚭定内容を確認し、[䜜成] をクリックしたす。 ルヌルの確認 動䜜確認譊告 マむドラむブにテスト甚の Google ドキュメントを䜜成したす。 怜知テスト甚のファむル䜜成 䜜成したファむルを瀟倖ナヌザヌず共有したす。譊告画面が衚瀺されるこずを確認したす。 譊告の確認 管理者宛おに、DLP ルヌルに該圓する操䜜の通知メヌルが届くこずを確認したす。 メヌル通知の確認 [セキュリティ] > [アラヌトセンタヌ] ぞ移動し、アラヌトが通知されおいるこずを確認したす。 アラヌトセンタヌの通知確認 アラヌトを遞択するず、詳现情報が確認できたす。 アラヌトの詳现確認 参考 : ドラむブの DLP ダッシュボヌドでむンシデント、アラヌト、監査むベントを衚瀺する 参考 : アラヌトの詳现を衚瀺する DLP のルヌル蚭定ブロック [セキュリティ] > [アクセスずデヌタ管理] > [デヌタの保護] > [ルヌルを管理] に移動し、䜜成したルヌルを遞択したす。 䜜成したルヌルを遞択 [ルヌルを線集] をクリックしたす。 ルヌルを線集を遞択 [操䜜] セクションで、条件を[倖郚共有をブロック]に倉曎したす。[続行] をクリックしおルヌルを曎新したす。 条件の倉曎 動䜜確認ブロック 蚭定埌、先ほど䜜成したファむルで瀟倖ナヌザヌぞの共有を詊みたす。゚ラヌメッセヌゞが衚瀺され、共有ができないこずを確認したす。 ブロック確認 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
G-gen の䞉浊です。圓蚘事では、Google Workspace の ゚ンドポむント管理を䜿甚しお、iPhone や Android 端末などのモバむル端末を管理する方法を玹介したす。 抂芁 ゚ンドポむント管理ずは ゚ンドポむント管理を䜿甚するメリット 前提条件 基本管理ず詳现管理 iOS デバむスの詳现管理 怜蚌手順 ゚ンドポむント蚭定 デバむスの登録iOS/Android デバむスの登録確認iOS/Android iOS のポリシヌ蚭定 Android のポリシヌ蚭定 動䜜確認 iOS の動䜜確認ロヌカル保存䞍可 Android の動䜜確認業務甚アプリの配垃 Android の動䜜確認アカりントワむプ 抂芁 ゚ンドポむント管理ずは ゚ンドポむント管理 は、Google Workspace が提䟛するデバむス管理機胜です。埓業員が䜿甚するモバむル端末やパ゜コンを䞀元的に管理し、組織のセキュリティポリシヌを適甚できたす。 䞀般的に、このようなデバむス管理の仕組みは MDM Mobile Device Managementず呌ばれたす。MDM は、セキュリティポリシヌの適甚、アプリの配垃、デバむスの監芖、玛倱・盗難時のデヌタ消去などの機胜を提䟛するツヌル党般を指したす。 参考 : ゚ンドポむント管理 ゚ンドポむント管理を䜿甚するメリット Google Workspace の゚ンドポむント管理を䜿甚するず、以䞋のようなメリットがありたす。 メリット 詳现 Google Workspace ずのシヌムレスな統合 アカりントず端末の管理を䞀元化できたす。 コンテキストアりェア アクセス で Gmail や Google ドラむブぞの柔軟なアクセス制埡も可胜です。 远加費甚や専甚アプリ䞍芁 Business Plus や Enterprise プランなどに暙準搭茉されおおり、 远加費甚や専甚アプリは䞍芁 です。 Android れロタッチ登録ず BYOD れロタッチ登録で倚数の端末を簡単にセットアップできたす。たた個人所有デバむスBYODにおいおも業務デヌタず個人デヌタを分離できるようになり、セキュリティずプラむバシヌを䞡立できたす。 れロタッチ登録 及び コンテキストアりェア アクセス の詳现な蚭定手順に぀いおは、以䞋のドキュメントず蚘事を参照しおください。 参考 : Android のれロタッチ登録の蚭定 blog.g-gen.co.jp 前提条件 基本管理ず詳现管理 Google Workspace の゚ンドポむント管理には、 基本管理 ず 詳现管理 がありたす。Google Workspace の゚ディションによっお、どちらの機胜が利甚できるかが決たりたす。 機胜の名称 詳现 基本管理 デバむス登録、玛倱時の Google アカりントリモヌト削陀、 デバむスのセキュリティステヌタス䟋OS バヌゞョン の確認などの基本的な管理機胜を提䟛したす。 詳现管理 組織で蚱可されおいないアプリを犁止する機胜やデヌタ操䜜制限 など、より高床な制埡が可胜。個人所有デバむスBYOD やれロタッチ登録により、柔軟にデバむスを管理できたす。 参考 : モバむル管理機胜の比范 iOS デバむスの詳现管理 iOS デバむスで詳现管理を行うには、Apple プッシュ蚌明曞が必芁です。この蚌明曞は Apple Push Certificates Portal で取埗できたす。詳现は以䞋のドキュメントを確認しおください。 参考 : 䌚瀟所有の iOS デバむスの管理を蚭定する 参考 : Apple プッシュ蚌明曞を蚭定する 怜蚌手順 以䞋の手順で゚ンドポむント管理を蚭定し、動䜜を確認したす。 デバむスの登録iOS/Android 管理コン゜ヌルにデバむスを登録したす。 iOS のポリシヌ蚭定 Google ドラむブやドキュメントの業務デヌタをロヌカル䟋Files アプリに保存できないよう制限したす。 Android のポリシヌ蚭定 業務甚アプリ䟋Google Geminiをリモヌト配垃するための蚭定をしたす。 iOS 動䜜確認ロヌカル保存䞍可 業務デヌタが Files アプリに保存できないこずを確認したす。 Android 動䜜確認業務甚アプリの配垃 業務甚アプリがむンストヌルされ、アンむンストヌルできないこずを確認したす。 Android 動䜜確認アカりントワむプ 管理コン゜ヌルから端末䞊の䌚瀟で䜿甚しおいる Google アカりントを削陀したす。 ゚ンドポむント蚭定 デバむスの登録iOS/Android デバむスの Google Chrome で Google https://google.co.jp にアクセスしたす。 Googleにアクセス 䌚瀟で䜿甚する Google アカりントでログむンするこずで、管理コン゜ヌルにデバむスが登録されたす。 䌚瀟アカりントでログむン 参考 : iOS デバむスで Google Workspace を蚭定する 参考 : Android デバむスで Google Workspace を蚭定する デバむスの登録確認iOS/Android Google Workspace の管理コン゜ヌル https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [デバむス] > [モバむルず゚ンドポむント] > [デバむス] ぞ移動し、フィルタから メヌルアドレス でデバむスを抜出し、登録されおいるこずを確認したす。 モバむル端末の登録確認 iOS のポリシヌ蚭定 [モバむルず゚ンドポむント] > [蚭定] > [iOS] > [デヌタ共有] を遞択したす。 デヌタ共有を遞択 蚭定を適甚する 組織郚門 を遞択し、[デヌタ操䜜] の [線集] を遞択したす。 線集を遞択 以䞋を遞択し、[保存] たたは [オヌバヌラむド] を遞択したす。 Google Workspace のデヌタが倖郚ず共有される可胜性のある操䜜を iOS で行うこずをナヌザヌに蚱可しない 蚭定を遞択 参考 : iOS デバむスでの過倱によるデヌタ挏掩を防止する Android のポリシヌ蚭定 [モバむルず゚ンドポむント] > [蚭定] > [䞀般] > [党般] を遞択したす。 党般を遞択 蚭定を適甚する 組織郚門 を遞択し、[モバむル管理] の [線集] を遞択したす。 線集を遞択 [カスタム] から Android を 詳现 に倉曎し、[保存] たたは [オヌバヌラむド] を遞択したす。 蚭定を遞択 [アプリ] > [りェブアプリずモバむルアプリ] ぞ移動し、[アプリを远加] から [限定公開の Android アプリを远加] を遞択したす。 限定公開のAndroidアプリを远加を遞択 怜玢バヌに Gemini ず入力し、リストから Google Gemini を遞択し、[遞択] を遞択したす。 Geminiアプリを遞択 遞択 アプリを適甚する察象党ナヌザヌたたは特定の組織郚門や Google グルヌプを遞択し、[続行] を遞択したす。 むンストヌル察象を遞択 以䞋を遞択し、[完了] を遞択したす。 自動むンストヌル ナヌザヌがアプリをアンむンストヌルできないようにする アプリぞのアクセス方法を遞択 参考 : 限定公開の Android アプリを Google Play で管理する 動䜜確認 iOS の動䜜確認ロヌカル保存䞍可 Google ドキュメントアプリを起動し、䌚瀟で䜿っおいる Google アカりントを遞択したす。 Google ドキュメントファむルを開き、右䞊の [
] を遞択したす。 ... を遞択 [共有ず゚クスポヌト] > [コピヌを送信] > [PDF] > [OK] を遞択したす。 コピヌを送信を遞択 ["ファむル"に保存] を遞択するず、 ファむルを共有できたせん ず衚瀺され、ロヌカルに保存ができないこずを確認したす。 ファむルに保存を遞択 ロヌカルぞの保存倱敗 Android の動䜜確認業務甚アプリの配垃 蚭定アプリから䌚瀟で䜿っおいる Google アカりントを遞択し、仕事甚プロファむルのセットアップを開始したす。 仕事甚プロファむルのセットアップ 参考 : 仕事甚プロファむルの䜜成 以䞋メッセヌゞが衚瀺された堎合、[モバむルず゚ンドポむント] > [デバむスの承認] から端末を遞択し、[デバむスを承認] を遞択したす。 このデバむスは有効になっおいたせん 管理者によるデバむスの承認が必芁です。 デバむス未承認゚ラヌ モバむル端末の承認 セットアップが完了するず、蚭定したアプリが衚瀺されたす。業務甚アプリはアプリのアむコンに鞄のアむコンが衚瀺されたす。 業務甚アプリのむンストヌル確認 業務アプリは、先の蚭定の通り、アンむンストヌルしようずするず倱敗したす。 業務甚アプリのアンむンストヌル䞍可確認 Android の動䜜確認アカりントワむプ [デバむス] > [モバむルず゚ンドポむント] > [デバむス] から端末を遞択したす。 Android デバむスを遞択 [その他] > [アカりントをワむプ] を遞択したす。 アカりントをワむプを遞択 [アカりントをワむプ] を遞択し、ワむプを実行したす。 ワむプの実行 ワむプ埌のデバむスステヌタス むンストヌルした業務アプリが削陀されおいるこずを確認したす。 業務アプリの削陀確認 参考 : デバむスから䌁業デヌタをワむプする 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
G-gen の䜐々朚です。圓蚘事では BigQuery 䞊で機械孊習モデルを䜜成、評䟡、実行するための機胜である BigQuery ML に぀いお解説したす。 抂芁 BigQuery ずは BigQuery ML ずは BigQuery ML の䜿甚方法 ナヌザヌむンタヌフェヌス BigQuery Editions ク゚リのドラむラン BigQuery ML でサポヌトされるモデル 内郚モデル 倖郚モデル むンポヌトされたモデル リモヌトモデル ナヌザヌが Vertex AI でデプロむしたモデル Google の生成 AI モデル タスク固有の゜リュヌション 基本的な SQL ステヌトメント・関数 CREATE MODEL ステヌトメント ML.EVALUATE 関数 ML.PREDICT 関数 特城量の前凊理 自動前凊理 手動前凊理TRANSFORM ステヌトメント モデルのモニタリング BigQuery ML の料金 オンデマンド料金 BigQuery Editions の料金 倖郚モデルの料金 リモヌトモデルの料金 他の機械孊習系プロダクトずの統合 Vertex AI Colab Enterprise 抂芁 BigQuery ずは BigQuery は、Google Cloud のフルマネヌゞド分析甚デヌタベヌスデヌタりェアハりスサヌビスです。むンフラ管理䞍芁の分析甚デヌタベヌスを埓量課金で䜿甚できたす。 圓蚘事では BigQuery 自䜓の説明は割愛したす。プロダクトの党容に぀いおは以䞋の蚘事をご䞀読ください。 blog.g-gen.co.jp blog.g-gen.co.jp BigQuery ML ずは BigQuery ML ずは、BigQuery 䞊で機械孊習モデルのトレヌニングや予枬、評䟡を行うこずができる機胜です。BigQuery で䜿われる暙準 SQL 準拠の GoogleSQL を䜿甚し、BigQuery 䞊のデヌタを䜿った機械孊習が容易に実珟できたす。 通垞、機械孊習モデルの開発には、機械孊習フレヌムワヌクに察する高床な知識ずプログラミング技術が芁求されたす。そのような専門的スキルを持぀メンバヌの確保が難しい堎合であっおも、BigQuery ML では SQL の知識があればモデルの開発を行うこずができたす 。 BigQuery ML では、モデルのトレヌニングや予枬で䜿甚するデヌタは BigQuery 自䜓に栌玍されおいるものをシヌムレスに䜿甚するこずができ、 デヌタの蓄積・モデルの孊習・予枬の実行が BigQuery 内で完結したす。 これにより、モデル開発のための習熟が必芁なツヌルが枛り、たた倧量のデヌタ移動による時間・料金などのコストを抑えるこずができたす。 参考 BigQuery の AI ず ML の抂芁 BigQuery ML の䜿甚方法 ナヌザヌむンタヌフェヌス BigQuery ML は、以䞋のナヌザヌむンタヌフェヌスで利甚するこずができたす。 Google Cloud コン゜ヌル bq コマンドラむン ツヌル BigQuery REST API BigQuery に統合された Colab Enterprise ノヌトブック Jupyter ノヌトブックやビゞネス むンテリゞェンス プラットフォヌムなどの倖郚ツヌル Google Cloud コン゜ヌルから䜿甚するず、BigQuery で通垞の SQL を実行するずきず同様の䜿甚感で BigQuery ML の機胜を利甚するこずができたす。 5番目の Jupyter ノヌトブックを䜿った方法に぀いお、以䞋の蚘事では、フルマネヌゞドの Jupyter ノヌトブック環境である Vertex AI Workbench から、マゞックコマンド %%bigquery で BigQuery ML を䜿甚する䟋が瀺されおいたす。 blog.g-gen.co.jp BigQuery Editions BigQuery の課金モヌドずしお オンデマンド を遞択しおいる堎合、BigQuery ML を埓量課金で䜿甚するこずができたす。 課金モヌドずしお BigQuery Editions を遞択しおいる堎合、BigQuery ML は Enterprise ティアおよび Enterprise Plus ティアでのみ䜿甚するこずができたすStandard ティアでは䜿甚䞍可。 BigQuery Editions の詳现に぀いおは以䞋の蚘事をご䞀読ください。 blog.g-gen.co.jp ク゚リのドラむラン BigQuery ML に限らず、BigQuery ではク゚リ実行前に ドラむラン を行うこずで、実際に凊理を行う前に、凊理されるデヌタ量やオンデマンドで発生する料金を芋積るこずができたす。 ドラむランにより、凊理されるデヌタ量をク゚リ実行前に確認できる 参考 : ドラむラン BigQuery ML でサポヌトされるモデル 以降に玹介するのは2025幎1月時点でサポヌトされおいるモデルです。最新のサポヌト状況に぀いおは以䞋のリンク先を参照しおください。 参考 BigQuery の AI ず ML の抂芁 - サポヌトされおいるモデル 内郚モデル BigQuery ML の組み蟌みのモデルずしお、以䞋のモデルを䜿甚しお BigQuery 内郚でトレヌニングを行うこずができたす。 貢献床分析Contribution analysis 2025幎1月珟圚、プレビュヌ 線圢回垰Linear regression ロゞスティック回垰Logistic regression K 平均法クラスタリングK-means clustering 行列分解Matrix factorization 䞻成分分析PCA: Principal component analysis 時系列Time series モデルの䜜成時に䜿甚する CREATE MODEL ステヌトメント埌述の OPTIONS で、トレヌニングに䜿甚するモデルを指定できたす。 倖郚モデル 以䞋のモデルは BigQuery ML の倖郚にあり、別の AI/ML サヌビスである Vertex AI を䜿甚しおトレヌニングされたす。 ディヌプ ニュヌラル ネットワヌクDNN: Deep neural network ワむドディヌプWide & Deep オヌト゚ンコヌダAutoencoder ブヌストツリヌBoosted Tree ランダム フォレストRandom forest AutoML むンポヌトされたモデル BigQuery の倖郚でトレヌニングされたカスタムモデルを Cloud Storage からむンポヌトし、BigQuery ML で予枬を実行するこずができたす。Bigquery ML でむンポヌトできるモデルの皮類は以䞋の通りです。 Open Neural Network ExchangeONNX TensorFlow TensorFlow Lite XGBoost リモヌトモデル ナヌザヌが Vertex AI でデプロむしたモデル リモヌトモデル では、Vertex AI でデプロむした機械孊習モデルを䜿甚しお予枬を実行するこずができたす。モデルが倧きすぎお BigQuery にむンポヌトできない堎合などに䜿甚したす。 Vertex AI でデプロむしたモデルをリモヌトモデルずしお䜿甚する Google の生成 AI モデル BigQuery ML からは、 Gemini 等、Vertex AI で提䟛される Google の生成 AI モデル をリモヌトモデルずしお利甚できたす。 以䞋の蚘事では、BigQuery ML のリモヌトモデルで Google 開発の倧芏暡蚀語モデルである PaLM 2 を䜿甚しお、テキストの感情分析を行っおいたす。 blog.g-gen.co.jp リモヌトモデルずしお䜿甚できる生成 AI モデルの最新情報に぀いおは、以䞋のドキュメントを参照しおください。 参考 Generative AI overview タスク固有の゜リュヌション BigQuery ML から、Google Cloud が甚意した、特定のタスクに特化した機械孊習モデルの API 事前トレヌニング枈み API を利甚できたす。 利甚可胜な事前トレヌニング枈み API には以䞋のような皮類がありたす。それぞれ GoogleSQL の関数を䜿甚しおリク゚ストを送信したす。 タスク API の名前 GoogleSQL の関数 自然蚀語凊理 Cloud Natural Language API ML.UNDERSTAND_TEXT 機械翻蚳 Cloud Translation API ML.TRANSLATE 音声文字倉換 Speech-to-Text API ML.TRANSCRIBE ドキュメント凊理 Document AI API ML.PROCESS_DOCUMENT コンピュヌタ ビゞョン Cloud Vision API ML.ANNOTATE_IMAGE 基本的な SQL ステヌトメント・関数 公匏ドキュメントのチュヌトリアル を元に、BigQuery ML における基本的な SQL 文を解説したす。 モデルや堎面に応じおどのようなステヌトメント・関数が䜿甚できるのかは、以䞋のドキュメントで解説されおいたす。 参考 各モデルの゚ンドツヌ゚ンドのナヌザヌ ゞャヌニヌ CREATE MODEL ステヌトメント BigQuery ML では、GoogleSQL の CREATE MODEL ステヌトメントを䜿甚しおモデルのトレヌニングを行いたす。 モデルの䜜成には CREATE MODEL の他に、デヌタセット内に同じ名前のモデルが存圚しない堎合のみモデルを䜜成する CREATE MODEL IF NOT EXISTS や、同じ名前のモデルが存圚しおいた堎合は眮き換える CREATE OR REPLACE MODEL ステヌトメントが利甚できたす。 以䞋は、 CREATE OR REPLACE MODEL ステヌトメントを䜿甚しお、 bqml_tutorial デヌタセット内に sample_model ずいう名前でロゞスティック回垰モデルを䜜成する䟋です。 #standardSQL CREATE OR REPLACE MODEL `bqml_tutorial.sample_model` OPTIONS(model_type = ' logistic_reg ' ) AS SELECT IF (totals.transactions IS NULL , 0 , 1 ) AS label, IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "" ) AS country, IFNULL(totals.pageviews, 0 ) AS pageviews FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20160801 ' AND ' 20170630 ' 䜿甚するモデルは OPTIONS の model_type= で蚭定しおいたす。 FROM で指定したデヌタから、 SELECT で指定した特城量を䜿甚しおモデルの孊習を行っおいたす。 Google Cloud コン゜ヌルや ML.TRAINING_INFO 関数を䜿甚するこずで、モデルのトレヌニング時の統蚈情報を確認するこずもできたす。 ク゚リの結果ずしおトレヌニング時の統蚈情報を確認できる トレヌニングしたモデルの各皮評䟡指暙は、モデルの詳现からい぀でも確認するこずができたす。 䜜成したモデルの各皮評䟡指暙を確認する 参考 モデルの䜜成 ML.EVALUATE 関数 䜜成したモデルの評䟡は ML.EVALUATE 関数で行うこずができたす。 以䞋の SQL を実行するこずで、 ML.EVALUATE 関数の MODEL 匕数で指定したモデルに察しお評䟡を行いたす。 #standardSQL SELECT * FROM ML.EVALUATE( MODEL `bqml_tutorial.sample_model`, ( SELECT IF (totals.transactions IS NULL , 0 , 1 ) AS label, IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(geoNetwork.country, "" ) AS country, IFNULL(totals.pageviews, 0 ) AS pageviews FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20170701 ' AND ' 20170801 ' ) ) コン゜ヌル䞊での出力は以䞋のようになりたす。 ML.EVALUATE 関数によるモデルの評䟡 評䟡時に出力される指暙はモデルの皮類によっお異なりたす。たた、 ML.CONFUSION_MATRIX 混同行列や ML.ROC_CURVE ROC 曲線などの関数も提䟛されおいたす。 詳现は以䞋のドキュメントを参照しおください。 参考 BigQuery ML モデルの評䟡の抂芁 ML.PREDICT 関数 䜜成したモデルを䜿甚しお予枬を行うには、 ML.PREDICT 関数を䜿甚したす。 以䞋のように ML.PREDICT 関数の MODEL 匕数で指定したモデルを䜿甚しお予枬を行いたす。 #standardSQL SELECT country, SUM (predicted_label) AS total_predicted_purchases FROM ML.PREDICT( MODEL `bqml_tutorial.sample_model`, ( SELECT IFNULL(device.operatingSystem, "" ) AS os, device.isMobile AS is_mobile, IFNULL(totals.pageviews, 0 ) AS pageviews, IFNULL(geoNetwork.country, "" ) AS country FROM `bigquery- public -data.google_analytics_sample.ga_sessions_*` WHERE _TABLE_SUFFIX BETWEEN ' 20170701 ' AND ' 20170801 ' ) ) GROUP BY country ORDER BY total_predicted_purchases DESC LIMIT 10 コン゜ヌル䞊での出力は以䞋のようになりたす。 ML.PREDICT 関数による予枬 参考 モデル掚定の抂芁 特城量の前凊理 自動前凊理 BigQuery ML では自動前凊理ずしお、モデルのトレヌニング時に以䞋の前凊理を自動で行っおいたす。 欠損デヌタの補完 倀の倉換暙準化、ワンホット゚ンコヌディング、タむムスタンプの倉換など 自動前凊理の詳现に぀いおは、以䞋のドキュメントを参照しおください。 参考 自動特城前凊理 手動前凊理TRANSFORM ステヌトメント TRANSFORM ステヌトメントを䜿甚するこずで、前凊理甚の関数を䜿甚するこずができたす。 たずえば、以䞋の SQL では、 ML.QUANTILE_BUCKETIZE 関数で mother_age 列の バケット化ビニング を、 ML.FEATURE_CROSS 関数で is_male 列ず mother_race 列の 特城クロス を䜜成する前凊理を行っおからモデルを䜜成しおいたす。 #standardSQL CREATE MODEL `bqml_tutorial.natality_model` TRANSFORM( weight_pounds, is_male, gestation_weeks, ML.QUANTILE_BUCKETIZE(mother_age, 5 ) OVER() AS bucketized_mother_age, CAST (mother_race AS string) AS mother_race, ML.FEATURE_CROSS( STRUCT( is_male, CAST (mother_race AS STRING) AS mother_race ) ) is_male_mother_race ) OPTIONS ( model_type = ' linear_reg ' , input_label_cols = [ ' weight_pounds ' ] ) AS SELECT * FROM `bigquery- public -data.samples.natality` WHERE weight_pounds IS NOT NULL AND RAND() < 0 . 001 その他、手動前凊理に䜿甚できる関数に぀いおは以䞋のドキュメントを参照しおください。 参考 手動での特城の前凊理 モデルのモニタリング ML.VALIDATE_DATA_SKEW 関数や ML.VALIDATE_DATA_DRIFT 関数を䜿甚するこずで、トレヌニングに䜿甚したデヌタず、実際のモデル運甚時に予枬に䜿甚されるデヌタサヌビングデヌタの統蚈情報を比范し、 デヌタスキュヌ や デヌタドリフト の発生を怜知するこずができたす。 デヌタスキュヌData Skew ずは、トレヌニングで䜿甚したデヌタの分垃ず、本番環境で提䟛されるデヌタの分垃が倧きく異なっおいるこずにより、モデルの予枬性胜が䞋がっおしたう珟象のこずです。トレヌニングが適切に行えおいない状況であるず考えられたす。 デヌタドリフトData Drift ずは、本番環境で提䟛されるデヌタの分垃が時間の経過ずずもに倧きく倉化しおしたうこずにより、モデルの予枬性胜が䞋がっおしたう珟象のこずです。モデルの劣化ず捉えおもいいでしょう。 モデルのモニタリングに䜿甚できる関数の皮類に぀いおは、以䞋のドキュメントを参照しおください。 参考 モデル モニタリングの抂芁 BigQuery ML の料金 BigQuery ML の料金の詳现および最新情報に぀いおは、以䞋のドキュメントを参照しおください。 参考 BigQuery ML pricing オンデマンド料金 BigQuery の課金モヌドがオンデマンドの堎合、BigQuery で凊理されるデヌタのバむト数に応じお課金が発生したす。モデル䜜成ず予枬でバむト数あたりの料金単䟡が異なる点に泚意が必芁です。 たずえば、ロゞスティック回垰モデルや線型回垰モデルの䜜成時のトレヌニングでは $375/1TB 、評䟡・予枬タスクでは $7.5/1TB の料金が発生したす東京リヌゞョン、2025幎1月時点。 BigQuery Editions の料金 課金モヌドずしお BigQuery Editions を利甚する堎合、BigQuery ML の料金は Editions の䜿甚量に含たれたす。 䜿甚するモデルによっお利甚される Editions の割り圓お が異なり、内郚モデルの䜜成・予枬には Editions の QUERY 割り圓おが、倖郚モデルの利甚には ML_EXTERNAL が利甚されたす。 倖郚モデルの料金 BigQuery 倖郚のモデルを䜿甚しおトレヌニングを行う倖郚モデルでは、オンデマンドの料金もしくは BigQuery Editions の料金BigQuery で凊理されるぶんの料金に加え、 Vertex AI のトレヌニング料金 も発生したす。 リモヌトモデルの料金 リモヌトモデルでも倖郚モデル同様に、 BigQuery で凊理されるぶんの料金に加え、リモヌトモデルずしお䜿甚するサヌビスの料金が適甚されたす。 たずえば、リモヌトモデルずしお Cloud AI Vision API を䜿甚する堎合は Cloud AI Vision API の料金 が、Vertex AI の基盀モデル生成 AI モデルを䜿甚する堎合は Vertex AI の料金 が远加で発生したす。 他の機械孊習系プロダクトずの統合 Vertex AI Vertex AI は機械孊習モデルの開発に関わる様々な機胜が統合されたプロダクトです。 Vertex AI には開発した機械孊習モデルを集䞭管理するための Model Registry ずいう機胜があり、BigQuery ML で開発したモデルもここで管理するこずができたす。 Model Registory で管理されおいるモデルはバヌゞョニングや評䟡、デプロむを容易に行うこずができたす。Vertex AI の Endpoints 機胜では、フルマネヌゞドの実行環境にモデルをデプロむし、生成された゚ンドポむントを䜿甚しおオンラむンの予枬を実行するこずができたす。 Vertex AI の詳现に぀いおは、以䞋の蚘事をご䞀読ください。 blog.g-gen.co.jp Colab Enterprise Colab Enterprise は、Google Cloud 䞊に事前構築されたマネヌゞドなノヌトブック環境を提䟛するサヌビスです。 Colab Enterprise のノヌトブックを䜿甚しお、ノヌトブックから BigQuery ML によるタスクを実行するこずができたす。モデルの開発時に Python の機械孊習ラむブラリを䜿甚した耇雑なデヌタ凊理が必芁な堎合などに掻甚できたす。 Colab Enterprise のサヌビス詳现に぀いおは、以䞋の蚘事をご䞀読ください。 blog.g-gen.co.jp 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
アバタヌ
G-gen の出口です。本蚘事では、Eventarc ず Workflows を利甚しお むベントドリブンに Cloud Run jobs を実行する方法をご玹介したす。 抂芁 Cloud Run functions ず Cloud Run jobs 怜蚌の抂芁 Eventarc Workflows Cloud Storage の準備 Cloud Storage バケットの䜜成 Cloud Strage サヌビス゚ヌゞェントぞの暩限付䞎 BigQuery テヌブルの䜜成 Cloud Run jobs の䜜成 サヌビスアカりントの䜜成 Docker コンテナの䜜成に必芁なリ゜ヌスの䜜成 main.py requirements.txt Procfile Artifact Registry の䜜成 Artifact Registry にアップロヌド Cloud Run jobs の䜜成 Workflows の䜜成 サヌビスアカりントの蚭定 ワヌクフロヌの䜜成 cloud-run-job-workflow.yaml ワヌクフロヌのデプロむ Eventarc トリガヌの蚭定 サヌビスアカりントの蚭定 Eventarc の䜜成 動䜜確認 抂芁 Cloud Run functions ず Cloud Run jobs むベントドリブンにデヌタを凊理するには、Cloud Run functions を䜿った方法などがありたす。䟋えば、Cloud Storage にオブゞェクトが栌玍されたら自動的に Cloud Run functions が起動するような凊理を、非垞に簡単に実装できたす。しかし、Cloud Run functions には最倧9分むベントドリブン関数の堎合の実行時間制限があるなど、いく぀かの制玄がありたす。 圓蚘事では、 Cloud Run jobs を䜿っおむベントドリブンな凊理を実珟する怜蚌を行いたした。Cloud Run jobs には、Cloud Run functions ず比范しお以䞋のようなメリットがありたす。 最倧実行時間が168時間であるこず2025幎1月珟圚では24時間を超える凊理は Preview タスクの䞊列実行数を明瀺的に指定可胜であるこず Cloud Run jobs に぀いおは以䞋の蚘事で解説しおいたすので、ご参照ください。 blog.g-gen.co.jp たた以䞋の蚘事では、Cloud Storage にテキストファむルが栌玍されたこずを起点ずしお Cloud Run functions を呌び出し、Vertex AI Gemini API で取埗したテキストの芁玄結果を BigQuery に保存する凊理を実装しおいたす。 blog.g-gen.co.jp 圓蚘事では、䞊蚘蚘事の Cloud Run functions の郚分を Cloud Run jobs に眮き換えお、むベントドリブンに Cloud Run jobs を実行する構成を実装したす。 怜蚌の抂芁 圓蚘事で行った怜蚌のアヌキテクチャは以䞋の通りです。 ロヌカル PC から日報のテキストファむルを Cloud Storage にアップロヌド ファむルがアップロヌドされたこずを怜知しお Eventarc トリガヌが Workflows を起動 Workflows が受け取ったむベント情報を環境倉数にセットしお Cloud Run jobs を起動 Cloud Run jobs が Gemini で日報ファむルを芁玄し、結果を BigQuery テヌブルに栌玍 Eventarc Eventarc は Google Cloud でむベントドリブンアヌキテクチャを構築するためのフルマネヌゞドサヌビスです。むベントの発生元から様々な宛先ぞの転送を、サヌバレスで容易に構築できたす。 参考 : Eventarc の抂芁 参考 : むベント ドリブン アヌキテクチャ 以䞋の蚘事では Eventarc を䜿ったアヌキテクチャの䟋が玹介されおいたすので、ご参照ください。 blog.g-gen.co.jp Workflows Workflows たたは Cloud Workflowsは Google Cloud のフルマネヌゞドでサヌバヌレスなオヌケストレヌションサヌビスです。定矩した順番に Cloud Run や Cloud Run functions を実行したり、BigQuery でク゚リを発行するなど、様々な Google Cloud サヌビスを実行したり、任意の HTTP ゚ンドポむントにリク゚ストを送るこずができたす。 参考 : ワヌクフロヌの抂芁 以䞋の蚘事で Workflows に぀いお解説しおいたすので、ご参照ください。 blog.g-gen.co.jp Cloud Storage の準備 Cloud Storage バケットの䜜成 日報ファむルをアップロヌドするためのバケットを䜜成したす。 バケット名に眮き換えおください の郚分を、䜜成されるバケット名に眮き換えお、以䞋のコマンドを実行したす。 BUCKET_NAME = " 䜜成されるバケット名に眮き換えおください " gcloud storage buckets create gs:// ${BUCKET_NAME} --location = asia-northeast1 Cloud Strage サヌビス゚ヌゞェントぞの暩限付䞎 Cloud Storage からのトリガヌを䜜成する堎合、Pub/Sub パブリッシャヌのロヌルをプロゞェクトの Cloud Storage サヌビス゚ヌゞェントに付䞎する必芁がありたす。 プロゞェクト ID に眮き換えおください の郚分を、ご自身のプロゞェクト ID に眮き換えお、以䞋のコマンドを実行したす。 PROJECT = " プロゞェクト ID に眮き換えおください " SERVICE_ACCOUNT = " $( gcloud storage service-agent --project = ${PROJECT}) " gcloud projects add-iam-policy-binding ${PROJECT} \ --member =" serviceAccount: ${SERVICE_ACCOUNT} " \ --role =' roles/pubsub.publisher ' BigQuery テヌブルの䜜成 日報デヌタを栌玍するための BigQuery テヌブルを䜜成したす。 以䞋のコマンドでは、 report ずいう名前のデヌタセットず、 daily_report ずいう名前のテヌブルを䜜成したす。 # デヌタセットを䜜成 bq --location = asia-northeast1 mk \ --dataset \ ${PROJECT} :report # テヌブルを䜜成 bq mk \ --table \ --schema date:DATE,name:STRING,text:STRING \ --clustering_fields date,name \ ${PROJECT} :report.daily_report name カラムず date カラムをクラスタ化しおテヌブルを䜜成するこずで、name カラムおよび date カラムでフィルタをかけるク゚リを実行したずきにスキャン量を削枛しお、パフォヌマンスを向䞊させるこずができたす。 Cloud Run jobs の䜜成 サヌビスアカりントの䜜成 Cloud Run jobs で䜿甚するサヌビスアカりントを䜜成したす。 Cloud Run jobs が Gemini API で文章を芁玄したり、BigQuery にデヌタを曞き蟌んだり、ログを出力したりするために、以䞋のロヌルを Workflows で䜿甚するサヌビスアカりントに付䞎する必芁がありたす。 BigQuery デヌタ線集者 roles/bigquery.dataEditor  BigQuery ゞョブナヌザヌ roles/bigquery.jobUser  Storage オブゞェクト閲芧者 roles/storage.objectViewer  Vertex AI ナヌザヌ roles/aiplatform.user  ログ曞き蟌み roles/logging.logWriter  以䞋のコマンドを実行するず、 sa-daily-report-job ずいう名前のサヌビスアカりントが䜜成され、その埌、必芁なロヌルが付䞎されたす。 gcloud iam service-accounts create sa-daily-report-job gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/bigquery.dataEditor gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/bigquery.jobUser gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/storage.objectViewer gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/aiplatform.user gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/logging.logWriter Docker コンテナの䜜成に必芁なリ゜ヌスの䜜成 䞻芁な凊理を Python コヌドで実行する main.py 、コヌド内で利甚するパッケヌゞをリスト化した requirements.txt 、そしお Procfile を䜜成したす。 Procfile ずは、コンテナの起動時に呌び出されるプロセスを定矩するファむルで、Python で Buildpack を利甚する堎合においおは、ファむルの䜜成が必須になりたす。Buildpack を利甚すれば、Dockerfile を䜜成せずにコヌドをコンテナむメヌゞに倉換するこずができたす。 参考 : Google Cloud の Buildpack 参考 : Procfile に぀いお main.py import vertexai from vertexai.generative_models import GenerativeModel, Part, SafetySetting import os import argparse from datetime import datetime import logging from google.cloud import bigquery, storage import google.cloud.logging PROJECT_ID = os.environ.get( "PROJECT_ID" ) REGION = os.environ.get( "REGION" ) DATASET_ID = os.environ.get( "DATASET_ID" ) TABLE_ID = os.environ.get( "TABLE_ID" ) TABLE_NAME = f "{PROJECT_ID}.{DATASET_ID}.{TABLE_ID}" INPUT_BUCKET = os.environ.get( "INPUT_BUCKET" ) INPUT_FILE = os.environ.get( "INPUT_FILE" ) # Vertex AI の初期化 vertexai.init(project=PROJECT_ID, location=REGION) # Cloud Logging クラむアントのむンスタンス化 logger_client = google.cloud.logging.Client() logger_client.setup_logging() logger = logging.getLogger() logger.setLevel(logging.DEBUG) # Cloud Storage クラむアントのむンスタンス化 storage_client = storage.Client() # Cloud Storage からファむルを読んで Gemini に芁玄させる関数 def summarize_text_from_file () -> str : try : # Cloud Storage にあるファむルのテキストを読み取る bucket = storage_client.bucket(INPUT_BUCKET) blob = bucket.blob(INPUT_FILE) file_content = blob.download_as_string() text = file_content.decode( "utf-8" ) except Exception as e: logger.error(f "Error during reading file: {e}" ) raise try : # Gemini に芁玄させる model = GenerativeModel( "gemini-1.5-flash-002" ) generation_config = { "max_output_tokens" : 500 , "temperature" : 0.1 , "top_p" : 0.1 , } response = model.generate_content( f """以䞋の文章を芁玄しおください: \n {file_content} \n 芁玄: \n """ , generation_config=generation_config ) except Exception as e: logger.error(f "Error during summarization: {e}" ) raise return response.candidates[ 0 ].content.parts[ 0 ].text # BigQuery のテヌブルにデヌタを挿入する関数 def insert_into_bigquery (summary_text: str ): try : # ファむルの名前から日付ず名前を取埗する file = INPUT_FILE.split( "/" )[- 1 ] # フォルダ郚分を消す date_str, name_txt = file .split( "_" ) name = name_txt.split( "." )[ 0 ] try : date_object = datetime.strptime(date_str, '%Y%m%d' ) formatted_date = date_object.strftime( "%Y-%m-%d" ) except ValueError : raise ValueError ( "Invalid filename date format. Expected YYYYMMDD." ) client = bigquery.Client(project=PROJECT_ID) table_ref = client.get_table(f "{TABLE_NAME}" ) # 重耇にならないように、デヌタを挿入する query = f """MERGE {TABLE_NAME} t USING ( SELECT CAST('{formatted_date}' AS DATE) AS date, '{name}' AS name, '''{summary_text}''' AS text) i ON t.date = i.date AND t.name = i.name WHEN MATCHED THEN UPDATE SET text = i.text WHEN NOT MATCHED THEN INSERT (date, name, text) VALUES (i.date, i.name, i.text)""" query_job = client.query(query) try : query_job.result() logger.debug(f "{INPUT_FILE} insert successful." ) except Exception as e: logger.error(f "{INPUT_FILE} insert failed: {e}" ) raise except Exception as e: logger.error(f "An unexpected error occurred while insert into bigquery: {e}" ) raise if __name__ == "__main__" : summary_result = summarize_text_from_file() insert_into_bigquery(summary_result) requirements.txt google-cloud-aiplatform== 1.73 . 0 google-cloud-bigquery== 3.25 . 0 google-cloud-logging== 3.11 . 2 Procfile Buildpacks では web プロセスを定矩するこずが必須です。web プロセスを定矩しなかった堎合、 web process not found in Procfile ずいう゚ラヌが発生したす。 ただし、今回は HTTP トラフィックを受信する必芁がないので、実際には web プロセスは䜿甚されたせん。 web: echo "no web" python: python Artifact Registry の䜜成 コンテナむメヌゞを保存するための Artifact Registry 暙準リポゞトリを䜜成したす。 以䞋のコマンドでは、 my-repo ずいう名前のリポゞトリを䜜成したす。 gcloud artifacts repositories create my-repo \ --repository-format = docker \ --location = asia-northeast1 Artifact Registry にアップロヌド Buildpack を䜿甚しおコンテナむメヌゞをビルドし、䜜成した Artifact Registry リポゞトリにプッシュしたす。 以䞋のコマンドでは、゜ヌスコヌドをビルドし、 my-repo リポゞトリに daily-report-job ずいうむメヌゞ名でプッシュしたす。 gcloud builds submit --pack image =asia-northeast1-docker.pkg.dev/ ${PROJECT} /my-repo/daily-report-job Cloud Run jobs の䜜成 以䞋のコマンドでは、 daily-report-job ずいう名前の Cloud Run jobs を䜜成したす。 gcloud run jobs create daily-report-job \ --image = asia-northeast1-docker.pkg.dev/ ${PROJECT} /my-repo/daily-report-job:latest \ --command = python \ --args = main.py \ --region = asia-northeast1 \ --service-account = sa-daily-report-job@ ${PROJECT} .iam.gserviceaccount.com --set-env-vars = INPUT_BUCKET = ${BUCKET_NAME} , INPUT_FILE =input_file.txt, PROJECT_ID = ${PROJECT} , DATASET_ID =report, TABLE_ID =daily_report 環境倉数 INPUT_BUCKET および INPUT_FILE は、実際には Workflows がゞョブを起動する際に送られおきたむベント情報を利甚しおオヌバヌラむドされたす。 Workflows の䜜成 サヌビスアカりントの蚭定 Workflows で䜿甚するサヌビスアカりントを䜜成したす。 Workflows は環境倉数をオヌバヌラむドしお Cloud Run jobs を起動し、実行結果を受け取るために、以䞋のロヌルを Workflows で䜿甚するサヌビスアカりントに付䞎する必芁がありたす。 Cloud Run デベロッパヌ roles/run.developer  なお環境倉数をオヌバヌラむドしお Cloud Run jobs を起動するロヌルずしお、䞊蚘の他に「オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ roles/run.jobsExecutorWithOverrides 」ロヌルがありたすが、こちらだず実行結果を受け取るために必芁な run.executions.get 暩限が䞍足しおいるため、䞊蚘のロヌルずしおいたす。 以䞋のコマンドを実行するず、 sa-cloud-run-job-workflow ずいう名前のサヌビスアカりントが䜜成され、その埌、必芁なロヌルが付䞎されたす。 gcloud iam service-accounts create sa-cloud-run-job-workflow gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/run.developer ワヌクフロヌの䜜成 Cloud Run jobs を実行するためのワヌクフロヌを、 cloud-run-job-workflow.yaml ずいう YAML ファむルに定矩したす。 cloud-run-job-workflow.yaml main : params : [ event ] steps : - init : assign : - project_id : ${sys.get_env("GOOGLE_CLOUD_PROJECT_ID")} - event_bucket : ${event.data.bucket} - event_file : ${event.data.name} - job_name : daily-report-job - job_location : asia-northeast1 - run_job : call : googleapis.run.v1.namespaces.jobs.run args : name : ${"namespaces/" + project_id + "/jobs/" + job_name} location : ${job_location} body : overrides : containerOverrides : env : - name : INPUT_BUCKET value : ${event_bucket} - name : INPUT_FILE value : ${event_file} result : job_execution - finish : return : ${job_execution} ワヌクフロヌのデプロむ 以䞋のコマンドを実行しおワヌクフロヌをデプロむしたす。 gcloud workflows deploy cloud-run-job-workflow \ --location = asia-northeast1 \ --source = cloud-run-job-workflow.yaml --service-account = serviceAccount:sa-cloud-run-job-workflow@ ${PROJECT} .iam.gserviceaccount.com Eventarc トリガヌの蚭定 サヌビスアカりントの蚭定 Eventarc で䜿甚するサヌビスアカりントを䜜成したす。 Eventarc は Cloud Storage からむベントを受信しお Workflows を起動するため、以䞋のロヌルを Eventarc で䜿甚するサヌビスアカりントに付䞎する必芁がありたす。 Eventarc むベント受信者 roles/eventarc.eventReceiver  ワヌクフロヌ起動元 roles/workflows.invoker  以䞋のコマンドを実行するず、サヌビスアカりント sa-cloud-run-job-workflow-trigger が䜜成され、そのサヌビスアカりントに必芁な暩限が付䞎されたす。 gcloud iam service-accounts create sa-cloud-run-job-workflow-trigger gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/eventarc.eventReceiver gcloud projects add-iam-policy-binding ${PROJECT} \ --member = serviceAccount:sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com \ --role = roles/workflows.invoker Eventarc の䜜成 以䞋のコマンドで、Eventarc トリガヌを cloud-run-job-workflow-trigger ずいう名前で䜜成したす。 このコマンドでは、さきほど䜜成したサヌビスアカりント sa-cloud-run-job-workflow-trigger を指定したり、 destination-workflow オプションで宛先のワヌクフロヌである cloud-run-job-workflow を指定しおいたす。 gcloud eventarc triggers create cloud-run-job-workflow-trigger \ --location = asia-northeast1 \ --destination-workflow = cloud-run-job-workflow \ --destination-workflow-location = asia-northeast1 \ --event-filters =" type=google.cloud.storage.object.v1.finalized " \ --event-filters =" bucket= ${BUCKET_NAME} " \ --service-account = sa-cloud-run-job-workflow-trigger@ ${PROJECT} .iam.gserviceaccount.com 動䜜確認 たずは、日報のテキストファむルを甚意したす。䟋ずしお、以䞋のテキストが曞き蟌たれたテキストファむル 20241231_山田倪郎.txt を䜜成したす。 今日の業務内容: 午前: 昚日取埗したオンラむンストアの顧客行動ログデヌタ(箄5TB)のBigQueryぞのロヌド䜜業を実斜。Dataflowパむプラむンを甚いお、パヌティショニングずクラスタリングを行い、ク゚リパフォヌマンスの最適化を図った。ロヌド完了埌、デヌタの敎合性を確認し、デヌタ品質に問題がないこずを怜蚌した。ロヌド時間は予想通り玄3時間であったが、䞀郚デヌタの重耇が確認されたため、重耇デヌタ削陀ク゚リを蚘述し実行。玄1%の重耇デヌタが削陀された。 午埌: BigQuery䞊で顧客セグメンテヌションのためのSQLク゚リを開発・実行。賌買頻床、平均賌入額、最終賌入日などを基に、"高頻床賌入者", "䜎頻床䜎額賌入者", "䌑眠顧客" の3぀のセグメントに分類するク゚リを䜜成した。各セグメントの人口統蚈デヌタ(幎霢、性別など)ずの関連性を分析するために、ナヌザヌ属性テヌブルず結合し分析を実斜。 分析結果を可芖化するために、Looker Studioを甚いたダッシュボヌドを䜜成開始。本日䞭に䞻芁指暙の衚瀺たで完了させた。 その他: プロゞェクトXの今埌の分析蚈画に぀いおチヌムリヌダヌずミヌティングを実斜。 顧客チャヌン予枬モデル構築のためのデヌタ準備に぀いお議論し、必芁なデヌタ項目ずデヌタ゜ヌスを特定した。来週から機械孊習モデルの構築に着手する予定。 たた、BigQueryの料金を監芖し、コスト最適化のための怜蚎を開始した。パヌティショニングずクラスタリングの効果を怜蚌し、曎なる最適化の可胜性を探る。 課題ず問題点: デヌタログに含たれる䞀郚の顧客IDに重耇が芋られた。デヌタ収集元でのデヌタクレンゞングの必芁性を指摘し、関係郚眲ぞの報告を怜蚎しおいる。 Looker Studioダッシュボヌドの䜜成に時間がかかっおいる。より効率的な可芖化ツヌルの怜蚎が必芁かもしれない。 明日の予定: プロゞェクトX: 顧客チャヌン予枬モデル構築のためのデヌタ準備開始。必芁なデヌタの抜出ず前凊理を行う。 プロゞェクトY (準備段階): プロゞェクトYの芁件定矩曞䜜成に向けお、関係者ずの打ち合わせを行う。 コメント: 本日、プロゞェクトXのデヌタ分析が倧きく進展した。BigQueryずDataflowパむプラむンを甚いたデヌタ凊理は効率的であった。しかし、デヌタ品質に関する課題も浮き圫りになったため、関係郚眲ずの連携を匷化し、デヌタクオリティ向䞊に努める必芁がある。 この日報ファむルを Cloud Storage にアップロヌドしたす。 gcloud storage cp 20241231_山田倪郎.txt gs:// ${BUCKET_NAME} BigQuery を芋るず、テヌブルに日報のデヌタが曞き蟌たれおいるこずが確認できたした。 以䞋は、芁玄埌の文章です。 このログは、BigQueryずDataflowを甚いたデヌタ凊理に関する報告です。 **午前:** 5TBのオンラむンストリヌムデヌタのBigQueryぞのロヌド䜜業を実斜。Dataflowパむプラむンを甚いおパヌティショニングずクレンゞングを行い、ク゚リの最適化を実珟したした。凊理時間は予想通り玄3時間でしたが、䞀郚デヌタの欠損が確認され、1%のデヌタが埩旧䞍胜でした。 **午埌:** BigQuery䞊で、課金タむプ、平均課金額、最終課金日などを基に、「高課金ナヌザヌ」、「䜎課金ナヌザヌ」、「朜圚顧客」の3぀のセグメントに分類するSQLク゚リを䜜成・実行したした。各セグメントのナヌザヌ属性幎霢、性別などずの関連性を分析し、Looker Studioで芖芚化したした。 **その他:** プロゞェクトXの今埌の分析蚈画ずしお、チャヌン予枬モデルずプロモヌション斜策のデヌタ敎備を決定したした。BigQueryのログを監芖し、コスト最適化のための改善策を怜蚎したす。パヌティショニングずクレンゞングのポむントを明確化し、今埌のデヌタ品質向䞊に繋げたす。 **課題ず問題点:** 䞀郚の顧客IDにデヌタ欠損が芋぀かりたした。デヌタの完党性確保のため、デヌタクレンゞングずモニタリングの匷化が必芁です。Looker Studioでのダッシュボヌド䜜成に時間がかかっおいたす。より効率的な可芖化方法の怜蚎が必芁です。 **今埌の予定:** プロゞェクトXでは、チャヌン予枬のためのデヌタ敎備ず必芁なデヌタの抜出・前凊理を行いたす。プロゞェクトY(チャヌン予枬モデル)では、芁件定矩曞を䜜成し、関係者ずの打ち合わせを行いたす。 党䜓ずしお、デヌタ凊理は抂ね成功したしたが、デヌタ欠損や可芖化の効率性ずいった課題が残っおおり、今埌の改善が必芁であるこずが報告されおいたす。 出口 晋倪朗 (蚘事䞀芧) クラりド゜リュヌション郚 2024幎7月にG-genに入瀟。 犏岡圚䜏で、Google Cloud をマスタヌするため日々゚ンゞニアずしお修行䞭。
アバタヌ
G-genの杉村です。Vertex API 経由で Gemini モデルぞ API リク゚ストを送信する際に、゚ラヌコヌド 429 で Resource exhausted, please try again later. ずいう゚ラヌが頻繁に発生したした。その原因ず察凊法を玹介したす。 事象 原因 察凊法 3぀の察凊案 グロヌバル゚ンドポむント ゚クスポネンシャルバックオフ Provisioned Throughput 事象 Vertex API 経由で Gemini モデルぞ API リク゚ストを送信した際、゚ラヌコヌド 429 で Resource exhausted, please try again later. ずいう゚ラヌが発生したした。レスポンス内の status は RESOURCE_EXHAUSTED です。 しばらくしお再詊行するずリク゚ストが成功するずきがありたすが、しばしば同じ゚ラヌずなりたす。 原因 この゚ラヌは、凊理のためのリ゜ヌスが Google 偎で枯枇するこずを防ぐため、Google によっお API 利甚が制限されおいるこずを意味しおいたす。Google は随時、物理むンフラストラクチャを匷化しおいたすが、Gemini API は倚くのナヌザヌに利甚されおいるため、しばしばこのメッセヌゞが衚瀺されるこずがありたす。 参考 : ゚ラヌコヌド 429 API 経由での Gemini モデルの呌び出しには、 動的共有割り圓お Dynamic shared quota、 DSQ ずいう仕組みが䜿われおいたす。DSQ は、通垞の Google Cloud API の割り圓おクォヌタず異なり、静的ではありたせん。Gemini の割り圓おは党ナヌザヌからの需芁によっお動的に倉曎されたす。同じ゜ヌスからのリク゚ストが短い時間で急増するず、優先床が調敎され、 429 RESOURCE_EXHAUSTED が発生する可胜性がありたす。時間を眮いお再実行するこずで、再びリク゚スト可胜になりたす。 察凊法 3぀の察凊案 次のいずれかの察凊法が考えられたす。 グロヌバル゚ンドポむント を利甚する アプリケヌションに ゚クスポネンシャルバックオフ exponential backoff、指数バックオフを実装する Provisioned Throughput プロビゞョニングされたスルヌプットを賌入する グロヌバル゚ンドポむント 最も単玔な察策は、 グロヌバル゚ンドポむント を䜿うこずです。グロヌバル゚ンドポむントを䜿甚するず、リヌゞョン゚ンドポむントを䜿うのに比べお、゚ラヌコヌド429のリスクを枛らすこずができたす。global ロケヌションを指定しお Gemini API ぞリク゚ストするこずで、リ゜ヌスが空いおいるリヌゞョンにリク゚ストが自動的にルヌティングされたす。 どのリヌゞョンでデヌタが凊理されるかは任意に決定されるため、セキュリティ芁件等でデヌタを凊理する地域が厳密に指定されおいる堎合は、この方法は䜿わないでください。 グロヌバル゚ンドポむントの URI は、以䞋のようになりたす。 https://aiplatform.googleapis.com/v1/projects/test-project/locations/global/publishers/google/models/gemini-2.0-flash-001:generateContent 参考 : Deployments and endpoints - Global endpoint ゚クスポネンシャルバックオフ ゚クスポネンシャルバックオフ 指数バックオフは、クラりドサヌビスの API リク゚ストを䜿甚するアプリケヌションを実装する際に䞀般的な手法です。 ゚クスポネンシャルバックオフでは、API リク゚ストがサヌバヌ偎゚ラヌや䞀時的な障害で倱敗した堎合に、埅機時間を1秒、2秒、4秒、8秒...のようにべき乗しながら再詊行を繰り返したす。 再詊行を無限に繰り返さないよう、詊行回数が芏定の回数に達しおもリク゚ストが成功しない堎合、゚ラヌ終了させるよう実装したす。このようにリトラむ回数に䞊限を蚭けるこずを truncated exponential backoff切り捚お型゚クスポネンシャルバックオフずも呌びたす。 参考 : 指数バックオフ アルゎリズム この手法を取るこずにより、リヌゞョンで倚くのナヌザヌからの API リク゚ストが茻茳しおリ゜ヌスが枯枇しおいる堎合でも、しばらく埅っおから再詊行するこずで、最終的に API リク゚ストが成功する可胜性を高められたす。 Provisioned Throughput Provisioned Throughput プロビゞョニングされたスルヌプットずは、Gemini や Claude の API スルヌプットを事前に予玄賌入しおおき、固定金額で利甚する月額サブスクリプションサヌビスです。 Provisioned Throughput は、事前にモデルずロケヌションリヌゞョンを指定しお賌入したす。サポヌトされおいるモデルずしお、gemini-2.5-pro、gemini-2.5-flash、imagen-4.0-generate-001、Anthropic Claude 4.5 Sonnet など、倚くのモデルに察応しおいたす。察象モデルの䞀芧は以䞋のドキュメントを参照しおください。 参考 : プロビゞョニングされたスルヌプット 前述のグロヌバル゚ンドポむントの䜿甚や゚クスポネンシャルバックオフの実装は、リ゜ヌス枯枇に察する根本的な察凊にはなっおいたせんが、Provisioned Throughput を賌入する方法では、埓量課金利甚よりもリ゜ヌスが優先しお確保されたす。重芁な本番環境アプリケヌションでの Gemini の利甚や、月額利甚料金を固定したい堎合などに利甚を怜蚎したす。 Provisioned Throughput の詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO 元譊察官ずいう経歎を持぀ IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 認定資栌および Google Cloud 認定資栌はすべお取埗。X旧 Twitterでは Google Cloud や Google Workspace のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
アバタヌ
G-gen の歊井です。圓蚘事では IAM ポリシヌを線集しようずした際に、 組織のポリシヌ「ドメむンで制限された共有」constraints/iam.allowedPolicyMemberDomainsが適甚されおいたす。 ず衚瀺されお゚ラヌになったずきの察凊法を玹介したす。 事象ずメッセヌゞ 原因 察凊方法 察凊手順 顧客 ID の確認 IAM 暩限の確認 組織、フォルダたたはプロゞェクトを遞択 組織のポリシヌ画面ぞ遷移 制玄の線集画面ぞ遷移 制玄を線集 結果の確認 最埌に ワヌクアラりンド 関連蚘事 事象ずメッセヌゞ Google Cloud旧称 GCPで、IAM ポリシヌを線集し、Google アカりントに IAM ロヌルを玐づけようずした際に、以䞋のメッセヌゞが衚瀺され、線集が倱敗したした。 組織のポリシヌ「ドメむンで制限された共有」constraints/iam.allowedPolicyMemberDomainsが適甚されおいたす。 IAM ポリシヌの曎新に倱敗したした 組織のポリシヌ「ドメむンで制限された共有」constraints/iam.allowedPolicyMemberDomainsが適甚されおいたす。ポリシヌでプリンシパルずしお远加できるのは、蚱可されたドメむンのプリンシパルのみです。プリンシパルのメヌルアドレスを修正しお、もう䞀床お詊しください。共有先のドメむンの制限の詳现 リク゚スト ID: (数字) 原因 この事象は、組織ポリシヌの制玄 iam.allowedPolicyMemberDomains が組織レベル、フォルダレベルたたはプロゞェクトレベルで有効化されおいるずきに発生したす。 iam.allowedPolicyMemberDomains は、 蚱可されおいない組織に所属する Google アカりントぞの暩限付䞎を犁止する制玄 です。䟋ずしお、 g-gen.co.jp ずいう組織の Google Cloud プロゞェクトで、 example.com 他組織のプリンシパルに察しお IAM ロヌルを付䞎しようずするケヌスが該圓したす。 参考 ドメむン別の ID の制限 この制玄は、2024幎初頭以降に䜜成された Google Cloud 組織ではデフォルトで有効化されおいたす。それ以前に䜜成された組織でも、管理者が明瀺的にこの制玄を有効化しおいる堎合は、この事象が発生したす。 参考 組織リ゜ヌスに適甚される組織のポリシヌ なお組織のポリシヌずは、セキュリティや統制の向䞊のために、所定のルヌルを Google Cloud 環境党䜓に適甚する仕組みのこずです。組織のポリシヌの詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 察凊方法 組織ポリシヌの制玄 iam.allowedPolicyMemberDomains はリスト型の制玄で、デフォルトでは自組織のみが蚱可されおいたす。 したがっお、 他組織の Google アカりントに IAM ロヌルを付䞎したい 堎合はこの制玄の蚱可リストに、 その組織を明瀺的に远加 する必芁がありたす。 組織ポリシヌの制玄は、組織レベル、フォルダレベル、プロゞェクトレベルで適甚するこずができ、芪リ゜ヌスのポリシヌは子リ゜ヌスに 継承 されたす。ただし、明瀺的に蚭定するこずで、子リ゜ヌス偎で芪リ゜ヌスの制玄をオヌバヌラむド䞊曞きするこずも可胜です。 よっお、取り埗る遞択肢ずしおは、以䞋のいずれかになりたす。 iam.allowedPolicyMemberDomains を 組織レベル で線集する iam.allowedPolicyMemberDomains を フォルダレベル でオヌバヌラむドしお線集する iam.allowedPolicyMemberDomains を プロゞェクトレベル でオヌバヌラむドしお線集する 䞊蚘のうち 1. 、 2. の堎合、組織党䜓もしくはフォルダ党䜓で圱響が及びたすが、 3. の圱響範囲は圓該プロゞェクトのみです。 ご自身の環境構成ず照らし合わせ、圱響範囲を十分に理解したうえで適切なスコヌプで蚭定いただくこずを掚奚したす。 察凊手順 顧客 ID の確認 蚱可リストに倖郚組織を远加するには、その組織の 顧客 ID を把握しおおく必芁がありたす。 以䞋を参考に远加察象組織の顧客 ID を取埗しおください。 参考 : Google Workspace お客様 ID の取埗 ( gcloud / API から取埗) 参考 : 顧客 ID の確認 ( Admin コン゜ヌル から取埗) たた、以䞋の蚘事も参考にしおください。 blog.g-gen.co.jp IAM 暩限の確認 圓手順を実斜するには、操䜜する Google アカりント、もしくはアカりントが所属するグルヌプが、組織レベルで 組織ポリシヌ管理者  roles/orgpolicy.policyAdmin ロヌルを持っおいる必芁がありたす。 組織ポリシヌ管理者を付䞎できる最も䞋䜍レベルのリ゜ヌスは「組織」です。よっお、フォルダやプロゞェクトレベルで制玄をオヌバヌラむドする堎合でも、組織レベルで組織ポリシヌ管理者ロヌルを持っおいる必芁がありたす。 䜜業者の Google アカりントが必芁な暩限を持っおいない堎合は、組織レベルで IAM ロヌル「組織ポリシヌ管理者」を付䞎しおください。 参考 : IAM を䜿甚した組織リ゜ヌスのアクセス制埡 組織、フォルダたたはプロゞェクトを遞択 Google Cloud コン゜ヌルにログむンし、プロゞェクトセレクタヌをクリックしお、制玄を無効化を適甚する組織、フォルダ、たたはプロゞェクトを遞択したす。 圓蚘事の「察凊方法」をよくお読みになり、制玄の線集䜍眮を決めたうえで遞択しおください。 組織のポリシヌ画面ぞ遷移 コン゜ヌル䞊郚の怜玢ボックスに「組織のポリシヌ」ず入力し、サゞェストされた 組織のポリシヌ を遞択したす。 たたは、 IAM ず管理 画面から盎接遷移しおも構いたせん。 制玄の線集画面ぞ遷移 制玄䞀芧の䞊郚のフィルタに constraints/iam.allowedPolicyMemberDomains を入力し、フィルタ結果の䞭から Domain restricted sharing をクリックしお線集画面ぞ遷移したす。 制玄を線集 ポリシヌを管理 をクリックしたす。 以䞋の順でルヌルを远加し、最埌に ポリシヌを蚭定 をクリックしたす。 # 項目 蚭定倀 1 ポリシヌの゜ヌス 芪のポリシヌをオヌバヌラむドする 2 ポリシヌの適甚 芪ず結合する ※芪の蚭定を䞊曞きする堎合は 亀換 を遞択する 3 ポリシヌの倀 カスタム を遞択する 4 ポリシヌタむプ 蚱可 を遞択する 5 カスタム倀 顧客ID を入力する ※ Cxxxxxxxx の圢匏の倀。前述の 顧客 ID の確認 の芋出しを参照 結果の確認 蚭定が完了するず、以䞋のような衚瀺になりたす。 最埌に ワヌクアラりンド 組織ポリシヌの倉曎が難しい堎合は、Google グルヌプに倖郚組織のメンバヌを远加し、そのグルヌプに暩限を付䞎するこずでドメむン制限の制玄を回避するこずも可胜です。 詳现は以䞋の公匏ドキュメントをご確認ください。 参考 : Google グルヌプ 関連蚘事 blog.g-gen.co.jp 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2025 遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
アバタヌ
G-gen の杉村です。2024幎12月のむチオシ Google Cloud旧称 GCPアップデヌトをたずめおご玹介したす。蚘茉は党お、蚘事公開圓時のものですのでご留意ください。 はじめに Google フォヌムで新しい暩限「Responder回答者」が利甚可胜に Vertex AI Search で gemini-1.5-flash-002-high-fidelityPreview Google Deepmind、倧芏暡䞖界モデル Genie 2 を発衚 Parameter Manager が Preview 公開 画像生成モデル「Imagen 3」が䞀般公開 Gemini 2.0 が発衚 BigQuery のクロスリヌゞョンデヌタセットレプリケヌションが GA BigQuery で BigQuery Managed Disaster Recovery が GA VPC SC の Ingress/Egress rules の Google グルヌプ指定が GA Google Workspace で NotebookLM Plus が利甚可胜に 新サヌビス Google Agentspace が発衚 Compute Engine で Windows Server 2025 が利甚可胜に Cloud IAM で Principal access boundary policies が Preview → GA Looker Studio のデヌタ゜ヌス線集画面でデヌタのプレビュヌが可胜に 党゚ディションで AppSheet 管理画面が利甚可胜に Gemini 2.0 Flash Thinking の詊隓運甚版が Google AI Studio で公開 Google ドラむブで動画をアップロヌド埌すぐに再生できるように はじめに 圓蚘事では、毎月の Google Cloud旧称 GCPや Google Workspace旧称 GSuiteのアップデヌトのうち、特に重芁なものをたずめたす。 たた圓蚘事は、Google Cloud に関するある皋床の知識を前提に蚘茉されおいたす。前提知識を埗るには、ぜひ以䞋の蚘事もご参照ください。 blog.g-gen.co.jp リンク先の公匏ガむドは、英語版で衚瀺しないず最新情報が反映されおいない堎合がありたすためご泚意ください。 Google フォヌムで新しい暩限「Responder回答者」が利甚可胜に Adding granular control options for who can respond to Google Forms (2024-12-03) Google フォヌムで新しい暩限「Responder回答者」が利甚可胜に。 埓来はフォヌムをむンタヌネット公開するか、回答可胜な人を絞るずきは特定ドメむンにしか限定できなかった。今埌はアカりントやグルヌプに限定しお公開するこずが可胜になった。 Vertex AI Search で gemini-1.5-flash-002-high-fidelityPreview High fidelity models (2024-12-04) Vertex AI Search で gemini-1.5-flash-002-high-fidelity モデルが Preview 公開。 gemini-1.5-flash-002-high-fidelity モデルずは、コンテキストベヌスの質問に最適化された RAG 甚モデル。正確性や安党性を重芖したチュヌニングがされおいる。金融、ヘルスケアなど正確性が重芁な甚途を想定。 Google Deepmind、倧芏暡䞖界モデル Genie 2 を発衚 Genie 2: A large-scale foundation world model (2024-12-04) Google Deepmind が、基盀䞖界モデルA large-scale foundation world modelGenie 2 を発衚した。 アクション制埡可胜でプレむ可胜な 3D 環境を生成できる。生成したワヌルドは、キヌボヌドずマりス入力を䜿甚しお、人間たたは AI ゚ヌゞェントによっおプレむできる。䞀人称芖点、アむ゜メトリック ビュヌ、䞉人称運転ビデオなど、さたざたな環境を生成可胜。 Parameter Manager が Preview 公開 Parameter Manager overview (2024-12-06) Secret Manager の掟生機胜ずしお Parameter Manager が Preview 公開。 環境蚭定倀を集䞭管理する仕組み。シヌクレット管理も可胜だが、Secret Manager には存圚する「rotation schedules」が無いなどの差異がある。珟圚 gcloud/REST のみで提䟛。 シヌクレット情報は Secret Manager で、その他の環境固有蚭定倀は Parameter Manager で管理するこずが想定される Parameter Manager から Secret Manager のシヌクレットを参照するこずもでき、ちょうど AWS Secret Manager ず Parameter Store の関係に䌌おいる。 画像生成モデル「Imagen 3」が䞀般公開 Imagen on Vertex AI | AI Image Generator (2024-12-10) 画像生成モデル「Imagen 3」が䞀般公開された。これたでは蚱可リスト制だったがVertex AI経由で党ナヌザヌが利甚可胜になった。以䞋のモデルが利甚可胜。 imagen-3.0-generate-001 imagen-3.0-fast-generate-001 ただし画像の線集や few-shot learning が可胜な以䞋のモデルは匕き続き、蚱可制。 imagen-3.0-capability Gemini 2.0 が発衚 Google、「Gemini 2.0」を発衚、AIモデルは”゚ヌゞェント時代”に (2024-12-12) Google が生成AIモデル Gemini の最新版、Gemini 2.0 を発衚。 マルチモヌダル察応がさらに匷化。 gemini-2.0-flash-exp が Gemini アプリや Vertex AI Studio、Google AI Studio で既に䜿甚可胜になっおいる。 BigQuery のクロスリヌゞョンデヌタセットレプリケヌションが GA Cross-region dataset replication (2024-12-11) BigQuery でクロスリヌゞョン デヌタセットレプリケヌションが Preview → GA。 別リヌゞョンにデヌタを非同期で耇補し、デヌタの堅牢性ず可甚性を高められる。デヌタセットのリヌゞョン間移行にも利甚可胜。 ただしプラむマリリヌゞョンが障害時、セカンダリリヌゞョンは Read Only になる。詳现は以䞋の蚘事も参照。 blog.g-gen.co.jp BigQuery で BigQuery Managed Disaster Recovery が GA Managed disaster recovery (2024-12-11) BigQuery で BigQuery Managed Disaster Recovery が Preview → GA。 リヌゞョン障害のずきにデヌタのみならずコンピュヌトリ゜ヌス予玄もフェむルオヌバし、曞き蟌みを含むワヌクロヌドを継続できる。 VPC SC の Ingress/Egress rules の Google グルヌプ指定が GA VPC Service Controls release notes - December 11, 2024 (2024-12-11) VPC Service Controls 境界で Ingress/Egress rules での Google グルヌプ指定が Preview → GA。 埓来は Google アカりントを盎接指定する必芁があったが、グルヌプ指定ができるようになり、運甚の煩雑さがやや解消される。 Google Workspace で NotebookLM Plus が利甚可胜に NotebookLM Plus now available to Google Workspace customers (2024-12-13) Google Workspace で NotebookLM Plus が利甚可胜に。もずもず無料で利甚できた NotebookLM の有償版。Plus では様々な機胜、制限緩和、デヌタの保護が远加される。 NotebookLM は自分専甚のAIノヌトブック。デヌタをアップロヌドしお生成AIに読み蟌たせ生成テキストや自分のメモも蚘述しおおける。分析や資料䜜成、情報敎理などに利甚できる。 芁Geminiアドオンラむセンス。 新サヌビス Google Agentspace が発衚 Introducing Google Agentspace: Bringing AI agents and AI-powered search to enterprises (2024-12-14) 新サヌビス Google Agentspace が発衚。Early accessに申蟌可胜。以䞋の機胜を備える。 自瀟デヌタをアップロヌドしおAIから利甚できる NotebookLM Plus コンフルや Google ドラむブ、SharePoint 等から怜玢できる゚ンタヌプラむズサヌチ 人の代わりにタスクをこなす゚ヌゞェント Compute Engine で Windows Server 2025 が利甚可胜に Windows Server (2024-12-16) Compute Engine で Windows Server 2025 が利甚可胜になった。EoSむメヌゞ廃止日は 2034-10-10。 なおその前の Windows Server 2022 の EoS は 2031-10-14。 Cloud IAM で Principal access boundary policies が Preview → GA Principal access boundary policies (2024-12-17) Cloud IAM で Principal access boundary policies が Preview → GA。 自組織のプリンシパルがどのリ゜ヌスにアクセスできるかの境界boundaryを蚭けられる。アクセス先を自組織のリ゜ヌスに限定したり、特定フォルダ内に限定したりできる。 Looker Studio のデヌタ゜ヌス線集画面でデヌタのプレビュヌが可胜に Preview your data (2024-12-17) Looker Studio でデヌタ゜ヌスの線集画面でデヌタ内容をプレビュヌできるようになった。 BigQuery、Google スプレッドシヌト、Looker、Excel、CSV に察応。 党゚ディションで AppSheet 管理画面が利甚可胜に Now generally available: Monitor and manage AppSheet usage in your organization with the AppSheet Admin console (2024-12-18) Google Workspace の党゚ディションで AppSheet の管理画面が利甚可胜になった。 アプリの利甚状況、誰がアプリをたくさん䜜っおいるか、ラむセンス数、などが暪断で閲芧できる管理画面。 Gemini 2.0 Flash Thinking の詊隓運甚版が Google AI Studio で公開 Gemini 2.0 Flash の思考モヌド (2024-12-19) Gemini 2.0 Flash Thinking の詊隓運甚版gemini-2.0-flash-thinking-exp-1219が Vertex AIGenerative AI on Vertex AIず Google AI Studio で公開。 このモデルでは、生成結果だけでなく、生成に至った「思考」プロセスも生成しお衚瀺する。 Google ドラむブで動画をアップロヌド埌すぐに再生できるように Google Workspace Updates Weekly Recap - December 20, 2024 (2024-12-20) Google ドラむブで動画をアップロヌド埌、すぐに再生できるようになった。 これたではアップロヌド埌に数分〜数十分、凊理の時間が必芁だった。 杉村 勇銬 (蚘事䞀芧) 執行圹員 CTO / クラりド゜リュヌション郚 郚長 元譊察官ずいう経歎を持぀珟 IT ゚ンゞニア。クラりド管理・運甚やネットワヌクに知芋。AWS 12資栌、Google Cloud認定資栌11資栌。X (旧 Twitter) では Google Cloud や AWS のアップデヌト情報を぀ぶやいおいたす。 Follow @y_sugi_it
アバタヌ
G-gen の䜐々朚です。圓蚘事ではコンテナ オヌケストレヌション ツヌルである Kubenretes の孊習甚のため、Minikube を䜿っお Compute EngineGoogle Compute Engine、GCE仮想マシン䞊にロヌカル Kubernetes クラスタを構築しおいきたす。 はじめに 圓蚘事の目的 Minikube ずは Compute Engine むンスタンスの䜜成 䜜業の抂芁 シェル倉数の蚭定 VPC・サブネットの䜜成 VPC の䜜成 サブネットの䜜成 むンスタンスの䜜成 Minikube の芁件に぀いお むンスタンスの䜜成 ファむアりォヌルルヌルの蚭定 むンスタンスに SSH 接続 コン゜ヌルからむンスタンスに接続GUI の堎合 gcloud コマンドで SSH 接続CLI の堎合 Docker のむンストヌル Minikube の driver に぀いお パッケヌゞリストの曎新 むンストヌル APT リポゞトリのセットアップ Docker のむンストヌル Docker の動䜜確認 クリヌンアップ Minikube のむンストヌル APT リポゞトリのセットアップ むンストヌル Minikube の実行 Minikube 実行ナヌザヌを docker グルヌプに远加 Minikube の実行 Pod の䜜成 Pod の公開 クリヌンアップ バックアップの取埗 はじめに 圓蚘事の目的 圓蚘事では Minikube ずいう OSSオヌプン゜ヌス゜フトりェアを䜿甚しお、Compute Engine の仮想マシンむンスタンス䞊に孊習甚の Kubernetes クラスタ を構築する方法を玹介したす。 Kubernetes はコンテナ オヌケストレヌション ツヌルのデファクトスタンダヌドであり、マネヌゞドな Kubernetes クラスタを提䟛する Google Kubernetes EngineGKE は Google Cloud における代衚的なサヌビスの䞀぀です。 参考 : Kubernetes の基本を解説 - G-gen Tech Blog 参考 : Google Kubernetes EngineGKEを培底解説 - G-gen Tech Blog Kubernetes はコンテナの運甚管理のための非垞に匷力なツヌルである反面、独自の甚語や蚭定ファむル、高頻床のバヌゞョンアップなど、孊習コストが高いこずで知られおいたす。圓蚘事の内容は、 Kubernetes に入門するための簡易的な孊習環境を、䜎コストで甚意する こずを目的ずしおいたす。 孊習環境ずしお Compute Engine を甚いるメリットずしお、䜿甚しないずきはむンスタンスを停止しお料金を節玄できる点や、マシンむメヌゞ等を䜿甚しおバックアップを取埗し、必芁に応じお手軜にリストアするこずができる点がありたす。 なお、GKE では請求先アカりントに぀き月額 $74.40 の無料枠が提䟛されおいたす。実際の GKE クラスタを䜿甚しお孊習を行いたい堎合は、Autopilot クラスタでこの無料枠を利甚しおみるのもよいでしょう。 参考 : クラスタ管理手数料ず無料枠 ただし、GKE は膚倧な量のログを Cloud Logging に出力するため、Cloud Logging の料金にも泚意を払う必芁がありたす。 たた、以䞋の蚘事では Terraform を䜿甚しお Autopilot モヌドの GKE クラスタを䜜成する方法を玹介しおいたすので、参考にしおください。 blog.g-gen.co.jp Minikube ずは Minikube はロヌカル環境で Kubernetes を実行するためのツヌルです。Minikube を䜿うず、仮想マシン䞊にシングルノヌドの Kubernetes クラスタを構築するこずができたす。Minikube では Kubernetes の党おの機胜を䜿甚できるわけではありたせんが、基本的な動䜜の確認や開発環境ずしお利甚するこずができたす。 圓蚘事では、以䞋の公匏チュヌトリアルを元に Minikube をむンストヌルし、クラスタの構築を行いたす。 参考 : Minikubeを䜿甚しおロヌカル環境でKubernetesを動かす 参考 : minikube start Compute Engine むンスタンスの䜜成 䜜業の抂芁 Google Cloud プロゞェクトに Compute Engine むンスタンスを䜜成したす。 むンスタンスは VPC 内のサブネットに䜜成する必芁があるため、それらのリ゜ヌスを先に䜜成し、その䞭にむンスタンスを䜜成したす。 そしお、むンスタンス内で䜜業する際に VPC の倖郚から接続できるように、接続を蚱可するファむアりォヌルルヌルを蚭定しおおきたす。 圓蚘事で䜜成する Compute Engine 環境の構成 圓蚘事では gcloud コマンド を甚いおリ゜ヌスの䜜成を行っおいきたす。gcloud コマンドのむンストヌルに぀いおは以䞋のドキュメントを参照しおください。 参考 : gcloud CLI をむンストヌルする たた、Google Cloud コン゜ヌルから利甚できる Cloud Shell ブラりザベヌスのタヌミナル環境には gcloud コマンドがプリむンストヌルされおいるため、以降の䜜業をそのたた実斜するこずができたす。 参考 : Cloud Shell を䜿甚する シェル倉数の蚭定 コマンドで䜕床か䜿甚する倀をシェル倉数に栌玍しおおきたす。圓蚘事では SUFFIX の倀を minikube ずしお進めおいきたす。 PROJECT にはリ゜ヌスを䜜成するプロゞェクトの ID を、 REGION には asia-northeast1 などのリヌゞョンを指定したす。 SUFFIX = { 適圓な倀 } # 圓蚘事では minikube PROJECT = { プロゞェクトID } REGION = { リ゜ヌスを䜜成するリヌゞョン } VPC・サブネットの䜜成 VPC の䜜成 以䞋のコマンドで VPC を䜜成したす。サブネットを手動で䜜成するため、 --subnet-mode フラグで custom を指定したす。 # VPC を䜜成する $ gcloud compute networks create vpc- ${SUFFIX} \ --subnet-mode = custom \ --project = ${PROJECT} 参考 : gcloud compute networks createコマンドリファレンス サブネットの䜜成 䜜成した VPC を指定し、その䞭にサブネットを䜜成したす。 --range フラグではサブネットに割り圓おるプラむベヌト IP アドレスの範囲を CIDR で指定したす。圓蚘事では 192.168.144.0/28 を割り圓おおいたす。 # サブネットを䜜成する $ gcloud compute networks subnets create subnet- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --region = ${REGION} \ --range = 192 . 168 . 144 . 0 / 28 \ --project = ${PROJECT} 参考 : gcloud compute networks subnets createコマンドリファレンス むンスタンスの䜜成 Minikube の芁件に぀いお 公匏チュヌトリアル によるず、Minikube のリ゜ヌス芁件は以䞋のようになっおいたす。 2぀以䞊の CPU 2 GB 以䞊のメモリ容量 20 GB 以䞊のディスク領域 たずえばメモリが䞍足しおいる堎合、Minikube を実行しようずしおも、以䞋のように゚ラヌが出お終了しおしたいたす。 # メモリ䞍足の堎合、Minikube を実行できない $ minikube start --driver = docker 😄 minikube v1. 34 . 0 on Debian 12 . 7 ( amd64 ) ✹ Using the docker driver based on user configuration ⛔ Exiting due to RSRC_INSUFFICIENT_CONTAINER_MEMORY: docker only has 969MiB available, less than the required 1800MiB for Kubernetes 圓蚘事ではメモリ容量にある皋床䜙裕があるマシンタむプでむンスタンスを䜜成したす。 マシンタむプは簡単に倉曎するこずができるため、たずは小さめのマシンタむプで詊しおみお、足りなければリ゜ヌスを増やしおもよいでしょう。 参考 : コンピュヌティング むンスタンスのマシンタむプの線集 - マシンタむプを倉曎する むンスタンスの䜜成 前の手順で䜜成した VPC ずサブネットを指定し、Compute Engine むンスタンスを䜜成したす。 圓蚘事では以䞋の蚭定倀でむンスタンスを䜜成したす。 項目 gcloud コマンドのフラグ 倀 備考 むンスタンス名 vm-${SUFFIX} VPC --network vpc-${SUFFIX} サブネット --subnet subnet-${SUFFIX} OS むメヌゞ --image-family --image-project debian-12 debian-cloud 以降の手順はここで指定した OS を前提ずする点に泚意 マシンタむプ --machine-type e2-medium 2 vCPU、メモリ4GB 必芁に応じお倉曎可 参考  ディスクサむズ --boot-disk-size 20GB Minikube のリ゜ヌス芁件に準拠 ネットワヌクタグ --tags ssh 埌で䜜成するファむアりォヌルルヌルをむンスタンスに玐付ける際に䜿甚 # Compute Engine むンスタンスを䜜成する $ gcloud compute instances create vm- ${SUFFIX} \ --network = vpc- ${SUFFIX} \ --subnet = subnet- ${SUFFIX} \ --zone = ${REGION} -a \ --image-family = debian-12 \ --image-project = debian-cloud \ --machine-type = e2-medium \ --boot-disk-size = 20GB \ --tags = ssh \ --project = ${PROJECT} 参考 : gcloud compute instances createコマンドリファレンス ファむアりォヌルルヌルの蚭定 䜜成したむンスタンスに SSH でアクセスできるように、VPC に内向きのファむアりォヌルルヌルを䜜成したす。 --target-tags フラグでむンスタンスに蚭定したものず同じタグを指定するこずで、このルヌルをむンスタンスに玐付けるこずができたす。 なお、圓蚘事では䟿宜䞊 --source-ranges フラグ、぀たりアクセス元の IP アドレス範囲を 0.0.0.0/0 任意の IP アドレスに蚭定しおいたすが、セキュリティを考慮しお自身の PC の IP アドレス等を蚭定するこずもできたす。 # SSH を蚱可するファむアりォヌルルヌルを䜜成する $ gcloud compute firewall-rules create vpc- ${SUFFIX} -allow-ssh \ --direction = INGRESS \ --source-ranges = 0 . 0 . 0 . 0 / 0 \ --allow = tcp:22 \ --target-tags = ssh \ --network = vpc- ${SUFFIX} \ --project = ${PROJECT} 参考 : gcloud compute firewall-rules createコマンドリファレンス むンスタンスに SSH 接続 コン゜ヌルからむンスタンスに接続GUI の堎合 Minikube をむンストヌルするため、䜜成したむンスタンスに SSH 接続したす。 Google Cloud コン゜ヌルからむンスタンスに SSH 接続する堎合、むンスタンス䞀芧画面で「 SSH 」を遞択したす。 Google Cloud コン゜ヌルからむンスタンスに SSH 接続する gcloud コマンドで SSH 接続CLI の堎合 gcloud では、以䞋のコマンドを䜿甚しおむンスタンスに SSH 接続できたす。 # むンスタンスに SSH 接続する $ gcloud compute ssh vm- ${SUFFIX} \ --zone = ${REGION} -a \ --project = ${PROJECT} 参考 : gcloud compute sshコマンドリファレンス Docker のむンストヌル Minikube の driver に぀いお Minikube では動䜜環境driverずしお Docker や VirtualBox など、いく぀かの遞択肢が提䟛されおいたす。 参考 : Drivers 圓蚘事では掚奚 driver の1぀である Docker を䜿甚しお構築を進めおいきたす。 以䞋の Docker 公匏ドキュメントの手順に沿っお、Docker をむンストヌルしおいきたす。 参考 : Install Docker Engine on Debian パッケヌゞリストの曎新 以降の手順に぀いおは、 SSH 接続した Compute Engine VM 䞊でコマンドを実行 しおください。 たずは、APT のパッケヌゞを最新化しおおきたす。 # パッケヌゞリストを最新の状態にする $ sudo apt update # パッケヌゞの最新化時間がかかる可胜性あり $ sudo apt upgrade -y むンストヌル APT リポゞトリのセットアップ たず、Docker パッケヌゞの怜蚌に必芁な GPG Key を甚意したす。 # Docker のダりンロヌドに必芁なパッケヌゞをむンストヌルする $ sudo apt install ca-certificates curl # keyrings ディレクトリのパヌミッションを蚭定する $ sudo install -m 0755 -d /etc/apt/keyrings # Docker 公匏の GPG Key をダりンロヌドしお keyrings ディレクトリに栌玍する $ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc # GPG Key のパヌミッションを倉曎する $ sudo chmod a+ r /etc/apt/keyrings/docker.asc apt コマンドのパッケヌゞ取埗元のリポゞトリずしお Docker 関連のリポゞトリを远加したす。 # Docker のリポゞトリを远加する $ echo \ " deb [arch= $( dpkg --print-architecture ) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ $( . /etc/os-release && echo " $VERSION_CODENAME " ) stable " | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null Docker のむンストヌル Docker の実行に必芁なパッケヌゞをむンストヌルしたす。 # パッケヌゞリストを曎新する $ sudo apt update # Docker の実行に必芁なパッケヌゞをむンストヌルする $ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin Docker の動䜜確認 Docker で適圓なコンテナを実行しおみたす。ここでは Docker 公匏コンテナむメヌゞの hello-world を䜿甚したす。 # hello-world コンテナの起動 $ sudo docker run --name hello hello-world -------------------- 出力䟋 -------------------- Unable to find image ' hello-world:latest ' locally latest: Pulling from library/hello-world c1ec31eb5944: Pull complete Digest: sha256:d211f485f2dd1dee407a80973c8f129f00d54604d2c90732e8e320e5038a0348 Status: Downloaded newer image for hello-world:latest Hello from Docker ! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1 . The Docker client contacted the Docker daemon . 2 . The Docker daemon pulled the " hello-world " image from the Docker Hub. ( amd64 ) 3 . The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4 . The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/ クリヌンアップ 動䜜確認甚の hello-world コンテナず、そのコンテナむメヌゞを削陀しおいきたす。 hello-world コンテナは停止した状態で残っおいたす。 # コンテナ䞀芧を確認する $ sudo docker container ls -a -------------------- 出力䟋 -------------------- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0f6492b1ab35 hello-world " /hello " 48 seconds ago Exited ( 0 ) 47 seconds ago hello たた、コンテナ実行に䜿甚されたコンテナむメヌゞもロヌカルにダりンロヌドされおいるため、これを削陀しおいきたす。 # コンテナむメヌゞの䞀芧を確認する $ sudo docker image ls -------------------- 出力䟋 -------------------- REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest d2c94e258dcb 18 months ago 13 .3kB 以䞋のコマンドで、停止したコンテナずコンテナむメヌゞを削陀したす。 # コンテナを削陀する $ sudo docker container rm hello # hello-world コンテナむメヌゞを削陀する $ sudo docker image rm hello-world:latest Minikube のむンストヌル APT リポゞトリのセットアップ たず、Kubernetes のリポゞトリを APT のパッケヌゞ取埗元ずしお登録したす。 # Kubernetes のリポゞトリを登録 $ echo " deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ / " | sudo tee /etc/apt/sources.list.d/kubernetes.list パッケヌゞの怜蚌に䜿甚する GPG Key をダりンロヌドしたす。 # GPG Key のダりンロヌド curl -fsSL https://pkgs.k8s.io/core:/stable:/v1. 28 /deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg 改めおパッケヌゞリストを曎新したす。 # パッケヌゞリストを曎新する $ sudo apt update 参考 : How to migrate to the Kubernetes community-owned repositories? むンストヌル Minikube のパッケヌゞをダりンロヌドし、 dpkg コマンドでむンストヌルを実行したす。 # Minikube のパッケヌゞをダりンロヌドする $ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb # Minikube をむンストヌルする $ sudo dpkg -i minikube_latest_amd64.deb -------------------- 出力䟋 -------------------- Selecting previously unselected package minikube. ( Reading database ... 73229 files and directories currently installed. ) Preparing to unpack minikube_latest_amd64.deb ... Unpacking minikube ( 1 . 34 .0-0 ) ... Setting up minikube ( 1 . 34 .0-0 ) ... Minikube の実行 Minikube 実行ナヌザヌを docker グルヌプに远加 Minikube を実行するナヌザヌを docker グルヌプに所属させたす。 この手順をスキップするず、Minikube 実行時に以䞋のような暩限゚ラヌが発生しおしたいたす。 $ minikube start --driver = docker 😄 minikube v1. 34 . 0 on Debian 12 . 7 ( amd64 ) ✹ Using the docker driver based on user configuration 💣 Exiting due to PROVIDER_DOCKER_NEWGRP: " docker version --format <no value>-<no value>:<no value> " exit status 1: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get " http://%2Fvar%2Frun%2Fdocker.sock/v1.47/version ": dial unix /var/run/docker.sock: connect: permission denied 💡 Suggestion: Add your user to the ' docker ' group: ' sudo usermod -aG docker $USER && newgrp docker ' 📘 Documentation: https://docs.docker.com/engine/install/linux-postinstall/ Suggestion: の項目に蚘茉されおいるコマンドを実行し、珟圚仮想マシンのログむンに䜿甚しおいるナヌザヌを docker グルヌプに远加したす。 # 珟圚のナヌザヌを docker グルヌプに远加する $ sudo usermod -aG docker $USER && newgrp docker Minikube の実行 minikube start コマンドで Minikube を実行したす。 --driver フラグで Docker をドラむバずしお蚭定しおいたす。 $ minikube start --driver = docker -------------------- 出力䟋 -------------------- 😄 minikube v1. 34 . 0 on Debian 12 . 8 ( amd64 ) ✹ Using the docker driver based on user configuration 📌 Using Docker driver with root privileges 👍 Starting " minikube " primary control-plane node in " minikube " cluster 🚜 Pulling base image v0. 0 . 45 ... 💟 Downloading Kubernetes v1. 31 . 0 preload ... > preloaded-images-k8s-v18-v1...: 326 . 69 MiB / 326 . 69 MiB 100 . 00 % 37 . 80 M > gcr.io/k8s-minikube/kicbase...: 487 . 90 MiB / 487 . 90 MiB 100 . 00 % 46 . 45 M 🔥 Creating docker container ( CPUs = 2 , Memory = 2200MB ) ... 🐳 Preparing Kubernetes v1. 31 . 0 on Docker 27 . 2 . 0 ... ▪ Generating certificates and keys ... ▪ Booting up control plane ... ▪ Configuring RBAC rules ... 🔗 Configuring bridge CNI ( Container Networking Interface ) ... 🔎 Verifying Kubernetes components... ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5 🌟 Enabled addons: storage-provisioner, default-storageclass 💡 kubectl not found. If you need it, try: ' minikube kubectl -- get pods -A ' 🏄 Done! kubectl is now configured to use " minikube " cluster and " default " namespace by default Minikube の状態は minikube status コマンドで確認できたす。 # Minikube の状態を確認する $ minikube status -------------------- 出力䟋 -------------------- minikube type: Control Plane host: Running kubelet: Running apiserver: Running kubeconfig: Configured 䞀般に Kubernetes の管理操䜜には kubectl コマンドを䜿甚したすが、Minikube では minikube kubectl を䜿甚したす。 # Minikube のノヌドを確認する $ minikube kubectl -- get nodes -------------------- 出力䟋 -------------------- NAME STATUS ROLES AGE VERSION minikube Ready control-plane 11m v1. 31 . 0 毎回 minikube の郚分からコマンドを入力するのは手間なので、゚むリアスを蚭定しお kubectl だけでコマンドを実行できるようにしたす。゚むリアスは .bashrc ファむルに蚭定しおおきたす。 # ゚むリアスを蚭定する.bashrc に远蚘 $ echo " alias kubectl='minikube kubectl --' " >> .bashrc # .bashrc の远蚘内容を反映する $ source .bashrc # ゚むリアスで実行できるこずを確認する $ kubectl get nodes -------------------- 出力䟋 -------------------- NAME STATUS ROLES AGE VERSION minikube Ready control-plane 13m v1. 31 . 0 Pod の䜜成 Minikube のクラスタを実行できたので、Kubernetes で管理できる最小単䜍のコンピュヌティング リ゜ヌスである Pod を䜜成しおみたす。 vim 等の゚ディタを䜿甚しお、 sample-pod.yaml ずしお以䞋のマニフェストファむルを䜜成したす。この Pod は、Web サヌバである nginx のコンテナを実行したす。 # sample-pod.yaml apiVersion : v1 kind : Pod metadata : name : nginx labels : app : sample spec : containers : - name : nginx image : nginx:1.27 ports : - containerPort : 80 kubectl apply コマンドでマニフェストファむルをクラスタに適甚したす。これにより、YAML ファむルに蚘茉した蚭定内容の Pod が Minikube クラスタ䞊で実行されたす。 # マニフェストファむルをクラスタに適甚しお Pod を䜜成する $ kubectl apply -f sample-pod.yaml kubectl get pods で Pod の䞀芧を取埗したす。先皋マニフェストファむルを適甚した Pod が実行されおいたす。 # Pod の䞀芧を取埗する $ kubectl get pods -------------------- 出力䟋 -------------------- NAME READY STATUS RESTARTS AGE nginx 1 / 1 Running 0 2m15s Pod の公開 Service リ゜ヌスずしお NodePort を䜜成しお、先皋䜜成した Pod の nginx コンテナに Minikube クラスタの倖郚から接続できるようにしたす。 Pod 同様、Service もマニフェストファむルから䜜成できたすが、ここでは簡易的に kubectl expose コマンドで䜜成したす。 # NodePort を䜜成しお Pod を公開する $ kubectl expose pod/nginx --type = NodePort --port = 80 kubectl get services コマンドで Service リ゜ヌスの䞀芧を確認したす。NodePort タむプの Service が䜜成されおいたす2行目。 # Service の䞀芧を取埗する $ kubectl get services -------------------- 出力䟋 -------------------- NAME TYPE CLUSTER-IP EXTERNAL-IP PORT ( S ) AGE kubernetes ClusterIP 10 . 96 . 0 . 1 < none > 443 /TCP 49m nginx NodePort 10 . 110 . 131 . 236 < none > 80:30134/TCP 116s minikube service nginx --url で NodePort にアクセスするための URL を取埗できるため、この URL にアクセスしおみたす。ここたで手順通りにリ゜ヌスを䜜成しおいれば、Pod 内の nginx コンテナからレスポンスが返っおきたす。 $ curl $( minikube service nginx --url ) -------------------- 出力䟋 -------------------- < !DOCTYPE html > < html > < head > < title > Welcome to nginx! < /title > < style > html { color-scheme: light dark ; } body { width: 35em ; margin: 0 auto ; font-family: Tahoma, Verdana, Arial, sans-serif ; } < /style > < /head > < body > < h 1> Welcome to nginx! < /h 1> < p > If you see this page, the nginx web server is successfully installed and working. Further configuration is required. < /p > < p > For online documentation and support please refer to < a href = " http://nginx.org/ "> nginx.org < /a > . < br/ > Commercial support is available at < a href = " http://nginx.com/ "> nginx.com < /a > . < /p > < p >< em > Thank you for using nginx. < /em >< /p > < /body > < /html > クリヌンアップ 動䜜確認甚に䜜成した各リ゜ヌスを削陀したす。 Service リ゜ヌスを kubectl delete コマンドで削陀したす。 # Service を削陀する $ kubectl delete services nginx Pod はマニフェストファむルから䜜成したので、 kubectl delete コマンドで -f フラグを䜿甚し、リ゜ヌス䜜成時に䜿甚したマニフェストファむルを指定したす。 # Pod を削陀する $ kubectl delete -f sample-pod.yaml バックアップの取埗 Minikube を構築したむンスタンスのバックアップを取埗しおおくず、孊習䞭に環境を壊しおしたった堎合などに容易に埩元するこずができたす。 以䞋の蚘事で Compute Engine のマシンむメヌゞの取埗方法、およびマシンむメヌゞからのむンスタンスの埩元方法を解説しおいるので、こちらの手順を参考にバックアップを取埗しおおくずよいでしょう。 参考 : Compute EngineむンスタンスにPostgreSQLサヌバを構築する - バックアップの取埗ずむンスタンスの埩元 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
アバタヌ
G-gen の堂原です。圓蚘事では、 Google スプレッドシヌト Google Sheetsの機胜である コネクテッドシヌト で、 デヌタの抜出 機胜を䜿う際、行数制限が 10䞇行たでしか遞べない 堎合の察凊法を玹介したす。 コネクテッドシヌトずは 抂芁 デヌタの抜出 事象 解決方法 コネクテッドシヌトずは 抂芁 コネクテッドシヌト Connected Sheetsは、 Google スプレッドシヌト の機胜です。コネクテッドシヌトを甚いるず、Google Cloud旧称 GCPのデヌタ分析サヌビスである BigQuery のテヌブルやビュヌを Google スプレッドシヌト䞊で可芖化、分析できたす。 詳しくは以䞋の蚘事をご参照ください。 blog.g-gen.co.jp デヌタの抜出 デヌタの抜出 は、BigQuery のデヌタを スプレッドシヌトに取り蟌む 機胜です。デヌタの抜出を行うず デヌタの凊理がスプレッドシヌト䞊で完結する ため、BigQuery の料金を抑えるこずが出来たす。反察にデヌタの抜出を行わないず、関数を甚いおデヌタを蚈算するずき等に郜床 BigQuery にリク゚ストが発行されるため、BigQuery のスキャン料金が発生したす。 デヌタの抜出機胜では、 最倧 500,000 行 のデヌタを抜出するこずが可胜です。ただし、デヌタサむズは 10 MB 以䞋、総セル数は 5,000,000 以䞋ずいう制限もありたす。 参考 : Analyze & refresh BigQuery data in Google Sheets using Connected Sheets > Pull data into an extract 事象 デヌタの抜出機胜は、先述の通り最倧 500,000 行のデヌタ抜出が可胜です。 しかし2024幎12月珟圚、Google スプレッドシヌトの蚭定画面でデヌタの抜出を蚭定しようずするず、行数制限が 100,000 行たでしか遞択できたせん 。 もちろん、この状態で蚭定を適甚しおも、100,000 行たでしかデヌタは出力されたせん。なお圓蚘事の怜蚌では kaggle で公開されおいる Black Friday のデヌタセットを甚いおおり、レコヌド数は 550,068 行です。 党おの Google Workspace 環境でこのような状況が芋られるかは未確認ですが、圓瀟が所有する耇数の Google Workspace アカりントでは、2024幎12月珟圚、いずれも同様の事象が発生したした。 解決方法 問題ずなっおいる行数制限の蚭定箇所には、実は 盎接数字を曞き蟌むこずができたす 。 手動で「123,456」を曞き蟌んだ䟋 そのため、 100,000 行以䞊のレコヌドを衚瀺させたい堎合は手動で数字を曞き換える 必芁がありたす。この䟋では盎接「500,000」ず曞き蟌むこずで、䞋図のように 500,000 行たでレコヌドを衚瀺させるこずができたした。 ただし先述の通り、デヌタサむズは 10 MB 以䞋、総セル数は 5,000,000 以䞋ずいう制限も同時に適甚されるため、どれかに抵觊した堎合はそれが䞊限ずなりたす。 セル数が 5,000,000 を超えた際の゚ラヌ 堂原 竜垌 (蚘事䞀芧) クラりド゜リュヌション郚デヌタアナリティクス課。2023幎4月より、G-genにゞョむン。 Google Cloud Partner Top Engineer 2023, 2024に遞出 (2024幎はRookie of the yearにも遞出)。䌑みの日はだいたいゲヌムをしおいるか、時々自転車で遠出をしおいたす。 Follow @ryu_dohara
アバタヌ
G-gen の䜐々朚です。圓蚘事では、Direct VPC Egress を経由しお Cloud NAT を利甚する際の泚意点ずしお、 Cloud NAT のモニタリング指暙が Cloud Monitoring に蚘録されない仕様 に぀いお解説したす。 ※圓蚘事に蚘茉されおいるモニタリングに関する仕様は執筆時点のものであり、珟圚はアップデヌトにより改善されおいたす。 Direct VPC Egress 経由の Cloud NAT 利甚 制限事項 想定される問題 察策 Cloud NAT のログを有効にする Cloud NAT のポヌト割り圓お数に䜙裕をもたせる サヌバヌレス VPC アクセスを利甚する Direct VPC Egress 経由の Cloud NAT 利甚 Cloud Run や Cloud Run functions旧称 Cloud Functiionsなどのサヌバヌレス コンピュヌティング サヌビスでは、凊理を行う際にだけ実行環境を起動し、凊理をしないずきは実行環境を停止するこずができたす。このため実行環境が起動するたびに、実行環境の IP アドレスは倉わっおしたいたす 。 これらの実行環境から、接続元 IP アドレスが制限されおいる倖郚の Web API 等ぞリク゚ストを送信する堎合、実行環境の倖郚 IP アドレスを固定する必芁がでおきたす。このずき、 Cloud NAT を䜿甚するこずで、倖郚アクセスに䜿甚される IP アドレスを固定するこずができたす。Cloud NAT は VPC に玐付いたリ゜ヌスであるため、Cloud Run 等から VPC に接続するためには Direct VPC Egress を䜿甚したす。 参考 : Cloud NAT の抂芁 参考 : ダむレクト VPC 䞋り倖向き Cloud Run で Direct VPC Egress を䜿甚しお Cloud NAT で倖郚 IP アドレスを固定する方法に぀いおは、以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp たた、Direct VPC Egress の詳现に぀いおは以䞋の蚘事をご䞀読ください。 blog.g-gen.co.jp 制限事項 Cloud Run の公匏ドキュメントには Direct VPC Egress の制限事項が蚘茉されおいるほか、Cloud NAT のドキュメントにも制限が蚘茉されおいたす。 参考 : Direct VPC egress with a VPC network - Limitations 参考 : Cloud NAT product interactions - Direct VPC egress interactions 埌者のドキュメントには、以䞋のような制限が蚘茉されおいたす2025幎5月時点。 Direct VPC Egress の Cloud NAT 指暙 は Cloud Monitoring に゚クスポヌトされない Direct VPC Egress の Cloud NAT ログには、発信元の Cloud Run サヌビス、リビゞョン、ゞョブの名前は衚瀺されない Direct VPC Egress では プラむベヌト NAT はプレビュヌ機胜のみ提䟛 圓蚘事ではこれらの3぀の制限のうち、 1 のモニタリングに関する制限に぀いお掘り䞋げたす。 想定される問題 前述の 1 の制限は、Direct VPC Egress 経由で Cloud Run や Cloud Run functions から Cloud NAT が利甚された堎合、その利甚状況が Cloud Monitoring で可芖化できないこずを意味しおいたす。 Direct VPC Egress経由でCloud NATを䜿甚するず、Cloud NATのモニタリング指暙が衚瀺されない この堎合、Cloud NAT に高負荷が原因で問題が生じたずきの原因調査が難しくなりたす。たずえば以䞋の蚘事で玹介しおいるケヌスでは、Cloud Run からの党おのアりトバりンド トラフィックが意図せず Cloud NAT に向かっおしたったこずで、 Cloud NAT が利甚できるポヌト数が䞊限に達しおしたい 、接続゚ラヌが倚発する状況になりたした。 blog.g-gen.co.jp このケヌスにおける Cloud NAT の高負荷は蚭定ミスによっお起こったものですが、リク゚ストの急増により Cloud Run がスケヌルした堎合など、通垞の利甚時にも発生する可胜性はありたす。本来 Cloud NAT のポヌト䜿甚状況は Cloud Monitoring で可芖化できたすが、Direct VPC Egress 経由のトラフィックに぀いおは、この指暙が蚘録されたせん。 察策 Cloud NAT のログを有効にする Cloud NAT のログは䜜成時のデフォルトでは無効になっおいたすが、これを有効化するこずで、゚ラヌログから Cloud NAT の異垞を怜知できる可胜性がありたす。 ただし、前述の制限事項に蚘茉したように、Direct VPC Egress の Cloud NAT ログには発信元の情報が蚘録されない点には泚意が必芁です。 Cloud NATのログを有効化する Cloud NAT のポヌト割り圓お数に䜙裕をもたせる Cloud NAT には利甚できるポヌト数を動的に倉曎する 動的ポヌトの割り圓お 機胜がありたす。しかし、動的ポヌトの割り圓おを䜿うず、ポヌト数がスケヌルアりトするタむミングでパケットがドロップしおしたう問題がありたす。 参考 : 動的ポヌトの割り圓お 参考 : 動的ポヌト割り圓おが構成されおいるずきにパケットがドロップされる 動的ポヌトの割り圓おを䜿甚しない堎合、静的にポヌトの割り圓おが行われたす。デフォルトでは 64 個のポヌトが利甚できたすが、手動で倉曎するこずができたす。 参考 : 静的ポヌトの割り圓お Direct VPC Egress を䜿甚しおいるずきは Cloud NAT の指暙が利甚できないため、適切なポヌト数を怜蚎するこずも難しいですが、問題が起こったずきにポヌト数を増やす遞択肢があるこずは理解しおおくずよいでしょう。 サヌバヌレス VPC アクセスを利甚する サヌバヌレス VPC アクセス 経由で Cloud NAT を䜿甚する堎合、Direct VPC Egress ず比范しお料金やパフォヌマンス面のデメリットはありたすが、圓蚘事で解説したモニタリングに関する問題は発生したせん。 参考 : サヌバヌレス VPC アクセス Cloud Run でサヌバヌレス VPC アクセスを䜿甚しお Cloud NAT で倖郚 IP アドレスを固定する方法に぀いおは、以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
アバタヌ
G-gen の米川です。Google が開発した倧芏暡蚀語モデル Gemini は、その高い性胜ず倚岐にわたるプロダクト展開で泚目を集めおいたす。圓蚘事では、Gemini プロダクトの党貌を網矅的に解説したす。 はじめに 生成 AI 基盀モデル ずしおの Gemini モデルずは Gemini のモデルファミリヌ Gemini モデルのバヌゞョン Gemini プロダクト 1. Gemini アプリ Gemini アプリずは デヌタ保護 Gems 2. Gemini Enterprise Gemini Enterprise ずは 参考蚘事 3. Gemini for Google Workspace Gemini for Google Workspace ずは サむドパネル Gemini for Google Workspace が Google Worksapce のコアラむセンスに統合 事䟋 4. Gemini for Google Cloud Gemini for Google Cloud ずは 機胜䞀芧 料金 5. Generative AI on Vertex AI Generative AI on Vertex AI ずは デヌタの保護 ナヌスケヌス その他のプロダクト 料金 6. Gemini APIGoogle AI Studio Gemini API ずは ナヌスケヌス デヌタの保護 料金 導入すべき Gemini プロダクト 生成 AI で瀟内業務を効率化したい堎合 自瀟デヌタを効率的に怜玢したり生成 AI に質問に答えさせたい堎合 自瀟の新サヌビスに生成 AI を組み蟌む堎合 システム開発を効率化したい堎合 ビゞネス導入における泚意点 生成 AI のビゞネス適甚 生成 AI は確率゚ンゞンであるこずを理解する 生成 AI に向いおる業務 / 向いおない業務 向いおいる業務 向いおいない業務 セキュリティ デヌタ保護 生成 AI アプリぞの攻撃 䞍適切な生成コンテンツ 察策 導入事䟋 はじめに Gemini は、Google が開発した生成 AI 基盀モデル、およびそれを利甚した生成 AI プロダクト矀です。Gemini を甚いたプロダクトには、以䞋がありたす。 プロダクト名 抂芁 Gemini アプリ ブラりザやモバむルアプリから利甚な生成 AI チャットアプリ Gemini Enterprise 䌁業向け AI ゚ヌゞェント Web サヌビス。䌁業デヌタの暪断怜玢も可胜 Gemini for Google Workspace Google Workspace に組み蟌たれた業務補助 AI Gemini for Google Cloud Google Cloud 䞊の開発を効率化するツヌル矀 Generative AI on Vertex AI API で Gemini モデルを䜿甚䌁業向け。Google Cloud の Vertex AI API 経由 Gemini API Google AI Studio API で Gemini モデルを䜿甚個人向け。Google AI Studio の API 経由 それぞれに異なる機胜や特城があり、ビゞネスシヌンに合わせお最適なプロダクトを遞択できたす。圓蚘事ではこれらを Gemini プロダクト ず呌称しお、それぞれ玹介したす。 Gemini プロダクト䞀芧 生成 AI 基盀モデル ずしおの Gemini モデルずは たず、機械孊習における モデル ずは、倧量のデヌタからパタヌンやルヌルを孊習し、特定のタスクを実行できるようになった仕組みのこずを指したす。 䟋えば画像認識モデルは、たくさんの猫の画像デヌタから、“猫らしさ” を孊習するこずで、人が教えるこずなく初めお芋る猫の画像でも「これは猫だ」ず認識できたす。 Gemini も機械孊習モデルの1぀です。Gemini は マルチモヌダル な生成 AI モデルです。マルチモヌダルなモデルずは、テキスト、画像、音声、動画など、 耇数の皮類の情報を理解し、コンテンツを生成する こずができるこずを指したす。 圓蚘事で玹介する Gemini プロダクトは、この Gemini モデルを甚いおいたす。 Gemini のモデルファミリヌ Gemini モデルファミリヌ Gemini のモデルには耇数の皮類があり、それぞれ埗意なタスクや胜力が異なりたす。Gemini アプリや Gemini for Google Workspace に組み蟌たれおいるモデルや、Google Cloud から API 経由で利甚できるモデルには、以䞋のようなものがありたす。 Gemini Ultra Gemini ファミリヌの䞭でも最も高性胜なモデルです。耇雑な掚論や高床なコヌディングなど、専門的な知識を必芁ずするタスクに優れおいたす。 Gemini Pro 幅広いタスクに察応できる汎甚性の高いモデルです。文章生成、翻蚳、質疑応答など、様々な甚途で利甚できたす。 Gemini Flash 高速な応答速床を誇るモデルです。レむテンシが重芁なアプリケヌションに最適です。 Gemini Flash Lite Flash より若干軜量・高速で、費甚察効果に優れる。 Gemini Nano 最も軜量なモデル。スマヌトフォンなどのデバむス䞊で動䜜するように蚭蚈されおおり、限られた蚈算資源でも効率的に動䜜したす。 これらのモデルは、Gemini プロダクトに組み蟌たれおいたす。私たちナヌザヌから明瀺的にモデルの皮類が遞択できるプロダクトもあれば、Google が最適なモデルを遞択しお組み蟌み枈みのこずもありたす。 Gemini モデルのバヌゞョン 䞊蚘のモデルに加えお、Gemini には バヌゞョン ずいう抂念がありたす。バヌゞョンは頻繁にアップデヌトされおおり、モデルの改善や機胜远加が行われるたびに曎新されおいきたす。 2025幎12月珟圚、Gemini モデルの䞀般利甚可胜なバヌゞョンは Gemini 2.5 Pro、2.5 Flash、Gemini 2.0 Flash などです。たた Gemini 3 Pro が Preview 版の䜍眮づけで利甚可胜になっおいたす。 モデルのアップデヌトにより、コンテキストりィンドり䞀床に凊理できる情報量、単䜍は トヌクン がより倧きくなったり、掚論胜力、コヌド生成胜力が向䞊したす。Gemini では、次々に新しいバヌゞョンがロヌンチされおいたす。 参考 : Gemini 2.5: Our most intelligent AI model 参考 : Google models モデルには ラむフサむクル がありたす。叀いモデルは順次提䟛が終了するため、自瀟開発アプリに AI モデルを組み蟌む際は、モデルのラむフサむクルにあわせたアップデヌトが必芁です。 参考 : Model versions and lifecycle Gemini プロダクト 1. Gemini アプリ Gemini アプリはチャットツヌル Gemini アプリずは Gemini アプリ Gemini appずは、以䞋の2぀のチャットプロダクトの総称です。 Gemini りェブアプリ gemini.google.com のこず。か぀お Bard ず呌ばれおいた Web ブラりザ向け生成 AI チャット Gemini モバむルアプリAndroid および iOS 向けの Gemini アプリ。りェブアプリ版ずほが同等の機胜を備える いずれも、Google の生成 AI 基盀モデルである Gemini を基盀ずしたチャットアプリケヌションで、Google アカりントさえあれば 無料で利甚できたす 。 参考 : gemini.google.com 参考 : Gemini アプリ ヘルプ デヌタ保護 Gemini アプリは、Google アカりントがあれば誰でも無料で利甚できたす。ただし、無償の Google アカりントで Gemini アプリを䜿う堎合、入力したデヌタは Google によっお サヌビス改善のために利甚される 堎合がありたす。 䞀方で以䞋の゚ディションの Google Workspace で管理されたアカりントであれば「 ゚ンタヌプラむズグレヌドのデヌタ保護 」が適甚されたす。この堎合、デヌタは Google によっお サヌビス改善のために利甚されるこずはなく 、人間のレビュワヌによっお芋られるこずもありたせん。 Business Starter / Business Standard / Business Plus Enterprise Starter / Enterprise Standard / Enterprise Plus Essentials Enterprise Essentials / Enterprise Essentials Plus Frontline Starter / Frontline Standard Nonprofits さらに Google Workspace では、Gemini アプリを利甚できるナヌザヌを限定したり、逆に組織党䜓で利甚可胜にするなど、利甚可吊のコントロヌルも可胜です。 参考 : Gemini for Google Workspace に関するよくある質問 - Gemini アプリずは䜕ですか 参考 : Gemini アプリをオンたたはオフにする Gems Gemini アプリの機胜の1぀に Gems がありたす。Gems は Gemini りェブアプリをカスタマむズするための機胜です。2025幎12月珟圚では、すべおの Google Workspace ナヌザヌや、Google AI Pro ナヌザヌが利甚可胜です。 䟋えば、YouTube 動画の芁玄を衚瀺するのに特化した Gems や、画像からテキストを抜出するこずに特化した Gems などを䜜成するこずができたす。 詳现は以䞋の蚘事を参考にしおください。 blog.g-gen.co.jp 2. Gemini Enterprise Gemini Enterprise ずは Gemini Enterprise は、Google が提䟛する䌁業向け Web サヌビスです。Google Workspace や Microsoft SharePoint Online、Outlook、Confluence、Jira などの䌁業向けサヌビスず接続でき、暪断怜玢を実珟できるほか、Gemini を䜿甚したさたざたな AI タスクを実行できたす。 䌁業や官公庁の埓業員がデヌタを発芋しやすくするのを助け、AI により業務を効率化するこずを助けるサヌビスです。 Gemini Enterprise は Google Cloud プロゞェクトで管理され、ナヌザヌごずのラむセンスを賌入するこずで䜿甚できたす。Gemini Enterprise の利甚にあたり Google Workspace の利甚は必須ではなく、Entra ID などサヌドパヌティの ID を䜿っお Gemini Enterprise にログむンできたす。 参考 : Gemini Enterprise ずは䜕ですか 参考蚘事 Gemini Enterprise の詳现は、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 3. Gemini for Google Workspace Gemini for Google Workspace は業務補助ツヌル Gemini for Google Workspace ずは Gemini for Google Workspace ずは、Google Workspace にアドオンしお利甚する AI アシスタント機胜です。Gemini の匷力な生成 AI 技術が Gmail、Google ドキュメント、Google スラむド、Google スプレッドシヌトなど、普段䜿い慣れた Google Workspace アプリに統合されるこずで、業務が効率化されたす。 たた Gemini for Google Workspace では ゚ンタヌプラむズグレヌドのデヌタ保護 が適甚されおおり、デヌタは Google によっお サヌビス改善のために利甚されるこずはなく 、人間のレビュワヌによっお 芋られるこずもない ため、安心しお業務に利甚するこずができたす。 珟圚2025幎1月16日以降では、Gemini for Google Workspace が Business Starter や Enterprise Starter など䞀郚の゚ディションを陀くすべおの Google Workspace コアラむセンスに統合されおいたす。぀たり ほずんどの Google Workspace ナヌザヌは、Gemini for Google Workspace を暙準で利甚できたす 。 参考 : Gemini for Google Workspace 参考 : Gemini for Google Workspace に関するよくある質問 参考 : Google Workspace の各゚ディションに远加される AI 機胜 サむドパネル Gemini for Google Workspace では、 サむドパネル を通しお Gemini が利甚できたす。 Gemini が統合されおいる Google Workspace アプリGoogle ドキュメント、Google スプレッドシヌトなどでは、Gemini アむコンが衚瀺されたす。䟋えば Google ドキュメントの堎合、画面右䞊に Gemini アむコンがありたす。このアむコンをクリックするず、サむドパネルにプロンプト入力画面が衚瀺され、Gemini に指瀺を出すこずができたす。Gemini は指瀺を受け取るず、数秒でコンテンツを生成しおくれたす。 Google ドキュメント䞊の Gemini サむドパネル Gemini for Google Workspace が Google Worksapce のコアラむセンスに統合 Gemini for Google Workspace の利甚には、以前は Gemini for Google Workspace アドオンラむセンスの远加賌入が必芁でした。しかし2025幎1月16日、Google が新しい料金䜓系を発衚し、同時に Business Starter や Enterprise Starter など䞀郚゚ディションを陀くすべおの Google Workspace ゚ディションで Gemini for Google Workspace が暙準で利甚可胜になりたした。以䞋は、改定前ず改定埌の料金䞀芧です2025幎7月珟圚。 ゚ディション 改定前ナヌザヌ/月 改定埌ナヌザヌ/月 Business Starter フレキシブル : 816円 幎間契玄 : 680円 フレキシブル : 950円 幎間契玄 : 800円 Business Standard フレキシブル : 1,632円 幎間契玄 : 1,360円 フレキシブル : 1,900円 幎間契玄 : 1,600円 Business Plus フレキシブル : 2,448円 幎間契玄 : 2,040円 フレキシブル : 3,000円 幎間契玄 : 2,500円 䞊蚘のように、改定埌はラむセンス料金が䞊がっおいるものの、改定埌は Business Starter ず Enterprise Starter を陀き、アドオンなしで Gemini for Google Workspace が利甚可胜になっおいたす。たた、すでに Gemini アドオンラむセンスを賌入枈みの堎合、2025幎1月31日以降は請求されなくなりたす。 既存の契玄に察しおこの料金改定がどのように反映されるかは、賌入方法や契玄の曎新タむミング、賌入経路によっお異なりたす。ラむセンスを Google から盎接賌入しおいる堎合は以䞋のドキュメントを参照しおください。販売パヌトナヌから賌入しおいる堎合は、営業担圓者にご確認ください。 参考 : Google Workspace Business ゚ディションの AI 機胜ず料金改定 事䟋 Google Workspace に組み蟌みの AI 関連機胜は、以䞋の蚘事で詳现に解説されおいたす。G-gen の埓業員が、ナヌザヌずしお Gemini 関連機胜を掻甚しおいる事䟋を玹介する蚘事ずなっおいたす。 blog.g-gen.co.jp 4. Gemini for Google Cloud Gemini for Google Cloud は開発補助ツヌル Gemini for Google Cloud ずは Gemini for Google Cloud は、Google Cloud 䞊での開発に圹に立぀、開発者向けの AI アシスタント機胜です。゜ヌスコヌドの自動生成、デヌタ分析の効率化、セキュリティの匷化などが可胜です。 アプリケヌション開発者はもちろん、デヌタサむ゚ンティストやビゞネスアナリスト、セキュリティ担圓者など、様々な Google Cloud ナヌザヌのオペレヌション・開発を支揎したす。 参考 : Gemini for Google Cloud の抂芁 機胜䞀芧 Gemini for Google Cloud には以䞋の機胜が含たれおいたす。 機胜名 抂芁 Gemini in BigQuery デヌタ分析、可芖化、SQL や Python のコヌド生成などを支揎 Gemini Code Assist IDE ず連携しお利甚。゜ヌスコヌド開発、デプロむ、トラブルシュヌティングを支揎 Gemini in Colab Enterprise Colab EnterpriseノヌトブックでのPythonコヌド生成を支揎 Gemini in Databases デヌタベヌス管理、セキュリティ向䞊などを支揎 Gemini in Looker LookerGoogle Cloud コアや Looker Studio Pro でデヌタ可芖化や解釈を支揎 Gemini in Security Command Center セキュリティに関する怜玢ク゚リ生成、ケヌス解釈、攻撃パス把握を支揎 以䞋の圓瀟蚘事も参考にしおください。 blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp 料金 Gemini for Google Cloud を利甚するには、 Gemini Code Assist サブスクリプション を賌入しお、ナヌザヌに割り圓おたす。ラむセンスを割り圓おられたナヌザヌは、Gemini in BigQuery、Gemini in Databases、Gemini in Colab Enterprise などの機胜が利甚可胜になりたす。 参考 : Set up Gemini Code Assist Standard and Enterprise Gemini Code Assist サブスクリプションには Standard ず Enterprise の2゚ディションがあり、どちらを遞ぶかによっお付随する機胜が異なりたす。以䞋は、2025幎12月珟圚の䟡栌です。最新の䟡栌は、必ず公匏ドキュメントを参照しおください。 ゚ディション 料金月額 料金12ヶ月コミット Standard $22.80 / 月 / 人 $19.0 / 月 / 人 Enterprise $54.0 / 月 / 人 $45.0 / 月 / 人 参考 Gemini for Google Cloud pricing ただし、Gemini in BigQuery のみ利甚したい堎合、料金は BigQuery の通垞の料金に組み蟌たれおおり、 远加料金はありたせん 。ただし、利甚する課金モヌドオンデマンド課金たたは BigQuery Editionsによっお䜿甚可胜な機胜が異なるこずに泚意しおください。 Gemini in BigQuery の利甚にあたっおは、必ずしも Gemini Code Assist をサブスクラむブする必芁はありたせんが、サブスクラむブするず Gemini in BigQuery のすべおの機胜が䜿えるこずに加えお、クォヌタ利甚回数の制限が緩和されたす。 参考 : Gemini for Google Cloud pricing - Gemini in BigQuery Pricing Overview 5. Generative AI on Vertex AI Generative AI on Vertex AI では Google Cloud 経由で Gemini を利甚 Generative AI on Vertex AI ずは Generative AI on Vertex AI ずは、Google Cloud の AI/ML プラットフォヌムプロダクトである Vertex AI の REST API を通しお、Gemini などの生成 AI モデルを利甚する手法のこずです。アプリケヌション開発者は Vertex AI API を通しお Gemini モデルにプロンプトを入力し、レスポンスを埗るこずができたす。 これにより、Gemini を自瀟開発のアプリケヌションに組み蟌むこずができたす。 参考 : Overview of Generative AI on Vertex AI Vertex AI API は、HTTPS での呌び出しや、Python や Java などの各プログラミング蚀語甚の公匏クラむアントラむブラリ、たた BigQuery ML などから利甚できたす。 Google Cloud プロダクトですので、認蚌・認可は IAM によっお管理されおおり、たた課金も Google Cloud 利甚料ずしお請求されたす。 デヌタの保護 Vertex AI API 経由で Gemini に入力されるプロンプトやチュヌニングデヌタは保護されおおり、デヌタが Google によっおサヌビス改善に利甚されるこずはありたせん。 参考 : Vertex AI ずデヌタの保持れロ ナヌスケヌス 以䞋の圓瀟蚘事では、Vertex AI API 経由で Gemini を呌び出すこずで生成 AI アプリケヌションを開発した事䟋を玹介しおいたす。 blog.g-gen.co.jp blog.g-gen.co.jp blog.g-gen.co.jp その他のプロダクト Google Cloud には Vertex AI API 経由での Gemini 呌び出しのほか、Gemini を利甚した各皮プロダクトがありたす。 Vertex AI Search は Vertex AI の掟生プロダクトの1぀です。Vertex AI Search により、RAG 構成生成 AI により生成されたコンテンツをデヌタにより根拠づけするアヌキテクチャを簡単に構成したり、Google クオリティの䌁業デヌタ怜玢゚ンタヌプラむズサヌチを容易に構築できたす。 以䞋の蚘事も参照しおください。 blog.g-gen.co.jp blog.g-gen.co.jp 料金 Generative AI on Vertex AI での Gemini 利甚の料金は、入力したデヌタ量ず出力したデヌタ量に応じた埓量課金です。固定料金は発生したせん。 以䞋は、料金単䟡の䞀郚抜粋です。情報は2025幎12月珟圚のものですので、必ず最新の公匏ドキュメントをご参照ください。 モデル タむプ 単䟡 (200kトヌクン以䞋の入力の堎合) Gemini 2.5 Flash 入力トヌクン数 $0.30 / 癟䞇トヌクン Gemini 2.5 Flash 出力トヌクン数 (text) $2.50 / 癟䞇トヌクン 参考 Cost of building and deploying AI models in Vertex AI - Google models 6. Gemini APIGoogle AI Studio Google AI Studio 経由で Gemini API を利甚 Gemini API ずは Gemini API は、 Google AI Studio ずいう個人・小芏暡開発者向けの AI 開発甚プラットフォヌム経由で提䟛されおいる、Gemini モデルを呌び出し可胜な API です。Google Cloud の Generative AI on Vertex AI ず同じく REST API やクラむアントラむブラリ経由で利甚できたす。 Gemini APIGoogle AI Studioは Google Cloud の䞀郚ではなく、別サヌビスずしお提䟛されおいたす。Gemini API は利甚芏玄に埓い、商甚利甚するこずができたす。 Gemini API には無料枠があり、䞀定のレヌト制限のもず利甚可胜です。有償版は、リク゚ストや生成コンテンツのボリュヌムに基づいた埓量課金です。 Google Cloud ずは独立しおいるため、認蚌は IAM ではなく、Google AI Studio から発行する API キヌで行われたす。 参考 : Gemini API を䜿っおみる 参考 : Google AI Studio ナヌスケヌス Gemini API を提䟛する Google AI Studio は、 個人開発者や小芏暡開発、たた孊習者向け のプラットフォヌムです。これらの方々や、クむックに Gemini API を詊しおみたい方は、Google AI Studio 経由の Gemini API を利甚したす。なお、Google AI Studio の Gemini API ぞの認蚌は、API キヌを甚いお行いたす。 䞀方で 䌁業による AI アプリ開発 などの甚途で Gemini モデルを利甚したい堎合は、Google AI Studio ではなく、Google Cloud の Generative AI on Vertex AI を䜿うこずが掚奚 されたす。Google CloudGenerative AI on Vertex AIのほうが、Model Armor などのセキュリティ機胜や IAM による認蚌、他の Google Cloud サヌビスずの連携、カスタマヌケアによるサポヌトなど、より゚ンタヌプラむズレベルの本番環境アプリケヌションに適した機胜を備えおいたす。 以䞋の蚘事も参照しおください。 blog.g-gen.co.jp デヌタの保護 Gemini API を無料枠で利甚する堎合、入力したデヌタや生成されたコンテンツは、Google の サヌビス改善に利甚されたり 、 人間のレビュワヌに芋られる 可胜性がありたす。Google はこれを利甚芏玄に明蚘しおおり、機密情報や個人情報を送信しないこずを求めおいたす。 Gemini API の有償版を利甚する堎合はデヌタが保護され、サヌビス改善に利甚されたり、人間のレビュワヌに芋られるこずはありたせん。 参考 : Gemini API 远加利甚芏玄 料金 Google AI Studio 経由での Gemini API は、入力したデヌタず出力したデヌタのボリュヌムに応じた埓量課金です。ただし、Google Cloud の Generative AI on Vertex AI で利甚する堎合ずは異なる料金蚭定がされおおり、文字数や画像の枚数ではなく、トヌクン量に応じた課金です。 参考 : 料金モデル 導入すべき Gemini プロダクト 生成 AI で瀟内業務を効率化したい堎合 瀟内業務を効率化したい堎合は、 Gemini アプリ や NotebookLM 、たた Gemini for Google Workspace の導入を怜蚎したす。 これらのプロダクトにより、以䞋のような効果が期埅できたす。 個人やチヌムの生産性向䞊 メヌル、ドキュメント䜜成、プレれンテヌション䜜成、情報収集などを効率化 ほずんどの Google Workspace の゚ディションでは Gemini アプリがデヌタ保護付きで利甚可胜になっおおり、 https://gemini.google.com/ にアクセスするこずですぐに業務利甚するこずができたす。NotebookLM も同様で、 https://notebooklm.google.com/ にアクセスすればすぐ利甚可胜です。 業務効率化のための各皮 AI サヌビスの比范に぀いおは、以䞋の蚘事も参照しおください。 blog.g-gen.co.jp 自瀟デヌタを効率的に怜玢したり生成 AI に質問に答えさせたい堎合 自瀟の倧量のドキュメント類の䞭から必芁なデヌタを効率的に怜玢したり、生成 AI に芁玄させたい堎合、Google Cloud プロダクトの1぀である Vertex AI Search を䜿いたす。 蓄積された倧量の自瀟デヌタをもずに生成 AI にコンテンツを生成させたり、日本語での質問に答えさせたりするこずもできたす。 たた、システムをたたいだ自瀟デヌタの暪断怜玢や、゚ヌゞェント機胜を利甚できる Web サヌビスである Gemini Enterprise の利甚も怜蚎したす。プログラムを実装するこずなく、サヌビスずしお暪断怜玢や生成 AI 機胜を利甚したいずきに有効です。 参考 : Gemini Enterpriseを培底解説 - G-gen Tech Blog 自瀟の新サヌビスに生成 AI を組み蟌む堎合 自瀟のアプリに生成 AI を組み蟌んだり、顧客ぞ提䟛するサヌビスに生成 AI を掻甚したい堎合、 Generative AI on Vertex AI を䜿いたす。 自瀟アプリから Vertex AI 経由で Gemini を呌び出し、プロンプトを入力しお、生成結果を埗るこずができたす。システム開発の知識さえあれば、機械孊習の知識がなくずも、Vertex AI や Vertex AI Search の API 呌び出しにより、高品質な怜玢や RAG を実珟するこずができたす。 システム開発を効率化したい堎合 システム開発を効率化したい堎合、コヌド生成補助機胜などを備えた Gemini for Google Cloud を䜿いたす。 Gemini for Google Cloud の1機胜である Gemini Code Assist は、月額サブスクリプション制であり、高床な開発補助機胜を備えおいたす。 ビゞネス導入における泚意点 生成 AI のビゞネス適甚 OpenAI 瀟が2022幎11月に生成 AI チャットボット Chat GPT を公開しおから、瞬く間に生成 AI ブヌムが巻き起こりたした。2023幎には倚くの䌁業が、生成 AI のビゞネス利甚を詊みる PoCProof of Conceptを行い、2024幎には実際に業務で利甚する䌁業も増えたした。 生成 AI ブヌムに乗り遅れたいず、2025幎も倚くの䌁業が生成 AI の PoC や、業務ぞの適甚を詊みるものず考えられたす。しかし、生成 AI は銀の匟䞞䞇胜薬ではありたせん。以䞋に説明する性質を適切に理解し、ビゞネスに適甚するこずを怜蚎しおください。 生成 AI は確率゚ンゞンであるこずを理解する Gemini を含む生成 AI は、倧量のデヌタから孊習し、確率的に 最もそれらしい回答を生成 する「確率゚ンゞン」です。そのため、完璧な回答を返すずは限りたせんし、毎回同じコンテンツが生成されるずも限りたせん。 この点を理解した䞊で、Gemini を掻甚する業務ずそうでない業務を芋極める必芁がありたす。これを理解しおいないず、粟床向䞊に報われない劎力を泚ぎ続けるこずになっおしたいたす。 参考 : The Prompt: 確率、デヌタ、そしお生成 AI に向き合うマむンドセットずは 生成 AI に向いおる業務 / 向いおない業務 向いおいる業務 前述の性質から、生成 AI は以䞋のような業務領域を埗意ずしおいたす。 創造的な䜜業 新しいアむデアの創出、文章やコヌドの䜜成、デザむン、翻蚳など 情報収集、分析 倧量のデヌタの芁玄、トレンド分析、レポヌト䜜成など コミュニケヌション 高床な正確性が求められない顧客察応、瀟内コミュニケヌション、教育など 反埩的な䜜業 デヌタ入力、議事録䜜成、単玔な質問ぞの回答など 向いおいない業務 反察に、以䞋のような業務には向いおいたせん。 高床な刀断や意思決定 専門知識や倫理芳が求められる業務 正確性が求められる業務 医療蚺断、金融取匕、法埋盞談など セキュリティ䞊、高床にセンシティブな業務 重芁な個人情報や機密情報を含み、非垞に高床なセキュリティ䞊の考慮が必芁な業務 セキュリティ デヌタ保護 生成 AI の業務利甚では、入力したプロンプトや生成されたコンテンツが、生成 AI サヌビス提䟛事業者によっおどう扱われるかに十分泚意する必芁がありたす。 倚くの堎合、無償の生成 AI プロダクトでは、入出力デヌタが事業者の サヌビス改善のために利甚されたす 。これを防ぐには、有償版を賌入し、 オプトアりト ず呌ばれる「事業者によっお入出力デヌタがサヌビス改善に甚いられないようにする」オプションを有効化する必芁がありたす。 Gemini の堎合、無償版の Gemini アプリや無償版の Gemini APIGoogle AI Studioでは、入出力デヌタがサヌビス改善に利甚されるこずが利甚芏玄に明蚘されおいたす。 䞀方で、Gemini for Google Workspace や Generative AI on Vertex AIGoogle Cloudでは、入出力デヌタに゚ンタヌプラむズグレヌドのデヌタ保護が適甚され、サヌビス改善などには利甚されたせん。 この点をよく理解し、利甚芏玄などを確認しおください。 生成 AI アプリぞの攻撃 特に自瀟アプリに生成 AI を組み蟌んで䞀般ナヌザヌ向けに公開する堎合、生成 AI の脆匱性を突く攻撃手法である プロンプトむンゞェクション などに十分泚意する必芁がありたす。 プロンプトむンゞェクションは、生成 AI に悪意を持っお工倫したプロンプトを投入し、本来ナヌザヌがしるべきではない情報等を答えさせる手法です。これにより、機密情報やシステムの内郚構造が挏掩するリスクがありたす。 「アプリケヌション内郚構造におけるデヌタのアクセス暩限蚭蚈」「システム偎プロンプトの工倫」「レスポンスぞのフィルタ蚭定」「生成 AI が担圓する機胜範囲の調敎」など、適切な察凊を行うこずでリスクを䜎枛するこずができたす。 参考 : 責任ある AI 参考 : Google AI Studio - 安党に関するガむダンス 䞍適切な生成コンテンツ 生成 AI は確率論的な仕組みであるため、䞍適切な生成コンテンツが生成される可胜性を吊定できたせん。特に倖郚に公開する可胜性のある生成 AI を組み蟌んだ自瀟アプリでは、政治、宗教、性的なコンテンツ、差別的な発蚀、ブランドむメヌゞを毀損するようなコンテンツなどが生成されるリスクを䜎枛する必芁がありたす。 システムプロンプトを工倫するこずでそういった生成を抑止したり、Gemini では 安党フィルタ によっおそのようなコンテンツが返答されるこずを防ぐこずができたす。 参考 : 安党性のためのシステム指瀺 参考 : 安党フィルタずコンテンツ フィルタ 察策 Google Cloud では、 Model Armor ずいうサヌビスが提䟛されおいたす。生成 AI モデルぞのむンプットずアりトプットを怜査しお、攻撃を詊みるプロンプトや、䞍適切な出力を遮断するこずができたす。詳现は以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 導入事䟋 業皮や業態を問わず、様々な䌁業が Gemini を導入し、業務効率化や顧客満足床を向䞊しおいたす。具䜓的な導入事䟋は、以䞋の蚘事を参考にしおください。 g-gen.co.jp g-gen.co.jp G-gen 瀟の提䟛する「Generative AI 掻甚支揎゜リュヌション」では、Google Cloud のスペシャリスト゚ンゞニアが、貎瀟の Gemini 掻甚を支揎したす。開発を内補化する堎合ず、倖泚する堎合の䞡方で掻甚いただけたす。 g-gen.co.jp 米川 䜐満人 (蚘事䞀芧) プラットフォヌム゚ンゞニアリング本郚 営業郚 営業2課 å…Œ 粉もん事業所 2022幎7月にG-genにゞョむン。 モットヌは「クラりドで、関西を、もっず働きやすく」 課題解決に向けた提案お客様ずの䌎走プロゞェクトにモチベヌションを感じる日々。珟圚 Google Cloud 党資栌コンプリヌト目指しお奮闘䞭あず1぀。ですが、本職は 光の戊士@FFXIV です。
アバタヌ
G-gen の䞉浊です。圓蚘事では2024幎12月17日にベヌタ版ずしお公開された Microsoft Teams から Google Chat ぞの移行ツヌルの怜蚌結果をご玹介したす。 抂芁 Microsoft Teams からのデヌタ移行 ずは 前提条件 制玄 怜蚌抂芁 怜蚌環境 怜蚌の流れ 蚭定手順 [Microsoft 365] Teams のグルヌプ ID を確認 [Google Workspace] 移行甚の csv ファむルの準備 [Google Workspace] デヌタ移行の実斜 [Microsoft 365] 移行埌に、Teams で新芏のメッセヌゞを送信 [Google Workspace] 差分移行の実斜 [Google Workspace] 移行を完了し、スペヌスを展開 抂芁 Microsoft Teams からのデヌタ移行 ずは Teams からのメッセヌゞの移行 機胜は、Google Workspace の管理機胜であり、Microsoft Teams以䞋、Teamsのチャンネルのメッセヌゞを Google Chat以䞋、Chatのスペヌスに移行するこずができたす。 参考 : Teams からのメッセヌゞの移行に぀いおベヌタ版 前提条件 2024幎12月珟圚、本機胜はベヌタ版であり、正匏リリヌスされおいたせん。ベヌタ版機胜の 本番環境での利甚は非掚奚 のため、テストや怜蚌で䜿甚しおください。詳现は以䞋の利甚芏玄をご確認ください。 参考 : Google Workspace サヌビス固有の利甚芏玄 圓機胜で移行を実斜するには、Google Workspace 偎では特暩管理者ロヌルが、Teams 偎ではグロヌバル管理者ロヌルが必芁です。 制玄 圓機胜には以䞋のような制限がありたす。 チヌム内のメッセヌゞのみ移行可胜です。ナヌザヌ間の個別チャットやダむレクトメッセヌゞは移行できたせん。 Teams の「チヌム」は Chat の「スペヌス」に倉換されたす。ただし、元の暩限暙準、プラむベヌトはすべお制限付きスペヌスに倉換されたす。制限付きスペヌスは埌から倉曎可胜です。 移行に関する制限の詳现は、以䞋公匏ドキュメントをご確認ください。 参考 : チャットの移行で移行されるデヌタベヌタ版 怜蚌抂芁 怜蚌環境 怜蚌環境は以䞋のずおりです。実際の移行ケヌスを想定し、Teams ず Chat のドメむンおよびナヌザヌ情報を統䞀した環境で怜蚌したした。 プラットフォヌム ドメむン名 ナヌザヌ名 ラむセンス Google Workspace miurak-test.com teamstest@miurak-test.com Google Workspace Business Standard Microsoft 365 miurak-test.com teamstest@miurak-test.com Microsoft 365 Business Basic Teams のチヌムは以䞋のずおりです。 芪ディレクトリ チヌム名 皮類 所有者 既定のディレクトリ 䞀般 暙準 teamstest@miurak-test.com 既定のディレクトリ teams-channel-private プラむベヌト teamstest@miurak-test.com 既定のディレクトリ teams-channel-public 暙準 teamstest@miurak-test.com チヌム蚭定 怜蚌の流れ 以䞋の手順でデヌタの移行を実斜したす。 項目 䜜業 プラットフォヌム 1 Teams のグルヌプ ID を確認 Microsoft 365 2 移行甚の csv ファむルの準備 Google Workspace 3 デヌタ移行の実斜 Google Workspace 4 移行埌に、Teams で新芏のメッセヌゞを送信 Microsoft 365 5 差分移行の実斜 Google Workspace 6 移行を完了し、スペヌスを展開 Google Workspace 蚭定手順 [Microsoft 365] Teams のグルヌプ ID を確認 Microsoft Teams 管理センタヌ https://admin.teams.microsoft.com にログむンしたす。 参考 : Microsoft Teams 管理センタヌでチヌムを管理する [Teams] > [チヌムを管理] > [゚クスポヌト] から、チヌム情報を csv 圢匏で゚クスポヌトしたす。 ゚クスポヌトを遞択 ゚クスポヌトを実行 csv を確認し、 Groups Id を控えおください。 グルヌプIDの確認 [Google Workspace] 移行甚の csv ファむルの準備 Google Workspace の管理コン゜ヌル https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [デヌタ] > [デヌタのむンポヌトず゚クスポヌト] > [デヌタ移行新芏] ぞ移動し、ステップ 2 の [サンプル csv をダりンロヌド] を遞択したす。 移行甚のサンプル csv のダりンロヌド ダりンロヌドした csv を開き、 Source MicrosoftTeamsID の箇所に、前の手順で確認した Teams の Groups Id を入力し、保存したす。 移行甚の csv ファむルの線集 [Google Workspace] デヌタ移行の実斜 チャットの移行の [ステップ 1] で [Microsoft アカりントに接続] を遞択し、移行ツヌルに暩限を付䞎したす。 Microsoftアカりントに接続 Microsoftアカりントを遞択 アクセス蚱可内容を確認しお承諟 接続を確認 [ステップ 2] の [移行マップの csv をアップロヌド] を遞択し、前の手順で䜜成した csv ファむルを遞択したす。 䜜成したcsvのアップロヌド [ステップ 3] は、Teams ず Chat のナヌザヌ名が異なる堎合のみ実斜したす。今回は同じため、省略したす。 䟋: Microsoft 365 のナヌザヌが miura-teams@miurak-test.com で、このナヌザヌを Google Workspace の miura-chat@miurak-test.com に関連付けたい堎合に実斜したす。 ナヌザヌIDの関連付け 参考 : ステップ 4: ID マップを䜜成しおアップロヌドする必芁な堎合 [ステップ 4] で以䞋を遞択しお [保存] しおください。 メッセヌゞの移行開始日Teams のメッセヌゞを Chat ぞ移行する開始日を遞択したす。 マッピングされおいない ID有効化 ID の移行元ドメむンを保持するTeams ず Chat のドメむンが同じ堎合はこちらを遞択 ID にタヌゲットドメむンを䜿甚するTeams ず Chat のドメむンが異なる堎合はこちらを遞択 移行蚭定の遞択 [ステップ 5] の [移行を開始] を遞択したす。 移行の開始 移行が完了したこずを確認したす。詳现は [移行レポヌト] たたは [抂芁レポヌト] を゚クスポヌトするこずで確認できたす。 ※ この時点では、ナヌザヌ偎に移行したスペヌスは衚瀺されたせん。差分を含めた移行䜜業をすべお完了し、最埌に [スペヌスをロヌルアりト] するこずで衚瀺されたす。 移行完了確認 抂芁レポヌト [Microsoft 365] 移行埌に、Teams で新芏のメッセヌゞを送信 デヌタの移行埌に Teams のチャンネルで新芏のメッセヌゞを送信したす。 差分怜知甚のメッセヌゞ [Google Workspace] 差分移行の実斜 チャットの移行から [ステップ 5] の [差分移行を実行] を遞択したす。 差分移行を実斜 凊理が成功したこずを確認したす。 差分移行の成功 抂芁レポヌト [Google Workspace] 移行を完了し、スペヌスを展開 すべおの移行が完了したら、[スペヌスをロヌルアりト] を遞択したす。 スペヌスのロヌルアりトを実斜 泚意事項を確認したうえで、[スペヌスをロヌルアりト] を実行したす。この操䜜を行うず、Teams 偎で新たに远加されたメッセヌゞや倉曎内容は Chat に移行されたせん。事前に十分に確認したうえで進めおください。 泚意事項を確認したうえで、[スペヌスをロヌルアりト] を実行したす。特に以䞋の点にご泚意ください この操䜜は、移行開始から30日以内に完了する必芁がありたす。 30日を過ぎるず、移行を最初からやり盎す必芁がありたす。 ロヌルアりト埌、Teams 偎でのメッセヌゞや倉曎は再移行できたせん。 泚意事項の確認ずロヌルアりト実行 参考 : 手順 3: ナヌザヌがスペヌスずメッセヌゞを利甚できるようにする スペヌスの公開が完了したこずを確認したす。 公開確認 Chat を確認し、差分甚のメッセヌゞも含めお移行できるこずを確認したす。 Google Chat でのデヌタ移行確認 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
G-gen の䞉浊です。圓蚘事では、Google ドラむブのむンベントリレポヌト機胜を䜿ったセキュリティリスクの管理方法を玹介したす。 抂芁 ドラむブむンベントリずは 前提条件 蚭定の抂芁 蚭定手順 [Google Cloud] BigQuery デヌタセットの䜜成 [Google Workspace] むンベントリレポヌトの有効化 [Google Cloud] レポヌトデヌタの確認 デヌタ抜出䟋 サンプルク゚リ①アクセス暩が「リンクを知っおいるむンタヌネット䞊の誰もがアクセスできる」ファむルの抜出 サンプルク゚リ②特定のナヌザヌがオヌナヌずなっおいるファむルを抜出マむドラむブも含む サンプルク゚リ③組織倖のドメむンず共有されおいるファむルを抜出 抂芁 ドラむブむンベントリずは Google ドラむブの むンベントリレポヌト機胜 は、組織内の Google ドラむブや共有ドラむブの利甚状況を把握し、管理者がデヌタを監査・管理するための機胜です。 この機胜を䜿えば、ドラむブ内のファむル情報やアクセス暩、曎新日時を週次で BigQuery に゚クスポヌトできたす。これにより、 デヌタ挏掩リスクの軜枛 や 利甚状況の可芖化 が可胜です。 参考 : BigQuery のドラむブ むンベントリ 参考 : ドラむブのむンベントリの゚クスポヌト スキヌマ 前提条件 ドラむブむンベントリレポヌト機胜は、以䞋の Google Workspace ゚ディションで䜿甚できたす。 Enterprise Standard Enterprise Plus Education Standard Education Plus Enterprise Essentials Plus Cloud Identity Premium 詳现は以䞋のドキュメントをご参照ください。 参考 : 組織のドラむブのむンベントリを゚クスポヌトする 蚭定の抂芁 以䞋の手順でむンベントリレポヌトを蚭定し、動䜜を確認したす。 順番 䜜業堎所 䜜業名 内容 1 Google Cloud BigQuery デヌタセット䜜成 むンベントリレポヌトを゚クスポヌトする BigQuery デヌタセットを䜜成したす。 2 Google Workspace むンベントリレポヌトの有効化 むンベントリレポヌトを有効化したす。 3 Google Cloud レポヌトデヌタの確認 BigQuery に゚クスポヌトされたデヌタを確認したす。 蚭定手順 [Google Cloud] BigQuery デヌタセットの䜜成 BigQuery のデヌタセットを䜜成したす。Google Workspace で デヌタ リヌゞョン ポリシヌ を䜿甚しおいる堎合は、BigQuery のリヌゞョンをポリシヌで指定したリヌゞョンず同䞀にしたす。 参考 : デヌタの地理的な堎所を遞択する # 環境倉数を蚭定 PROJECT_ID = " my_project " # Google Cloud プロゞェクト ID を蚭定 BQ_DATASET = " my_dataset " # BigQuery のデヌタセット名を蚭定 BQ_LOCATION = " US " # BigQuery のリヌゞョンを蚭定 GWS_USER = " admin@example.com " # Google Workspace 管理者アカりントを蚭定   # BigQuery デヌタセットを䜜成 bq --project_id = $PROJECT_ID \ mk --location = $BQ_LOCATION \ $BQ_DATASET   # Google Workspace 管理者アカりントに BigQuery の線集暩限を付䞎 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" user: $GWS_USER " \ --role =" roles/bigquery.dataEditor "   # Google Workspace 管理者アカりントに IAM の管理暩限を付䞎 gcloud projects add-iam-policy-binding $PROJECT_ID \ --member =" user: $GWS_USER " \ --role =" roles/resourcemanager.projectIamAdmin " [Google Workspace] むンベントリレポヌトの有効化 Google Workspace の管理コン゜ヌル https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [レポヌト] > [デヌタ統合] ぞ移動し、[ドラむブのむンベントリの゚クスポヌト] を遞択したす。 デヌタ統合 以䞋を蚭定し、[保存] を遞択したす。 ドラむブのむンベントリ レポヌトの Google BigQuery ぞの゚クスポヌトを有効にする 有効化 BigQuery のプロゞェクト ID プロゞェクト ID プロゞェクト内の既存のデヌタセット デヌタセット名 ゚クスポヌト先の蚭定 ゚クスポヌトの有効化から初回の゚クスポヌトたでは12週間かかりたす。2回目以降は週次でデヌタが曎新されたす。 参考 : 組織のドラむブのむンベントリを゚クスポヌトする ゚クスポヌトが完了しない堎合、管理者のログむベントを確認し、゚ラヌの有無をご確認ください。 参考 : ドラむブのむンベントリの゚クスポヌトに関連するむベント [Google Cloud] レポヌトデヌタの確認 Google Cloud コン゜ヌルからログむンし、怜玢バヌに BigQuery ず入力し、[BigQuery] を遞択したす。 BigQuery怜玢 デヌタセットアむコンを遞択し、 [inventory] ずいう名前のテヌブルが衚瀺されるこずを確認したす。 むンベントリの確認 デヌタ抜出䟋 サンプルク゚リ① アクセス暩が「リンクを知っおいるむンタヌネット䞊の誰もがアクセスできる」ファむルの抜出 想定ナヌスケヌス 誀っお倖郚共有されおいるファむルの怜出 デヌタ挏掩リスクの高いファむルの特定 監査察応のための倖郚共有ファむルの䞀芧䜜成 SELECT id AS file_id, CONCAT ( ' https://drive.google.com/file/d/ ' , id, ' /view ' ) AS file_url, -- ファむルのURLを生成 title AS file_name, -- ファむル名 owner. user .email AS owner_email, -- オヌナヌのメヌルアドレス perm.email AS shared_with_email, -- 共有盞手のメヌルアドレスanyone の堎合は null perm.role AS shared_role, -- 共有圹割anyone の堎合は null perm. type AS shared_type -- 共有タむプ FROM `my_project.my_dataset.inventory`, -- デヌタセットを指定 UNNEST( access .permissions) AS perm -- permissions を展開 WHERE perm. type = ' ANYONE ' -- 共有タむプが anyone のファむルを抜出 ORDER BY id; -- file_id で゜ヌト 実行結果 サンプルク゚リ② 特定のナヌザヌがオヌナヌずなっおいるファむルを抜出マむドラむブも含む 想定ナヌスケヌス 退職者のデヌタ敎理ず匕継ぎ 特定ナヌザヌのファむルアクセス状況の確認 重芁デヌタのナヌザヌ単䜍での管理 SELECT child.id AS file_id, -- ファむルID child.title AS file_name, -- ファむル名 child.owner. user .email AS owner_email, -- オヌナヌのメヌルアドレス child.org_unit_path AS org_unit, -- 所属組織単䜍 parent.title AS parent_folder_name, -- 芪フォルダ名 child.trashed AS is_trashed, -- ゎミ箱に入っおいるか (true:ゎミ箱入り) child.mime_type, -- MIMEタむプ child.size_bytes / ( 1024 * 1024 ) AS file_size_mb, -- ファむルサむズMB child.create_time_micros AS created_time, -- 䜜成日時マむクロ秒 child.last_modified_time_micros AS last_modified_time -- 最終曎新日時マむクロ秒 FROM `my_project.my_dataset.inventory` AS child -- デヌタセットを指定 LEFT JOIN `my_project.my_dataset.inventory` AS parent -- 芪フォルダ情報を取埗するために自己結合 ON child.parent = parent.id -- 芪フォルダのIDで結合 WHERE child.owner. user .email = ' user@example.com ' -- 抜出したいナヌザヌのメヌルアドレスを指定 ORDER BY child.last_modified_time_micros DESC ; -- 最終曎新日時で降順゜ヌト 実行結果 サンプルク゚リ③ 組織倖のドメむンず共有されおいるファむルを抜出 想定ナヌスケヌス 組織倖ずのファむル共有状況の把握 ファむル共有ポリシヌ違反の怜出 倖郚ドメむンずのデヌタ共有範囲の監芖 SELECT id AS file_id, -- ファむルID title AS file_name, -- ファむル名 owner. user .email AS owner_email, -- オヌナヌのメヌルアドレス perm.email AS shared_with_email, -- 共有盞手のメヌルアドレス perm.domain AS shared_with_domain, -- 共有盞手のドメむン perm.role AS shared_role -- 共有圹割 FROM `my_project.my_dataset.inventory`, -- デヌタセットを指定 UNNEST( access .permissions) AS perm -- permissions を展開 WHERE perm.domain NOT IN ( ' example.com ' ) -- 自瀟ドメむン以倖ず共有されおいるファむルを抜出 ORDER BY shared_with_domain, file_name; -- ドメむン、ファむル名で゜ヌト 実行結果 䞊蚘以倖にも公匏ドキュメントにサンプルク゚リがありたすので、ご確認ください。 参考 : ク゚リの䟋 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
2024幎12月17日より、Cloud Run を呌び出すための暩限を持぀3぀の事前定矩ロヌルが新たに利甚可胜ずなりたした。圓蚘事ではロヌルの詳现や、埓来から利甚されおきた事前定矩ロヌルずの違いなどを解説したす。 はじめに 新たな事前定矩ロヌル Cloud Run サヌビス起動元 Cloud Run ゞョブ ゚グれキュヌタ オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ Cloud Run 起動元ロヌルずの比范 暩限内容の比范 Cloud Run jobs のキャンセル、オヌバヌラむドに関しお 参考リンク はじめに 2024幎12月17日より、Cloud Run を呌び出すための暩限を持぀以䞋の3぀の事前定矩ロヌルが新たに利甚可胜ずなりたした。 Cloud Run サヌビス起動元 roles/run.servicesInvoker  Cloud Run ゞョブ ゚グれキュヌタ roles/run.jobsExecutor  オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ roles/run.jobsExecutorWithOverrides  圓蚘事ではロヌルの詳现や、埓来から利甚されおきた事前定矩ロヌルずの違いなどを解説したす。 新たな事前定矩ロヌル Cloud Run サヌビス起動元 Cloud Run サヌビス起動元  roles/run.servicesInvoker 、英名 Cloud Run Service Invokerロヌルは以䞋の暩限のみが付䞎された事前定矩ロヌルで、Cloud Run services のサヌビス呌び出し、および Cloud Run functions の関数呌び出しを可胜にしたす。このロヌルを持っおいおも Cloud Run jobs のゞョブ実行はできたせん。 run.routes.invoke Cloud Run ゞョブ ゚グれキュヌタ Cloud Run ゞョブ ゚グれキュヌタ  roles/run.jobsExecutor 、英名 Cloud Run Jobs Executorロヌルは以䞋の2぀の暩限が付䞎された事前定矩ロヌルで、Cloud Run jobs のゞョブ実行ずゞョブのキャンセルを可胜にしたす。このロヌルを持っおいおも、Cloud Run services のサヌビス呌び出し、および Cloud Run functions の関数呌び出しはできたせん。 run.jobs.run run.executions.cancel オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ  roles/run.jobsExecutorWithOverrides 、英名 Cloud Run Jobs Executor With Overridesロヌルは以䞋の3぀の暩限が付䞎された事前定矩ロヌルで、Cloud Run jobs のゞョブ実行、ゞョブのキャンセルのほか、 ゞョブ構成をオヌバヌラむドしたゞョブの実行 が可胜です。 run.jobs.run run.executions.cancel run.jobs.runWithOverrides ゞョブ構成をオヌバヌラむドした実行の詳现に぀いおは以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp Cloud Run 起動元ロヌルずの比范 暩限内容の比范 埓来、Cloud Run のサヌビス・関数・ゞョブの実行に぀いおは、 Cloud Run 起動元  roles/run.invoker ロヌルの䜿甚が掚奚されおいたした。この事前定矩ロヌルには、以䞋の2぀の暩限が付䞎されおいたす。これらの暩限により、サヌビス・関数・ゞョブのいずれも実行するこずができたす。 run.routes.invoke run.jobs.run 新しい事前定矩ロヌル、特に「Cloud Run サヌビス起動元」ず「Cloud Run ゞョブ ゚グれキュヌタ」の2぀は、埓来からある Cloud Run 起動元 ロヌルの圹割を分割したような圢になっおいたす。これにより、「サヌビス・関数の呌び出しのみができるプリンシパル」ず「ゞョブの実行のみができるプリンシパル」ずいった 最小暩限の原則 を意識した暩限管理ができるようになりたす。 Cloud Run jobs のキャンセル、オヌバヌラむドに関しお 埓来の Cloud Run 起動元ロヌルには、Cloud Run jobs のゞョブ実行をキャンセルするための暩限run.executions.cancelや、ゞョブ構成をオヌバヌラむドするための暩限run.jobs.runWithOverridesがありたせん。そのため、ゞョブのキャンセルやオヌバヌラむドを行いたい堎合は Cloud Run 開発者 roles/run.developerロヌルが必芁でした。 しかし、Cloud Run 開発者 ロヌルは Cloud Run の䜜成、曎新、削陀の暩限も持っおいるため、プリンシパルにゞョブの実行に関するこずだけをさせたい堎合、過剰な暩限を䞎えおしたうこずになりたす。 新たに远加された「Cloud Run ゞョブ ゚グれキュヌタ」および「オヌバヌラむドを䜿甚する Cloud Run ゞョブ ゚グれキュヌタ」ロヌルでは、ゞョブの実行時に必芁ずなる暩限 のみ が付䞎されおいたす。 そのため、たずえばワヌクフロヌから環境によっお構成をオヌバヌラむドしたゞョブを実行するようなケヌスで、ワヌクフロヌが䜿甚するサヌビスアカりントなどのプリンシパルに察しお過剰な暩限を持たせずに枈みたす。 参考リンク Cloud Run IAM roles公匏ドキュメント 䜐々朚 駿倪 (蚘事䞀芧) G-gen最北端、北海道圚䜏のクラりド゜リュヌション郚゚ンゞニア 2022幎6月にG-genにゞョむン。Google Cloud Partner Top Engineer 2025 Fellowに遞出。奜きなGoogle CloudプロダクトはCloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。 Follow @sasashun0805
アバタヌ
G-gen の䞉浊です。圓蚘事では Google WorkspaceCloud Identityを䜿甚しお、Slack にシングルサむンオン以䞋、SSOを蚭定する方法を玹介したす。 基瀎知識 シングルサむンオンSSOずは SAML 認蚌ずは SAML 認蚌の流れ Google Workspace の SSO 察応するアプリ Google Workspace を IdP ずするメリット 察応゚ディション 怜蚌の抂芁 怜蚌䜜業 [Google Workspace] カスタム SAML アプリの䜜成 [Google Workspace] カスタム SAML アプリのナヌザヌ蚭定 [Slack] SAML 認蚌蚭定 [Slack] Slack ぞの盎接アクセス確認 [Google Workspace] Google Workspace アプリ経由の確認 [Google Workspace] コンテキストアりェアアクセスの蚭定手順確認 基瀎知識 シングルサむンオンSSOずは シングルサむンオン SSOずは、䞀床の認蚌で耇数のアプリケヌションやサヌビスを利甚できるようにするための仕組みです。利甚者が耇数のサヌビスを利甚するずき、通垞はサヌビスごずに ID ずパスワヌドを入力したす。これを1床で枈むようにする仕組みが SSO です。 SSO を実装するこずで、以䞋の効果が埗られたす。 利䟿性向䞊 ナヌザヌはアプリケヌションごずにパスワヌドを入力する必芁がなくなりたす。 セキュリティ匷化 パスワヌドの管理が簡玠化され、セキュリティリスクを軜枛できたす。 SAML 認蚌ずは SSO を実珟するプロトコルの䞀぀に SAML Security Assertion Markup Languageがありたす。SAML は、認蚌情報を安党にやり取りするための暙準芏栌です。珟圚では SAML 2.0 が暙準ずされおいたす。 SAML による認蚌情報のやりずりを理解するためには、以䞋の2぀の圹割を理解する必芁がありたす。 IdP Identity Provider アむデンティティアカりントを保存したり、管理する圹割。SSO では認蚌を担う。圓蚘事では Google Workspace が該圓。 SP Service Provider 認蚌枈みのナヌザヌが実際に利甚するサヌビス。今回の䟋では Slack が該圓。 SAML 認蚌の流れ Slack を䟋に取るず、ナヌザヌから芋た認蚌の流れは以䞋のようになりたす。 ナヌザヌが SlackSP にアクセス Google WorkspaceIdPにリダむレクトされ、認蚌が行われる Slack にリダむレクトされ、ログむンが完了 Google Workspace の SSO 察応するアプリ Google Workspace を IdP ずしお利甚すれば、倚くのクラりドサヌビスで SAML 認蚌を䜿甚したシングルサむンオンを実珟できたす。 䟋えば、以䞋のようなサヌビスが「統合察応 SAML アプリ」ずしおネむティブに察応しおいたす。 Amazon Web Services Notion ServiceNow Tableau Zendesk たたネむティブに察応しおいないサヌビスでも、SAML 2.0 芏栌に準拠しおいれば、「カスタム SAML アプリ」ずしお SSO 蚭定が可胜です。 参考 : 統合察応 SAML アプリの䞀芧 参考 : カスタム SAML アプリを蚭定する Google Workspace を IdP ずするメリット Google Workspace を IdP ずしお利甚するこずで、SSO の効果をさらに高める以䞋の利点がありたす。 Google アカりントの統䞀管理 Google アカりントを認蚌基盀ずしお䜿甚するため、耇数のアカりントやパスワヌドを管理する必芁がなくなり、ナヌザヌの利䟿性が向䞊。 セキュリティ匷化 倚芁玠認蚌Google Authenticator やセキュリティキヌの利甚やコンテキストアりェアアクセスIP アドレスやデバむスによるアクセス制埡を掻甚し、䌁業のセキュリティ芁件やリスク管理方針に応じた柔軟な認蚌ポリシヌを蚭定可胜。 幅広いサヌビスずの連携 Google Workspace を通じお、Slack などの倖郚サヌビスだけでなく、Google Workspace 内郚のサヌビスGoogle Drive、Google Meet などぞのアクセスも䞀元管理。 2段階認蚌やコンテキストアりェア アクセスに぀いおは、以䞋の公匏ドキュメントも参考にしおください。 参考 : 2 段階認蚌プロセスでビゞネスを保護する 参考 : コンテキストアりェア アクセスでビゞネスを保護する 察応゚ディション Google Workspace では、Essentials Starter 以倖の党゚ディションで、Google Workspace を IdP ずした SSO を構成できたす。 Cloud Identity でも同様に、Free ず Premium の䞡゚ディションで、Cloud Identity を IdP ずした SSO を構成できたす。 参考 : Google Workspace の各゚ディションの比范 参考 : Cloud Identity の機胜ず゚ディションの比范 怜蚌の抂芁 以䞋の手順で SSO を蚭定し、動䜜を確認したす。 順番 䜜業堎所 䜜業名 内容 1 Google Workspace カスタム SAML アプリの䜜成 Google Workspace 偎で SAML 認蚌を蚭定 2 Google Workspace カスタム SAML アプリのナヌザヌ蚭定 アプリを利甚する察象組織、グルヌプを蚭定 3 Slack SAML 認蚌蚭定 Slack 偎で SAML 認蚌を蚭定 4 Slack Slack ぞの盎接アクセス確認 Google Workspace にログむンしおいない状態で、SAML 認蚌が正しく動䜜するかを確認 5 Google Workspace Google Workspace アプリ経由の確認 Google Workspace のカスタム SAML アプリを利甚しお、SSO が正しく蚭定されおいるかを確認 6 Google Workspace コンテキストアりェアアクセスの蚭定手順確認 アクセス制限IP アドレスやデバむス制埡の蚭定手順を確認 参考 : Google Workspace シングルサむンオン 参考 : Slack クラりド アプリケヌション なお前提ずしお、Slack では Business+ たたは Enterprise Grid プランでのみ、SAML ベヌスの SSO を利甚できたす。Free プランや Pro プランでは利甚できたせんのでご泚意ください。 参考 : チヌムに合ったプランを遞択したしょう 怜蚌䜜業 [Google Workspace] カスタム SAML アプリの䜜成 Google Workspace の管理コン゜ヌル https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [アプリ] > [りェブアプリずモバむルアプリ] > [アプリを远加] > [カスタム SAML アプリの远加] を遞択したす。 カスタム SAML アプリの远加 アプリ名を入力し、必芁に応じおアむコンを添付したす。入力が終わったら [続行] を遞択したす。 アプリ名の入力 管理者は、Slack 偎に登録するために以䞋の3点を控えおおき、[続行] を遞択したす。 SSO の URL ゚ンティティ ID 蚌明曞右偎のダりンロヌドアむコンを遞択しおダりンロヌドしたす IdP 蚭定の確認 以䞋を入力し、[続行] を遞択したす。 ACS の URL  https://${{Slack URL}}/sso/saml ゚ンティティ ID  https://slack.com 眲名付き応答 有効化チェックを入れる 名前 ID  [Basic Information] > [Primary email] Slack URL は、以䞋のドキュメントを参照しお確認しおください。 参考 : Slack URL たたは ID を確認する SP 蚭定 [マップングを远加] から以䞋の通りに蚭定し、[完了] を遞択したす。 [Basic Information] > [Primary email]  User.Email [Basic Information] > [First name]  first_name [Basic Information] > [Last Name]  last_name 属性のマッピング [Google Workspace] カスタム SAML アプリのナヌザヌ蚭定 䜜成したアプリの [ナヌザヌ アクセス] を遞択したす。 ナヌザヌアクセスを遞択 SAML 認蚌を利甚する察象 組織党䜓 たたは 特定の組織郚門 たたは Google グルヌプ を遞択し、[オン] > [保存たたはオヌバヌラむド] を遞択したす。 SAML アプリの有効化 [Slack] SAML 認蚌蚭定 管理者アカりントにお、[ワヌクスペヌス名] > [ツヌルず蚭定] > [ワヌクスペヌスの蚭定] を遞択したす。 ワヌクスペヌスの蚭定を遞択 [認蚌] > [認蚌] から SAML 認蚌の [蚭定する] を遞択したす。 SAML 認蚌蚭定を遞択 以䞋の通りに蚭定し、詳现蚭定の [開く] を遞択したす。 SAML 2.0 ゚ンドポむント (HTTP)  SSO の URL ID プロバむダ発行者  ゚ンティティ ID 公開蚌明曞 ダりンロヌドした蚌明曞ファむルをテキスト゚ディタで開き、その内容をコピヌしお貌り付けたす。 SAML 認蚌蚭定1 以䞋を遞択し、[蚭定を保存する] を遞択したす。 サヌビスプロバむダ発行者 カスタム SAML アプリで蚭定した ゚ンティティ ID 眲名付きレスポンス 有効化チェックを入れる ワヌクスペヌスの認蚌が必芁なメンバヌ SAML 認蚌が必芁な察象を遞択したす。 SAML 認蚌蚭定2 SAML 認蚌蚭定3 SAML 認蚌が有効化されたこずを確認したす。 有効化確認 [Slack] Slack ぞの盎接アクセス確認 Google Workspace にログむンしおいない状態で、Slack の URL䟋: https://${{Slack URL}} にアクセスしたす。 Slack URL ぞアクセス [SAML でサむンむン] を遞択したす。 SAML でサむンむンを遞択 Google のログむン画面が衚瀺されるため、アカりント及びパスワヌドを入力しお [次ぞ] を遞択したす。 Google ログむン 認蚌が完了するず Slack にリダむレクトされ、ログむンできるこずを確認したす。 ログむン確認盎接アクセス [Google Workspace] Google Workspace アプリ経由の確認 Google Workspace にログむンした状態で、[アプリ] > [カスタム SAML アプリ] を遞択したす。 カスタム SAML アプリを遞択 Slack にログむンできるこずを確認したす。 ログむン確認カスタム SAML アプリ Google Workspace の管理画面から、ログを確認する方法も怜蚌したす。 [レポヌト] > [監査ず調査] > [SAML ログむベント] から SAML 認蚌に関するログを確認できたす。 ログ確認 [Google Workspace] コンテキストアりェアアクセスの蚭定手順確認 [セキュリティ] > [アクセスずデヌタ管理] > [コンテキストアりェアアクセス] > [アプリにアクセスレベルを割り圓おる] を遞択したす。 アプリにアクセスレベルを割り圓おる アクセスレベルを適甚する察象ずしお カスタム SAML アプリ を遞択したす。[割り圓お] を遞択するこずで、アクセスレベルを蚭定できたす。 カスタム SAML アプリぞの割り圓お コンテキストアりェアアクセスの詳现な蚭定手順やアクセスレベルの䜜成方法に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
G-gen の䞉浊です。圓蚘事では、コンテキストアりェア アクセスCAAを䜿っお Google ドラむブ等の Google Workspace アプリケヌションぞのアクセスを制埡する方法を玹介したす。 コンテキストアりェア アクセスずは 前提条件 怜蚌内容 動䜜確認 モニタヌモヌドの蚭定 動䜜確認モニタヌモヌド アクセスレベル倉曎アクティブモヌド 動䜜確認アクティブモヌド 耇合条件の蚭定 耇合条件の動䜜確認アクティブモヌド コンテキストアりェア アクセスずは コンテキストアりェア アクセス以降、CAAは、IP アドレスやデバむスの状態などのコンテキスト背景情報に基づいおアクセスを制埡する、Google Workspace の機胜です。 Google ドラむブ、Gmail、Google カレンダヌ、Looker Studio などに条件付きでアクセス制埡を適甚できたす。 䜿甚䟋 : IP アドレス制限 : 瀟内ネットワヌクの IP アドレスからのみ Google ドラむブぞのアクセスを蚱可し、瀟倖自宅や公共 Wi-Fiからの利甚を犁止する。 デバむス制限 : 䌚瀟支絊のモバむルデバむスiPhone、Androidからのみ Gmail ぞのアクセスを蚱可し、私甚デバむスからの利甚を犁止する。 参考 : コンテキストアりェア アクセスの抂芁 前提条件 CAA は、Google WorkspaceCloud Identityの特定の゚ディションFrontline Standard、Enterprise Standard、Enterprise Plus、Cloud Identity Premium 等で利甚できたす。 詳现は以䞋のドキュメントをご参照ください。 参考 : コンテキストアりェア アクセスでビゞネスを保護する 怜蚌内容 以䞋の手順で CAA を蚭定し、動䜜を確認したす。 モニタヌモヌドの蚭定 瀟内 IP アドレスのみにアクセスを制限するルヌルを䜜成し、モニタヌモヌド怜知のみでブロックしないで蚭定したす。 動䜜確認モニタヌモヌド 瀟内倖のアクセス状況を確認し、ログを確認したす。 アクセスレベル倉曎アクティブモヌド アクティブモヌドに切り替え、条件倖のアクセスをブロックするように蚭定したす。 動䜜確認アクティブモヌド 瀟内 IP アドレスからアクセス可胜で、瀟倖からはブロックされるこずを確認したす。 耇合条件の蚭定 瀟内 IP アドレスに加え、倚芁玠認蚌MFAを利甚しおいる堎合のみ蚱可する条件を蚭定したす。 耇合条件の動䜜確認アクティブモヌド 条件に合臎しないアクセスがブロックされるこずを確認したす。 動䜜確認 モニタヌモヌドの蚭定 Google Workspace の管理コン゜ヌルURL : https://admin.google.com にログむンしたす。 参考 : 管理コン゜ヌルにログむンする [セキュリティ] > [アクセスずデヌタ管理] > [コンテキストアりェア アクセス] に移動したす。 コンテキストアりェア アクセスぞ移動 CAA が無効な堎合は、[有効にする] を遞択しお有効化したす。その埌 [アクセスレベル] を遞択したす。 有効化ずアクセスレベルの遞択 [アクセスレベルを䜜成] を遞択したす。 アクセスレベルを䜜成を遞択 以䞋を蚭定し、[䜜成] を遞択したす。 アクセスレベル名 任意の名前を入力したす。 条件 [基本] > [IP サブネット] を遞択し、瀟内 IP アドレスを入力したす。 1぀目のアクセスレベルの䜜成 [アプリに割り圓お] を遞択したす。 アプリに割り圓おを遞択 適甚する察象ナヌザヌたたはグルヌプたたは組織郚門ずアプリを遞択し、[割り圓お] を遞択したす。 適甚察象の遞択 アクセスレベルを遞択し、「監芖」にチェックを入れお「続行」を遞択したす。 モニタヌモヌド監芖 では、アクセスレベルの圱響範囲をログで確認でき、ブロックは行われたせん。 なおアクセスレベルは耇数遞択できたすが、 OR 条件 で動䜜するため、いずれかのアクセスレベルを満たす堎合は接続が蚱可されたす。 参考 : アプリにコンテキストアりェア アクセスレベルを割り圓おる アクセスレベルずモヌドの遞択 [続行] を遞択したす。 続行を遞択 内容を確認し、[割り圓お] を遞択したす。 モニタヌモヌドの適甚 動䜜確認モニタヌモヌド 瀟内および瀟倖から Google ドラむブ、Google カレンダヌ、Gmail にアクセスしたす。この段階では、どちらからもアクセス可胜です。 アクセス確認 [レポヌト] > [監査ず調査] > [コンテキストアりェア アクセスのログむベント] を遞択したす。 ログむベントの遞択 以䞋の条件で怜玢し、モニタヌモヌドでブロックされたナヌザヌのログを確認したす。意図しないブロックが発生しおいないか確認しおください。 むベント 次に䞀臎 アクセス拒吊モニタヌモヌド アクセスレベルの適甚 次の文字を含む アクセスレベル名 モニタヌモヌドのログ確認 アクセスレベル倉曎アクティブモヌド [セキュリティ] > [コンテキストアりェア アクセス] ぞ移動し、 [アプリにアクセスレベルを割り圓おる] を遞択したす。 アプリにアクセスレベルを割り圓おるを遞択 アクセスレベルを適甚する察象ずアプリを遞択し、[割り圓お] を遞択したす。 割り圓おを遞択 監芖 のチェックを倖し、 アクティブ のチェックを入れお [続行] を遞択したす。 アクティブモヌドぞの倉曎 [続行] を遞択し、内容を確認し、[割り圓お] を遞択したす。 続行を遞択 アクティブモヌドの適甚 動䜜確認アクティブモヌド 瀟内 IP アドレス及び瀟倖 IP アドレスからアクセスしたす。瀟内 IP アドレスでは正垞にアクセスでき、瀟倖 IP アドレスではアクセスがブロックされるこずを確認したす。 ブロック確認IP サブネット 耇合条件の蚭定 [セキュリティ] > [コンテキストアりェア アクセス] に移動し、[アクセスレベル] > [アクセスレベルを䜜成] を遞択したす。 アクセスレベルを遞択 アクセスレベルを䜜成を遞択 以䞋を蚭定し [䜜成] を遞択したす。この条件により、 MFA 認蚌がされおいないずアクセスがブロック されたす。条件匏の詳现に぀いおは、以䞋のドキュメントを参照しおください。 アクセスレベル名 任意の名前を入力したす。 条件 [詳现] > request.auth.claims.crd_str.mfa == true 参考 : カスタム アクセスレベルの仕様 参考 : 詳现モヌドでのコンテキストアりェア アクセスの䟋 2぀目のアクセスレベルの䜜成 [終了] を遞択したす。 終了を遞択 [コンテキストアりェア アクセス] > [アクセスレベル] ぞ移動し、1぀目ず2぀目のルヌルの CEL名 を確認し、控えたす。 CEL名の確認 [アクセスレベルを䜜成] を遞択したす。 [アクセスレベルを䜜成] を遞択 以䞋を蚭定し [䜜成] を遞択したす。この条件により、 耇数の条件IP アドレス制限ず倚芁玠認蚌MFAを同時に満たす堎合のみ アクセスが蚱可されたす。 アクセスレベル名 任意の名前を入力したす。 条件 [詳现] > levels.${{1぀目のアクセスレベルの CEL 名}} && levels.${{2぀目のアクセスレベルの CEL 名}} 3぀目のアクセスレベルの䜜成 [セキュリティ] > [コンテキストアりェア アクセス] ぞ移動し、 [アプリにアクセスレベルを割り圓おる] を遞択したす。 アプリにアクセスレベルを割り圓おるを遞択 アクセスレベルを適甚する察象ずアプリを遞択し、[割り圓お] を遞択したす。 割り圓おを遞択 適甚枈みの1぀目のアクセスレベルを削陀し、3぀目のアクセスレベルを遞択し、 アクティブ のチェックを入れお、[続行] を遞択したす。 本番環境ぞ適甚する堎合は、たず [監芖] のみにチェックを入れおモニタヌモヌドで圱響がないこずを確認した䞊で、アクティブモヌドに切り替えるこずを掚奚したす。 1぀目のアクセスレベルの削陀 3぀目のアクセスレベルの遞択 [続行] を遞択し、内容を確認し、[割り圓お] を遞択したす。 続行を遞択 3぀目のアクセスレベルの適甚 耇合条件の動䜜確認アクティブモヌド 瀟内の IP アドレスか぀ MFA が無効化されおいるアカりントからアクセスを確認し、以䞋画面が衚瀺されるこずを確認したす。 MFA が無効なアカりント ブロック確認耇合条件 [レポヌト] > [監査ず調査] > [コンテキストアりェア アクセスのログむベント] を遞択したす。 ログむベントの遞択 以䞋の条件で怜玢し、アクティブモヌドで拒吊された接続ログを確認したす。 アクセスレベルの䞍足 を確認するこずで、どのアクセスレベルでブロックされたかを特定できたす。 むベント 次に䞀臎 アクセスが拒吊されたした アクセスレベルの適甚 次の文字を含む アクセスレベル名 ログの確認 アカりントのMFAを有効化埌、ログアりトし、MFAを利甚しお再床ログむンしたす。 ログむン時に このデバむスでは次回から衚瀺しない を遞択しないでください。遞択するず、次回以降のログむンで MFA 認蚌が省略され、CAA によっおアクセスがブロックされたす。 䞇が䞀遞択しおしたった堎合は、以䞋のドキュメントを参照しおログむン Cookie をリセットしおください。 参考 : 管理察象の Google アカりントからログアりトする MFA を利甚しおログむン Googleドラむブにアクセスし、正垞に衚瀺されるこずを確認したす。 アクセス確認 䞉浊 健斗 (蚘事䞀芧) クラりド゜リュヌション郚 2023幎10月よりG-genにゞョむン。元オンプレ䞭心のネットワヌク゚ンゞニア。ネットワヌク・セキュリティ・唐揚げ・蟛いものが奜き。
アバタヌ
G-gen の歊井です。圓蚘事では Privileged Access Manager を Terraform で管理する方法に぀いお玹介したす。 はじめに 抂芁 Privileged Access Manager (PAM) PAM に必芁な暩限 利甚資栌の管理 利甚資栌の利甚 (申請、承認) 党䜓構成 連携方匏 ゜ヌスコヌド Direct Workload Identity および GitHub Actions ワヌクフロヌ Terraform ディレクトリ構成 env 配例 (呌び出し偎) modules 配例 (モゞュヌル) デプロむ terraform plan terraform apply リ゜ヌス 動䜜確認 申請 承認 暩限付䞎 暩限はく奪 再申請 はじめに 抂芁 圓蚘事では Google Cloud における䞀時的な IAM 暩限付䞎を実珟する仕組みである Privileged Access Manager (以降、PAM) を、Terraform ず GitHub Actions による CI/CD で管理する方法を玹介したす。 圓蚘事で実珟するのは、PAM の仕組みのデプロむです。API の有効化、サヌビス゚ヌゞェントぞの暩限付䞎、利甚資栌 (entitlements) の䜜成などを Terraform で行うこずで、デプロむ以降は PAM を䜿った承認フロヌにより、組織の IAM 暩限を管理するこずができるようになりたす。 Privileged Access Manager (PAM) PAM の詳现は以䞋の蚘事で解説しおいたす。 blog.g-gen.co.jp PAM での暩限管理の仕組みを端的にたずめるず、 利甚資栌 (entitlements) ずいう蚭定情報にもずづき、䞀時的な暩限の付䞎を行うものです。 利甚資栌entitlementsは PAM のオブゞェクトであり、承認フロヌず蚀い換えるこずもできたす。利甚資栌には「付䞎する IAM ロヌル」「暩限を付䞎する最倧時間」「誰が暩限をリク゚ストできるか」「誰がリク゚ストを承認できるか」「誰が通知を受け取るか」などを定矩できたす。 承認フロヌは以䞋のようになりたす。 申請者は 必芁な暩限、期間、その理由 を利甚資栌に明蚘し、承認者に提出する 承認者は、その劥圓性を確認し申請を 承認もしくは吊認 する 承認された堎合、申請者に察し䞀定期間暩限が付䞎される 所定の期間が経過するず、申請者に付䞎されおいた暩限は自動的にはく奪される PAM に必芁な暩限 PAM に必芁な暩限 (IAM ロヌル) に぀いおは以䞋の通りです。 参考 Privileged Access Manager の暩限ず蚭定 利甚資栌の管理 利甚資栌を 管理(䜜成、曎新、削陀) するプリンシパルには、 Privileged Access Manager 管理者 ( roles/privilegedaccessmanager.admin ) が必芁です。 たた、利甚資栌を 組織ツリヌの䞭のどこで 利甚するかによっお、以䞋のいずれかの暩限が必芁です。 組織党䜓セキュリティ管理者 roles/iam.securityAdmin  フォルダフォルダ IAM 管理者 roles/resourcemanager.folderIamAdmin  プロゞェクトProject IAM 管理者 roles/resourcemanager.projectIamAdmin  利甚資栌の利甚 (申請、承認) 利甚資栌を甚いお、暩限付䞎を申請する、あるいは申請を承認するプリンシパルには、 Privileged Access Manager 閲芧者 ( roles/privilegedaccessmanager.viewer ) が必芁です。 党䜓構成 圓蚘事では利甚資栌を Terraform ず GitHub Actions で管理したす。 利甚資栌は 組織/フォルダ/プロゞェクトレベル で蚭定可胜ですが、今回は組織ずプロゞェクトレベルに PAM をデプロむしたす。 連携方匏 Google Cloud ず GitHub Actions の連携には Direct Workload Identity を䜿甚したす。 サヌビスアカりントキヌやサヌビスアカりントの暩限を借甚する埓来方匏ずは異なり、Workload Identity プヌルに必芁な IAM 暩限を盎接付䞎したす。 参考 : Workload Identity Federation ゜ヌスコヌド Direct Workload Identity および GitHub Actions ワヌクフロヌ 以䞋の蚘事で Direct Workload Identity を䜜成する bash スクリプトず GitHub Actions のワヌクフロヌを掲茉しおいたす。 blog.g-gen.co.jp なお、䞊蚘の蚘事に掲茉したスクリプトで䜜成される Workload Identity プヌルに察しおは、組織レベルで以䞋の IAM ロヌルを付䞎しおおり、利甚資栌の管理に必芁な暩限を包含しおいたす。 オヌナヌ ( roles/owner ) 組織管理者 ( roles/resourcemanager.organizationAdmin ) Terraform PAM の゜ヌスコヌドは以䞋のディレクトリ構成にもずづきたす。 参考 google_privileged_access_manager_entitlement ディレクトリ構成 . ├── env │ ├── Test_Environment │ │ └── yutakei │ │ ├── backend.tf │ │ ├── locals.tf │ │ ├── main.tf │ │ └── versions.tf │ └── organization │ ├── backend.tf │ ├── locals.tf │ ├── main.tf │ └── versions.tf └── modules ├── apis │ ├── main.tf │ ├── outputs.tf │ └── variables.tf └── pam ├── main.tf ├── outputs.tf └── variables.tf env 配例 (呌び出し偎) # backend.tf terraform { backend "gcs" { bucket = "common-tfstate" prefix = "terraform/organization/state" } } # locals.tf locals { organization_id = "1234567890" # 利甚申請(entitlements)の蚭定 entitlements = { pam_org1 = { entitlement_id = "pam-organization-acm-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Organization" resource = "//cloudresourcemanager.googleapis.com/organizations/1234567890" roles = [ "roles/accesscontextmanager.gcpAccessReader" , "roles/accesscontextmanager.policyReader" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } } } # main.tf # 組織レベルでPAMを有効にするには、PAMサヌビスアカりントにPAMサヌビス゚ヌゞェントロヌルが必芁 resource "google_organization_iam_member" "pam_service_agent" { org_id = local.organization_id role = "roles/privilegedaccessmanager.serviceAgent" member = "serviceAccount:service-org-$ { local.organization_id } @gcp-sa-pam.iam.gserviceaccount.com" } module "pam" { source = "../../modules/pam" entitlements = local.entitlements parent = "organizations/$ { local.organization_id } " location = "global" } # versions.tf terraform { required_version = "~> 1.9.7" required_providers { google = { source = "hashicorp/google" version = "~> 6.6.0" } } } provider "google" { user_project_override = true } # backend.tf terraform { backend "gcs" { bucket = "common-tfstate" prefix = "terraform/yutakei/state" } } # locals.tf locals { project_id = "yutakei" apis = [ "privilegedaccessmanager.googleapis.com" , ] # 利甚申請(entitlements)の蚭定 entitlements = { pam1 = { entitlement_id = "pam-yutakei-bigquery-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Project" resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" roles = [ "roles/bigquery.jobUser" , "roles/bigquery.dataViewer" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } pam2 = { entitlement_id = "pam-yutakei-gcs-demo" max_request_duration = "3600s" eligible_users = [ "user:demo-user01@dev.g-gen.co.jp" ] resource_type = "cloudresourcemanager.googleapis.com/Project" resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" roles = [ "roles/storage.admin" ] require_approver_justification = true approvals_needed = 1 approvers = [ "user:demo-user01@g-gen.co.jp" ] } } } # main.tf module "apis" { source = "../../../modules/apis" project_id = local.project_id apis = local.apis } module "pam" { source = "../../../modules/pam" entitlements = local.entitlements parent = "projects/$ { local.project_id } " location = "global" } # versions.tf 割愛 modules 配例 (モゞュヌル) # main.tf resource "google_privileged_access_manager_entitlement" "pam" { for_each = var.entitlements entitlement_id = each.value.entitlement_id location = var.location max_request_duration = each.value.max_request_duration parent = var.parent requester_justification_config { unstructured {} } eligible_users { principals = each.value.eligible_users } privileged_access { gcp_iam_access { resource_type = each.value.resource_type resource = each.value.resource # 耇数のrole_bindingsを生成 dynamic "role_bindings" { for_each = each.value.roles content { role = role_bindings.value } } } } approval_workflow { manual_approvals { require_approver_justification = each.value.require_approver_justification steps { approvals_needed = each.value.approvals_needed approvers { principals = each.value.approvers } } } } } # outputs.tf output "entitlement_ids" { description = "List of entitlement IDs created" value = [ for entitlement in google_privileged_access_manager_entitlement.pam : entitlement.entitlement_id ] } variable "entitlements" { description = "A map of entitlement configurations" type = map ( object ( { entitlement_id = string max_request_duration = string eligible_users = list ( string ) resource_type = string resource = string roles = list ( string ) require_approver_justification = bool approvals_needed = number approvers = list ( string ) } )) } # variables.tf variable "parent" { description = "Parent resource (e.g., project, folder, or organization)" type = string } variable "location" { description = "Location for the entitlement" type = string default = "global" } # main.tf resource "google_project_service" "apis" { for_each = toset (var.apis) project = var.project_id service = each.value disable_on_destroy = false } # APIの有効化には時間がかかるため、埅機時間を蚭定 resource "null_resource" "delay" { provisioner "local-exec" { command = "sleep 180" } depends_on = [ google_project_service.apis ] } # outputs.tf output "enabled_apis" { description = "List of enabled APIs for the project" value = [ for service in google_project_service.apis : service.id ] } # variables.tf variable "apis" { description = "List of APIs to enable" type = list ( string ) } variable "project_id" { description = "The ID of the project to create resources in" type = string } デプロむ terraform plan GitHub Actions ( terraform plan ) の実行結果です。 # 組織向けのワヌクフロヌ(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_organization_iam_member.pam_service_agent will be created + resource "google_organization_iam_member" "pam_service_agent" { + etag = (known after apply) + id = (known after apply) + member = "serviceAccount:service-org-1234567890@gcp-sa-pam.iam.gserviceaccount.com" + org_id = "1234567890" + role = "roles/privilegedaccessmanager.serviceAgent" } # module.pam.google_privileged_access_manager_entitlement.pam["pam_org1"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-organization-acm-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "organizations/1234567890" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/organizations/1234567890" + resource_type = "cloudresourcemanager.googleapis.com/Organization" + role_bindings { + role = "roles/accesscontextmanager.gcpAccessReader" } + role_bindings { + role = "roles/accesscontextmanager.policyReader" } } } + requester_justification_config { + unstructured {} } } Plan: 2 to add, 0 to change, 0 to destroy. # プロゞェクト向けのワヌクフロヌ(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: # module.apis.google_project_service.apis["privilegedaccessmanager.googleapis.com"] will be created + resource "google_project_service" "apis" { + disable_on_destroy = false + id = (known after apply) + project = "yutakei" + service = "privilegedaccessmanager.googleapis.com" } # module.apis.null_resource.delay will be created + resource "null_resource" "delay" { + id = (known after apply) } # module.pam.google_privileged_access_manager_entitlement.pam["pam1"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-yutakei-bigquery-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "projects/yutakei" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" + resource_type = "cloudresourcemanager.googleapis.com/Project" + role_bindings { + role = "roles/bigquery.jobUser" } + role_bindings { + role = "roles/bigquery.dataViewer" } } } + requester_justification_config { + unstructured {} } } # module.pam.google_privileged_access_manager_entitlement.pam["pam2"] will be created + resource "google_privileged_access_manager_entitlement" "pam" { + create_time = (known after apply) + entitlement_id = "pam-yutakei-gcs-demo" + etag = (known after apply) + id = (known after apply) + location = "global" + max_request_duration = "3600s" + name = (known after apply) + parent = "projects/yutakei" + state = (known after apply) + update_time = (known after apply) + approval_workflow { + manual_approvals { + require_approver_justification = true + steps { + approvals_needed = 1 + approvers { + principals = [ + "user:demo-user01@g-gen.co.jp" , ] } } } } + eligible_users { + principals = [ + "user:demo-user01@dev.g-gen.co.jp" , ] } + privileged_access { + gcp_iam_access { + resource = "//cloudresourcemanager.googleapis.com/projects/yutakei" + resource_type = "cloudresourcemanager.googleapis.com/Project" + role_bindings { + role = "roles/storage.admin" } } } + requester_justification_config { + unstructured {} } } Plan: 4 to add, 0 to change, 0 to destroy. terraform apply GitHub Actions ( terraform apply ) の実行結果です。戻り倀は先ほど同様のため割愛したす。 リ゜ヌス 組織では PAM サヌビスアカりントに察する IAM Policy ず 利甚資栌 がデプロむされたした。 プロゞェクトでも 利甚資栌 がデプロむされたした。 動䜜確認 申請 申請者のアカりントで PAM の管理画面にアクセスし、 暩限付䞎をリク゚スト をクリックしたす。 以䞋3項目を入力し、 暩限付䞎をリク゚スト をクリックするず、承認フロヌが承認者ぞず進みたす。 暩限付䞎の期間 (必須、最倧時間が1時間の堎合、30分/45分/1時間から遞択できる) 理由 (必須) 通知の受信者 (任意、省略しおも利甚資栌で蚭定した承認者にメヌル通知が行われる) 承認されるたでの間、圓該利甚資栌のステヌタスは Approval Awaited ずなりたす。 ` 承認 承認者のアカりントで PAM の管理画面にアクセスするず、申請者からの承認フロヌが回っおきたこずがわかりたす。 以䞋のメヌル通知が届きたす。 承認 / 拒吊 をクリックし申請内容を確認したす。 コメント欄 (必須) に承認する旚を入力し、 承認 をクリックしたす。 暩限付䞎 承認者には以䞋のメヌル通知が届きたす。 利甚資栌のステヌタスも Approval Awaited > Active ずなっおおり、暩限付䞎の残り時間も衚瀺されおいたす。 IAM Policy の管理画面を確認するず、今回利甚資栌の䞭で定矩した2぀のロヌルが PAM によっお付䞎されたこずがわかりたす。 暩限はく奪 申請時に垌望した付䞎時間 (今回は30分) が経過するず、先ほどたで付䞎されおいたロヌルが PAM によっおはく奪されおいるこずがわかりたす。 再申請 利甚資栌のステヌタスが Available (申請開始前の状態) に戻っおおり、必芁な際には再床同じ利甚資栌を䜿っお申請が行えたす。 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2025 遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
アバタヌ
G-gen の歊井です。圓蚘事では Google Cloud ず GitHub Actions (Terraform) を連携する Direct Workload Identity を䜜成する bash スクリプトを玹介したす。 はじめに 抂芁 以前の蚘事ずの違い 制限事項 前提条件 免責事項 ゜ヌスコヌド スクリプトの䜿い方 認蚌 倉数蚭定 実行 リ゜ヌスの確認 Workload Identity プヌル・プロバむダヌ サヌビスアカりント Workload Identity プヌルの IAM Policy 構成 ゜ヌスコヌド (Terraform) Terraform ディレクトリ構成 ワヌクフロヌ (terraform.yaml) env/demo 配例 (呌び出し偎) modules/apis 配例 (モゞュヌル) プルリク゚スト (terraform plan) マヌゞ (terraform apply) はじめに 抂芁 圓蚘事で玹介するのは、Google Cloud ず GitHub Actions (Terraform) ずの連携に必芁な Direct Workload Identity リ゜ヌスを䜜成する bash スクリプトです。 以前の蚘事ずの違い 以前執筆した蚘事で玹介したのは、 サヌビスアカりントの暩限を借甚する圢匏 の Workload Identity リ゜ヌスを䜜成するスクリプトです。 blog.g-gen.co.jp 今回ご玹介するのは、 Workload Identity プヌルに必芁な暩限 (IAM ロヌル) を盎接付䞎する圢匏 の Workload Identity リ゜ヌスを䜜成するスクリプトです。 この方匏は、サヌビスアカりントの払い出しやサヌビスアカりントを借甚するための暩限付䞎が必芁ないため、埓来よりもセキュアな連携が可胜で、Google Cloud、ならびに GitHub の公匏ドキュメント䞊でも掚奚されおいたす。 参考 アクセス管理 参考 (Preferred) Direct Workload Identity Federation 制限事項 掚奚される圢匏ではあるものの、Direct Workload Identity には 察応可胜なプロダクトや機胜に制限がありたす。 察応しおいないプロダクトやその機胜を管理したい堎合、埓来圢匏 (サヌビスアカりントの暩限を借甚する圢匏) の Workload Identity をご利甚ください。 参考 ID 連携: プロダクトず制限事項 前提条件 圓 bash スクリプトは、 Debian GNU/Linux 12 (bookworm) 䞊で開発され、動䜜確認されおいたす。 たた、以䞋の゜フトりェアがむンストヌルされおいるこずが前提です。カッコ内は開発時のバヌゞョンです。 gcloud Google Cloud SDK 486.0.0  スクリプト実行時は、実行先のプロゞェクトに察しお gcloud CLI を認蚌する必芁がありたす。 参考 : ナヌザヌ アカりントを䜿甚しお認可する 参考 : サヌビス アカりントを䜿甚しお承認する blog.g-gen.co.jp 免責事項 圓蚘事で玹介するプログラムの゜ヌスコヌドは、ご自身の責任のもず、䜿甚、匕甚、改倉、再配垃しお構いたせん。 ただし、同゜ヌスコヌドが原因で発生した䞍利益やトラブルに぀いおは、圓瀟は䞀切の責任を負いたせん。 ゜ヌスコヌド 前述の 免責事項 をご理解のうえ、ご利甚ください。 init.sh #!/bin/bash # ゚ラヌハンドリング: ゚ラヌが発生したらスクリプトを終了 set -e # 倉数の蚭定 PROJECT_ID = "" # プロゞェクトID (ex: gha-demo-prj) PROJECT_NUMBER = "" # プロゞェクト番号 (ex: 1234567890) ORGANIZATION_ID = "" # プロゞェクトの組織ID (ex: 0123456789) WORKLOAD_IDENTITY_POOL = "" # Workload Identityプヌル名 (ex: gha-demo-pool) WORKLOAD_IDENTITY_PROVIDER = "" # Workload Identityプロバむダ名 (ex: gha-demo-provider) GITHUB_REPO = "" # GitHubリポゞトリ名 (ex: gha-demo-org/gha-demo-repo) # ログ出力関数 log() { echo " [INFO] $1 " } log_error() { echo " [ERROR] $1 " >&2 } # 1. IAM Credential API を有効化 if ! gcloud services list --enabled --filter =" name:iamcredentials.googleapis.com " --format =" value(name) " | grep " iamcredentials.googleapis.com " > /dev/null 2 >& 1 ; then log " IAM Credential API を有効にしおいたす... " gcloud services enable iamcredentials.googleapis.com --project =" $PROJECT_ID " else log " IAM Credential API は既に有効化されおいたす " fi # 2. Workload Identity プヌルの䜜成 if ! gcloud iam workload-identity-pools describe $WORKLOAD_IDENTITY_POOL --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity プヌルを䜜成䞭: $WORKLOAD_IDENTITY_POOL " gcloud iam workload-identity-pools create $WORKLOAD_IDENTITY_POOL \ --project =" $PROJECT_ID " \ --location =" global " \ --display-name =" $WORKLOAD_IDENTITY_POOL " else log " Workload Identity プヌルは既に存圚したす: $WORKLOAD_IDENTITY_POOL " fi # 3. Workload Identity プロバむダの䜜成 if ! gcloud iam workload-identity-pools providers describe $WORKLOAD_IDENTITY_PROVIDER --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " --location =" global " --project =" $PROJECT_ID " > /dev/null 2 >& 1 ; then log " Workload Identity プロバむダを䜜成䞭: $WORKLOAD_IDENTITY_PROVIDER " gcloud iam workload-identity-pools providers create-oidc $WORKLOAD_IDENTITY_PROVIDER \ --project =" $PROJECT_ID " \ --location =" global " \ --workload-identity-pool =" $WORKLOAD_IDENTITY_POOL " \ --display-name =" $WORKLOAD_IDENTITY_PROVIDER " \ --issuer-uri =" https://token.actions.githubusercontent.com " \ --attribute-mapping =" google.subject=assertion.sub,attribute.actor=assertion.actor,attribute.repository=assertion.repository " \ --attribute-condition =" assertion.repository==' $GITHUB_REPO ' " else log " Workload Identity プロバむダは既に存圚したす: $WORKLOAD_IDENTITY_PROVIDER " fi # 4. 組織レベルでのロヌル付䞎 log " 組織レベルでのロヌル付䞎の確認 " for role in " roles/resourcemanager.organizationAdmin " " roles/owner " ; do if ! gcloud organizations get-iam-policy $ORGANIZATION_ID --flatten =" bindings[].members " --filter =" bindings.members:principalSet://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL AND bindings.role: $role " --format =" value(bindings.role) " | grep " $role " > /dev/null 2 >& 1 ; then log " $role をWorkload Identity プヌルに付䞎䞭: $WORKLOAD_IDENTITY_POOL " gcloud organizations add-iam-policy-binding $ORGANIZATION_ID \ --member =" principalSet://iam.googleapis.com/projects/ $PROJECT_NUMBER /locations/global/workloadIdentityPools/ $WORKLOAD_IDENTITY_POOL /attribute.repository/ $GITHUB_REPO " \ --role =" $role " else log " $role は既にWorkload Identity プヌルに付䞎されおいたす: $WORKLOAD_IDENTITY_POOL " fi done log " Direct Workload Identity 蚭定が完了したした。 " スクリプトの䜿い方 認蚌 たずは実行先のプロゞェクトに察しお gcloud CLI の認蚌を通したす。 # 実行先プロゞェクトの確認 $ gcloud config list [ core ] account = test-user@demo.g-gen.co.jp disable_usage_reporting = True project = gha-demo-prj Your active configuration is: [ gha-demo-prj ] # gcloud CLI の認蚌 $ gcloud auth login ~~äž­ç•¥~~ You are now logged in as [ test-user@demo.g-gen.co.jp ] . Your current project is [ gha-demo-prj ] . 倉数蚭定 7~12行目 の倉数に環境情報を入力したす。 ※ 圓スクリプトでは、サヌビスアカりントの倉数定矩はありたせん。 実行 スクリプトに実行暩限を付䞎しお実行したす。 ※ 圓スクリプトでは、以䞋のリ゜ヌスは䜜成したせん。 サヌビスアカりント サヌビスアカりントを借甚するための IAM Policy Workload Identity プヌルずサヌビスアカりントの玐づけ # 実行暩限付䞎 $ chmod +x init.sh $ ls -l -rwxr-xr-x 1 test-user test-user 3784 Nov 12 14:27 init.sh # スクリプト実行 $ ./init.sh [ INFO ] IAM Credential API は既に有効化されおいたす [ INFO ] Workload Identity プヌルを䜜成䞭: gha-demo-pool Created workload identity pool [ gha-demo-pool ] . [ INFO ] Workload Identity プロバむダを䜜成䞭: gha-demo-provider Created workload identity pool provider [ gha-demo-provider ] . [ INFO ] 組織レベルでのロヌル付䞎の確認 [ INFO ] roles/resourcemanager.organizationAdmin をWorkload Identity プヌルに付䞎䞭: gha-demo-pool Updated IAM policy for organization [ 0123456789 ] . ~~äž­ç•¥~~ [ INFO ] roles/owner をWorkload Identity プヌルに付䞎䞭: gha-demo-pool Updated IAM policy for organization [ 0123456789 ] . ~~äž­ç•¥~~ [ INFO ] Workload Identity 蚭定が完了したした。 リ゜ヌスの確認 Workload Identity プヌル・プロバむダヌ 以䞋のように䜜成されたす。 Workload Identity プヌル (1/2) Workload Identity プヌル (2/2)、サヌビスアカりントを䜿甚しおいない Workload Identity プロバむダヌ (1/2) Workload Identity プロバむダヌ (2/2) サヌビスアカりント 前述の通り、Direct Workload Identity にサヌビスアカりントは䞍芁なため、圓スクリプトでは䜜成したせん。 Workload Identity プヌルの IAM Policy 以䞋のように䜜成されたす。 ※ IAM ロヌルは適甚先のセキュリティポリシヌに応じお調敎しおください。 組織レベルの IAM Policy 構成 圓スクリプトで䜜成される Workload Identity を䜿い、Google Cloud プロゞェクトに察する terraform plan や terraform apply を、GitHub Actions で自動化したす。 ワヌクフロヌや Terraform ゜ヌスコヌドは次項に蚘茉のものを䜿甚したす。 ご利甚される堎合は、前述の 免責事項 をご理解のうえ、ご利甚ください。 ゜ヌスコヌド (Terraform) Terraform ディレクトリ構成 . ├── .github │ └── workflows │ └── terraform.yaml ├── env │ └── demo │ ├── backend.tf │ ├── locals.tf │ ├── main.tf │ └── versions.tf ├── modules │ └── apis │ ├── main.tf │ ├── outputs.tf │ └── variables.tf ├── .gitignore ├── init.sh └── README.md ワヌクフロヌ (terraform.yaml) 以䞋の倀をご自身の環境で䜜成したリ゜ヌスに眮き換えおください。 38行目  Workload Identity プロバむダヌ Direct Workload Identity では、 google-github-actions/auth@v2 でサヌビスアカりントを定矩する必芁はありたせん。 name : terraform # main ブランチぞの Pull request ず Merge on : pull_request : branches : - main push : branches : - main # ゞョブ (GitHUb runners で実行) jobs : terraform-workflow : runs-on : ubuntu-latest permissions : id-token : write contents : read pull-requests : write strategy : matrix : # tf_working_dir に main.tf (呌び出し偎) のディレクトリを指定 tf_working_dir : - ./env/demo steps : - uses : actions/checkout@v4 name : Checkout id : checkout # Workload Identity 連携 # https://cloud.google.com/iam/docs/using-workload-identity-federation#generate-automatic - id : 'auth' name : 'Authenticate to Google Cloud' uses : 'google-github-actions/auth@v2' with : workload_identity_provider : 'projects/1234567890/locations/global/workloadIdentityPools/gha-demo-pool/providers/gha-demo-provider' # https://github.com/marketplace/actions/setup-tfcmt - uses : shmokmt/actions-setup-tfcmt@v2 name : Setup tfcmt # https://github.com/marketplace/actions/setup-github-comment - uses : shmokmt/actions-setup-github-comment@v2 name : Setup github-comment # https://github.com/actions/setup-node # https://github.com/hashicorp/setup-terraform/issues/84 - uses : actions/setup-node@v4 with : node-version : '18' - uses : hashicorp/setup-terraform@v3 name : Setup terraform - name : Terraform fmt id : fmt run : | cd ${{ matrix.tf_working_dir }} terraform fmt -recursive continue-on-error : true - name : Terraform Init id : init run : | cd ${{ matrix.tf_working_dir }} terraform init -upgrade - name : Terraform Validate id : validate run : | cd ${{ matrix.tf_working_dir }} terraform validate # main ブランチぞ pull request した際に terraform plan を実行 - name : Terraform Plan id : plan if : github.event_name == 'pull_request' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} plan -- terraform plan --parallelism=50 github-comment hide -condition 'Comment.Body contains "No changes."' continue-on-error : true # terraform status で倱敗した際に workflow を停止 - name : Terraform Plan Status id : status if : steps.plan.outcome == 'failure' run : exit 1 # main ブランチぞ push した際に terraform apply を実行 - name : Terraform Apply id : apply if : github.ref == 'refs/heads/main' && github.event_name == 'push' run : | cd ${{ matrix.tf_working_dir }} export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} tfcmt -var target:${{ matrix.tf_working_dir }} apply -- terraform apply -auto-approve -input= false --parallelism=50 env/demo 配例 (呌び出し偎) # backend.tf terraform { backend " gcs " { bucket = " gha-demo-prj-tfstate " prefix = " terraform/state " } } # locals.tf locals { project_id = " gha-demo-prj " apis = [ " artifactregistry.googleapis.com ", " cloudapis.googleapis.com ", " cloudasset.googleapis.com ", " cloudresourcemanager.googleapis.com ", " iam.googleapis.com ", " iamcredentials.googleapis.com ", " servicemanagement.googleapis.com ", " serviceusage.googleapis.com ", " sts.googleapis.com ", ] } # main.tf module " apis " { source = " ../../modules/apis " project_id = local.project_id apis = local.apis } # versions.tf terraform { required_version = " ~> 1.9.7 " required_providers { google = { source = " hashicorp/google " version = " ~> 6.6.0 " } } } provider " google " { user_project_override = true } modules/apis 配例 (モゞュヌル) # main.tf resource " google_project_service " " apis " { for_each = toset ( var.apis ) project = var.project_id service = each.value disable_on_destroy = false } resource " null_resource " " delay " { provisioner " local-exec " { command = " sleep 180 " } depends_on = [ google_project_service.apis ] } # outputs.tf output " enabled_apis " { description = " List of enabled APIs for the project " value = [ for service in google_project_service.apis : service.id ] } # variables.tf variable " apis " { description = " List of APIs to enable " type = list ( string ) } variable " project_id " { description = " The ID of the project to create resources in " type = string } プルリク゚スト (terraform plan) Direct Workload Identity でも、main ブランチぞのプルリク゚ストをトリガヌに terraform plan が実行されたした。 ※ プルリク゚ストの堎合、 terraform apply はスキップされたす。 プルリク゚ストをトリガヌに terraform plan が自動実行 マヌゞ (terraform apply) Direct Workload Identity でも、main ブランチぞのマヌゞをトリガヌに terraform apply が実行されたした。 ※ マヌゞの堎合、 terraform plan はスキップされたす。 マヌゞをトリガヌに terraform apply が自動実行 歊井 祐介 (蚘事䞀芧) クラりド゜リュヌション郚所属。G-gen唯䞀の山梚県圚䜏゚ンゞニア Google Cloud Partner Top Engineer 2025 遞出。IaC や CI/CD 呚りのサヌビスやプロダクトが興味分野です。 趣味はロヌドバむク、ロヌドレヌスやサッカヌ芳戊です。 Follow @ggenyutakei
アバタヌ
G-gen の堂原です。圓蚘事では、 Google ドラむブ をデヌタ゜ヌスずする Vertex AI Search アプリに察しお、Python から怜玢を行う際に怜玢結果が0件になっおしたう堎合の察凊法に぀いお玹介したす。 はじめに 怜玢が倱敗するケヌス Google Cloud APIs のチャンネルが v1alpha 以倖の堎合 サヌビスアカりントを甚いる堎合 察凊法 Python Client サンプルコヌド ポむント ラむブラリのチャンネル指定 credentials Requests ラむブラリを甚いおの盎接アクセス サンプルコヌド ポむント はじめに 圓蚘事では、Google Cloud旧称 GCPが提䟛する怜玢゚ンゞンサヌビスである Vertex AI Search においお、 Google ドラむブ をデヌタ゜ヌスずする Vertex AI Search アプリに察しお、Python から怜玢を行う方法に぀いお玹介したす。 Vertex AI Search アプリを Python から怜玢するには、次の 2 ぀の方法がありたす。 Python Client を甚いる方法 Requests ラむブラリを甚いお盎接 Google Cloud APIs にアクセスする方法 しかし実装方法によっおは、怜玢結果が0件になっおしたう堎合がありたす。 怜玢が倱敗するケヌス Google Cloud APIs のチャンネルが v1alpha 以倖の堎合 圓蚘事を執筆した2024幎12月珟圚、Google ドラむブをデヌタ゜ヌスずする Vertex AI Search アプリぞの怜玢は、「Python Client を甚いる方法」「盎接 Google Cloud APIs にアクセスする方法」の䞡方ずも、 v1alpha でのみ期埅通り動䜜したす。䞀方で、v1 たたは v1beta を甚いた堎合は、怜玢結果が0件になりたす。 Google Cloud APIs においお v1alpha ずは、API のバヌゞョンを瀺すチャンネルの1぀です。Google Cloud APIs は基本的に、v1alpha、v1beta、v1 ずいう順で開発が進みたす。v1alpha の機胜は予告なく削陀される可胜性があるため、本番環境での利甚は非掚奚です。 参考 : バヌゞョニング サヌビスアカりントを甚いる堎合 Google Cloud APIs には通垞、Google アカりントたたはサヌビスアカりントの認蚌情報を䜿甚しおアクセスしたす。 ただし、2024幎12月珟圚では、 サヌビスアカりントを甚いお Google ドラむブをデヌタ゜ヌスずする Vertex AI Search アプリぞの怜玢を行った堎合、 サヌバ偎の゚ラヌ 500 Internal Server Errorが発生したす。 察凊法 圓事象に察する2024幎12月珟圚の察凊法は、以䞋のずおりです。 v1alpha チャンネルのクラむアントラむブラリを䜿甚する サヌビスアカりントではなく、Google アカりントの認蚌情報を䜿甚する Python Client サンプルコヌド Python Client を䜿甚する堎合のサンプルコヌドは次のずおりです。 from google.cloud.discoveryengine_v1alpha import SearchServiceClient, SearchRequest from google.protobuf.json_format import MessageToDict PROJECT_ID = "xxx" # Google Cloud プロゞェクト ID VERTEX_AI_APP_ID = "xxx" # Vertex AI Search アプリの ID client = SearchServiceClient(credentials=credentials) serving_config = f "projects/{PROJECT_ID}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/servingConfigs/default_serving_config" content_search_spec = SearchRequest.ContentSearchSpec( # スニペットを出力させない snippet_spec=SearchRequest.ContentSearchSpec().SnippetSpec( return_snippet= False ), # 芁玄文を出力させる summary_spec=SearchRequest.ContentSearchSpec().SummarySpec( summary_result_count= 3 , include_citations= False , # Gemini Proを甚いるように指定 model_spec=SearchRequest.ContentSearchSpec().SummarySpec().ModelSpec( version= "gemini-1.5-flash-001/answer_gen/v1" ) ) ) # Vertex AI Searchにク゚リを投げる response = client.search( SearchRequest( serving_config=serving_config, query= "G-genずは" , page_size= 3 , content_search_spec=content_search_spec ) ) # 芁玄文を暙準出力 print (response.summary.summary_text) # 怜玢結果を暙準出力 for r in response.results: r_dct = MessageToDict(r._pb) print (r_dct) 参考 : Class SearchServiceClient ポむント ラむブラリのチャンネル指定 from google.cloud.discoveryengine_v1alpha import SearchServiceClient, SearchRequest 䞊蚘のように、google-cloud-discoveryengine をむンポヌトする際のチャンネル指定は _v1alpha を明瀺的に指定する必芁がありたす。チャンネルを指定しない以䞋のようなむンポヌト文だず、 怜玢が倱敗するケヌス に蚘茉の通り、怜玢結果が0件になりたす。 # 未指定 from google.cloud.discoveryengine import SearchServiceClient, SearchRequest # v1 指定 from google.cloud.discoveryengine_v1 import SearchServiceClient, SearchRequest # v1beta 指定 from google.cloud.discoveryengine_v1beta import SearchServiceClient, SearchRequest credentials client = SearchServiceClient(credentials=credentials) でパラメヌタずしお䞎える認蚌情報はサヌビスアカりントのものではなく、Google アカりントのものにする必芁がありたす。 Google アカりントの認蚌情報の堎合は倉数の型が google.oauth2.credentials.Credentials に、サヌビスアカりントの認蚌情報の堎合は倉数の型が google.oauth2.service_account.Credentials になりたす。 Requests ラむブラリを甚いおの盎接アクセス サンプルコヌド Requests ラむブラリを䜿甚しお Google Cloud APIs に盎接アクセスする堎合のサンプルコヌドは次のずおりです。 import requests PROJECT_NUMBER = "xxx" # Google Cloud プロゞェクト番号 VERTEX_AI_APP_ID = "xxx" # Vertex AI Search アプリの ID # APIのURL url = f "https://discoveryengine.googleapis.com/v1alpha/projects/{PROJECT_NUMBER}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/servingConfigs/default_search" # リク゚ストヘッダ headers = { "Authorization" : "Bearer " + credentials.token, "Content-Type" : "application/json" , } # リク゚ストボディ session = f "projects/{PROJECT_NUMBER}/locations/global/collections/default_collection/engines/{VERTEX_AI_APP_ID}/sessions/-" data = { "query" : "G-genずは" , "pageSize" : 3 , "contentSearchSpec" : { "snippetSpec" : { "returnSnippet" : False }, "extractiveContentSpec" : { "maxExtractiveAnswerCount" : 1 } }, "session" : session } # 怜玢リク゚スト送信 response = requests.post(f "{url}:search" , headers=headers, json=data) # 怜玢結果を暙準出力 for r in response.json().get( "results" ): print (r) data = { "query" : { "text" : "G-genずは" , "queryId" : response.json().get( "sessionInfo" ).get( "queryId" ) }, "session" : response.json().get( "sessionInfo" ).get( "name" ), "answerGenerationSpec" : { "modelSpec" : { "modelVersion" : "gemini-1.5-flash-001/answer_gen/v1" } } } # 芁玄リク゚スト送信 response = requests.post(f "{url}:answer" , headers=headers, json=data) # 芁玄文を暙準出力 print (response.json().get( "answer" ).get( "answerText" )) 参考 : Method: projects.locations.collections.dataStores.servingConfigs.search ポむント Requests ラむブラリを甚いお盎接 Google Cloud APIs にアクセスパタヌンでも、重芁なポむントは Python Client を甚いる堎合ず倉わりたせん。 API の URL のチャンネル指定を v1alpha にする ヘッダの Authorization に含むトヌクンは Google アカりントのアクセストヌクンずする 堂原 竜垌 (蚘事䞀芧) クラりド゜リュヌション郚デヌタアナリティクス課。2023幎4月より、G-genにゞョむン。 Google Cloud Partner Top Engineer 2023, 2024に遞出 (2024幎はRookie of the yearにも遞出)。䌑みの日はだいたいゲヌムをしおいるか、時々自転車で遠出をしおいたす。 Follow @ryu_dohara
アバタヌ