G-gen ã®ææã§ããGoogle Cloud ã® Agent Platform ã«ãããŠãAgent Runtime ãš Agent Gateway ã䜿çšããŠèªå·±çœ²åèšŒææžãé©çšããããã©ã€ããŒã API ãšã³ããã€ã³ãã«ã¢ã¯ã»ã¹ããããã®ã¢ãŒããã¯ãã£ãšæ§ç¯æé ã«ã€ããŠè§£èª¬ããŸãã ã¯ããã« åœèšäºã®èæ¯ãšç®ç åæãšããç°å¢ãšæ
å ± ã¢ãŒããã¯ãã£ãšéä¿¡ãã㌠å
šäœã¢ãŒããã¯ã㣠éä¿¡ãš TLS æ€èšŒã®æµã èšèšã»èšå®ã®ãã€ã³ã èªå·±çœ²åèšŒææžã® X.509 èŠä»¶ TrustConfig ã®å®çŸ© Agent Connectivity Template ã§ã® TLS çµ±å Cloud DNS ãã©ã€ããŒããŸãŒã³ãš DNS Peering Terraform ã«ããã€ã³ãã©æ§ç¯ èªå·±çœ²åèšŒææžãš TrustConfig ãããã¯ãŒã¯é¢é£ãªãœãŒã¹ãš Agent Gateway IAP èªå¯ããªã·ãŒïŒAuthzPolicyïŒã®èšå® Cloud DNS ãš IAM æš©éã®èšå® API ãµãŒããŒïŒNginxïŒã®èšå® ãšãŒãžã§ã³ãå®è£
ADK ãšãŒãžã§ã³ãã®å®çŸ© Agent Runtime ãžã®ãããã€ã¹ã¯ãªãã åäœæ€èšŒ èžã¿å° VM ããã®çŽæ¥å°éç¢ºèª ãšãŒãžã§ã³ãããã®ãã©ã€ããŒã API åŒã³åºã Agent Gateway ã®ãã°ç¢ºèª VPC ãããŒãã°ã®ç¢ºèª ãªãœãŒã¹å逿ã®äŸåé¢ä¿ èšŒææžã®æŽæ°ã»è¿œå èšŒææžãçŽæ¥ç»é²ããå Žå ãã©ã€ããŒãã«ãŒã CA ãç»é²ããå Žå ã¯ããã« åœèšäºã®èæ¯ãšç®ç ãšã³ã¿ãŒãã©ã€ãºã® Google Cloud ç°å¢ã§ AI ãšãŒãžã§ã³ããéçšããå Žåã以äžã®ãããªãµãŒãã¹ã䜿çšãããŸãã ãµãŒãã¹å æŠèŠ åœç€Ÿè§£èª¬èšäº Agent Runtime ãã«ãããŒãžãã® AI ãšãŒãžã§ã³ã皌ååºç€ Gemini Enterprise Agent Platformã®Agent Runtimeã培åºè§£èª¬ Agent Gateway AI ãšãŒãžã§ã³ãããå€éšãžã®éä¿¡ãå¶åŸ¡ããæ©èœ Agent Gatewayã培åºè§£èª¬ïŒ Agent Registry AI ãšãŒãžã§ã³ãã MCP ãµãŒããŒãAPI ãšã³ããã€ã³ããç»é²ããã«ã¿ãã°åãããã«ãããŒãžããµãŒãã¹ Agent Registryã培åºè§£èª¬ïŒ AI ãšãŒãžã§ã³ãããã«ãããŒãžãåºç€ã§ãã Agent Runtime ã§çšŒåãããAI ãšãŒãžã§ã³ããžã® Ingress / Egress éä¿¡ã Agent Gateway ã§å¶åŸ¡ããããšã§ãå°ããéçšè² è·ã§ã»ãã¥ã¢ã« AI ãšãŒãžã§ã³ããéçšã§ããŸãã ãšã³ã¿ãŒãã©ã€ãºç°å¢ã§ã¯ããšãŒãžã§ã³ããã¢ã¯ã»ã¹ãã察象ã¯ãããªãã¯ãª Web API ã ããšã¯éããŸãããVPC ãããã¯ãŒã¯å
ããªã³ãã¬ãã¹ãä»ã®ãããªãã¯ã¯ã©ãŠãåºç€çã«ãã¹ããããã瀟å
MCP ãµãŒããŒãããŒã¿ããŒã¹é£æºçš API ãªã©ããã©ã€ããŒããªãšã³ããã€ã³ããšéä¿¡ãããèŠä»¶ãçºçããŸãã Agent Runtime ã§çšŒåãã AI ãšãŒãžã§ã³ããããVPC ãããã¯ãŒã¯ãããã«æ¥ç¶ããããããã¯ãŒã¯äžã®ãªãœãŒã¹ãžãã©ã€ããŒãã«ã¢ã¯ã»ã¹ããææ®µãšããŠãPrivate Service ConnectïŒä»¥äžã PSC ïŒã€ã³ã¿ãŒãã§ãŒã¹ãæäŸãããŠããŸããããã䜿çšããããšã§ãAgent Runtime äžã® AI ãšãŒãžã§ã³ããããäŒæ¥å
ã®ãã©ã€ããŒã㪠API ãšã³ããã€ã³ããžã®æ¥ç¶ãå¯èœã§ãã ãŸããAgent Gateway ã䜿ããšããšãŒãžã§ã³ãã¯èš±å¯ãããéä¿¡å
ã«ããéä¿¡ã§ããªããªããŸããããã«ãããæªæã®ãã API ãšã³ããã€ã³ãã«äŒæ¥ããŒã¿ãéä¿¡ãããªã©ã®ãªã¹ã¯ãæªç¶ã«é²æ¢ã§ããŸããAgent Gateway ã§ãšãŒãžã§ã³ãã®éä¿¡ãçµ±å¶ããå Žåãèš±å¯ããæ¥ç¶å
ã® API ãšã³ããã€ã³ã㯠Agent Registry ã«ç»é²ããå¿
èŠããããŸãããªãç»é²ãã API ãšã³ããã€ã³ã㯠HTTPS ãããã³ã«ãåãã€ããå¿
èŠããããŸããéæå·åã® HTTP ãããã³ã«ã®ãšã³ããã€ã³ãã¯ãç»é²ã§ããªã仿§ã§ãã éçºç°å¢ã瀟å
éåç¶²å
ã®ãã©ã€ããŒã API ãµãŒããŒã§ã¯ããããªã㯠CAïŒèªèšŒå±ïŒãçºè¡ããèšŒææžã§ã¯ãªãã èªå·±çœ²åèšŒææž ïŒãããããªã¬ãªã¬èšŒææžïŒãçµç¹å
éšã®ãã©ã€ããŒã CA ã§çºè¡ãããèšŒææžã䜿çšãããŠããã±ãŒã¹ãå€ãèŠãããŸããAgent Gateway ã¯ã ããã©ã«ãã§ã¯ãããªãã¯ãªèªèšŒå±ã®ã¿ãä¿¡é Œ ãããããèªå·±çœ²åèšŒææžãžã®éä¿¡ã§ã¯ TLS ãã³ãã·ã§ã€ã¯æã«èšŒææžæ€èšŒãšã©ãŒãçºçããéä¿¡ã鮿ãããŠããŸããŸãã åœèšäºã§ã¯ãCertificate Manager ã® TrustConfig ãé©åã«èšå®ããAgent Gateway ã§èªå·±çœ²åèšŒææžãæ£ããä¿¡é Œã»æ€èšŒããŠãã©ã€ããŒã API ã«æ¥ç¶ããããã®æ§æãšãTerraform ã«ããã€ã³ãã©å®çŸ©ã»ADK ãšãŒãžã§ã³ãã®å®è£
æé ã解説ããŸãã åè : Route Agent Runtime traffic through Agent Gateway åè : Troubleshoot Agent Gateway connectivity - Self-signed or private CA destinations fail to connect åæãšããç°å¢ãšæ
å ± åœèšäºã§æ±ãå
容ã¯ã2026幎10æçŸåšã® Google Cloud å
¬åŒããã¥ã¡ã³ãããã³ Terraform Provider 仿§ã«åºã¥ããŠããŸãã åœèšäºã§åãäžãã䞻㪠Google Cloud ãµãŒãã¹ããã³ã³ã³ããŒãã³ãã¯ä»¥äžã®éãã§ãã Agent Runtime Agent Gateway Certificate ManagerïŒTrustConfigïŒ Cloud DNS Agent Development KitïŒADK 2.0ïŒ ã¢ãŒããã¯ãã£ãšéä¿¡ãã㌠å
šäœã¢ãŒããã¯ã㣠åœèšäºã§ã¯ã以äžã®ãããªç°å¢ãæ§ç¯ããŠãAgent Gateway ã§èªå·±çœ²åèšŒææžã䜿çšãã HTTPS ãšã³ããã€ã³ãã«æ¥ç¶ããæ§æãæ€èšŒããŸãã Agent Gateway ãçµç±ãããã©ã€ããŒã API æ¥ç¶æ§æå³ åã³ã³ããŒãã³ãã®åœ¹å²ã¯ä»¥äžã®éãã§ãã ã³ã³ããŒãã³ã 圹å²ã»æ©èœ ãšãŒãžã§ã³ã (Agent Runtime) ADK ã§éçºãã AI ãšãŒãžã§ã³ããAgent Gateway çµç±ã§å
éš API ã®åŒã³åºãããŒã«ãå®è¡ Agent Gateway ãšãŒãžã§ã³ãããã®éä¿¡ãã©ãã£ãã¯ïŒEgressïŒãéçŽã»å¶åŸ¡ããã²ãŒããŠã§ã€ TrustConfig (Certificate Manager) èªå·±çœ²åèšŒææžãä¿¡é Œã¢ã³ã«ãŒïŒTrust AnchorïŒãšããŠç»é²ããAgent Gateway ã«ãã TLS æ€èšŒãæåãããããã®èšŒææžèšå® PSC Network Attachment Agent Gateway ã顧客 VPC ãããã¯ãŒã¯ãž Egress éä¿¡ãè¡ãããã® PSC æ¥ç¶ãã€ã³ã Private Zone (Cloud DNS) VPC å
éšã®åå解決ãè¡ããŸãŒã³ãAgent Gateway ãšã® DNS Peering ã«ããããã¹ãåïŒ api-server ïŒã® IP 解決ãå¯èœã«ãã API Server ãããªã㯠IP ã¢ãã¬ã¹ãæããªã Compute Engine VMãèªå·±çœ²åèšŒææžãçšãã HTTPS API ãæäŸ éä¿¡ãš TLS æ€èšŒã®æµã ãšãŒãžã§ã³ããå
éš API ãåŒã³åºãéã®éä¿¡ã¹ãããã¯ä»¥äžã®éãã§ãã 1. ãšãŒãžã§ã³ãã«ããããŒã«å®è¡ AI ãšãŒãžã§ã³ããããŒã«ã䜿çšããŠãšã³ããã€ã³ã https://api-server/api ã«å¯Ÿã㊠HTTPS ãªã¯ãšã¹ããçºè¡ããŸãã 2. Agent Gateway ã«ãã Egress ãã©ãã£ãã¯ã®éçŽ ãšãŒãžã§ã³ãããã®éä¿¡ãã©ãã£ãã¯ã¯ãAgent Runtime ã«ãã€ã³ãããã Agent Gateway ã«éçŽãããŸãããšãŒãžã§ã³ãåŽã§ VPC æ¥ç¶çšã® Network Attachment ãåå¥ã«æèã»æå®ããå¿
èŠã¯ãªããAgent Gateway ããã€ã³ãããã ãã§ VPC ãžã®ãã©ã€ããŒãã¢ã¯ã»ã¹ãå¯èœã§ãã 3. DNS Peering ã«ããå
éšåå解決 Agent Gateway ã¯ãAgent Connectivity Template ã«èšå®ããã DNS Peering èšå®ã«åºã¥ããVPC ã® Cloud DNS ãã©ã€ããŒããŸãŒã³ïŒ api-server. ïŒãåç
§ããŠå
éš IP ã¢ãã¬ã¹ïŒäŸ: 10.146.0.59 ïŒã解決ããŸãã 4. PSC Network Attachment ã«ãã VPC ãžã® Egress 転é Agent Gateway ã¯ã解決ãããå
éš IP ã«åããŠãAgent Connectivity Template ã«çŽä»ãããã PSC Network Attachment ãçµç±ã㊠VPC ãããã¯ãŒã¯ãžã® Egress éä¿¡ã確ç«ããŸãã 5. èªå¯ããªã·ãŒïŒAuthzPolicyïŒã®è©äŸ¡ Agent Gateway ã«ãã€ã³ãããã IAP AuthzPolicy ã«ããèªå¯ãã§ãã¯ïŒåœæ€èšŒç°å¢ã§ã¯ç£æ»ãã°åºåçšã® DRY_RUN ã¢ãŒãïŒãè¡ãããŸãã 6. TrustConfig ã«ãã TLS èšŒææžæ€èšŒ Agent Gateway ã¯å¯Ÿè±¡ãµãŒããŒãšã®éã§ TLS ãã³ãã·ã§ã€ã¯ãéå§ããŸãããµãŒããŒããæç€ºãããèªå·±çœ²åèšŒææžã¯ãCertificate Manager ã® TrustConfig ã«ç»é²ãããä¿¡é Œã¢ã³ã«ãŒïŒTrust AnchorïŒãšç
§åãããŸããã¢ã³ã«ãŒãšäžèŽãããšãèšŒææžãã§ãŒã³ã®æ€èšŒãæ£åžžã«ãã¹ããŸãã 7. ã¬ã¹ãã³ã¹è¿åŽ ãªã¯ãšã¹ãã API ãµãŒããŒã«è»¢éãããŸããAPI ãµãŒããŒããã®ã¬ã¹ãã³ã¹ïŒHTTP 200ïŒã¯ Agent Gateway ãéããŠãšãŒãžã§ã³ãã«è¿åŽãããŸãã èšèšã»èšå®ã®ãã€ã³ã èªå·±çœ²åèšŒææžã® X.509 èŠä»¶ Certificate Manager ã® TrustConfig ãšåŒã°ããèšå®ã§ã¯ãèšŒææžãä¿¡é Œãããããã«ãã«ãŒã CA ãç»é²ãããããªãã·ã§ã³ã§äžéèšŒææžãåå¥ã®èšŒææžãç»é²ã§ããŸãã ã«ãŒã CA ãç»é²ããã«åå¥ã®æ«ç«¯èšŒææžãèš±å¯ãªã¹ãã«ç»é²ããããšãã§ããŸãããã®æ¹æ³ã¯ã·ã³ãã«ã§ãããèšŒææžã®æå¹æéåãã«äŒŽãåäœæã®ãã³ããããã¯æ¥ç¶å
ãµãŒããŒãå¢ãããã³ã«ãGoogle Cloud åŽã® TrustConfig ãéœåºŠæŽæ°ã»åãããã€ããå¿
èŠããããŸãã åœèšäºã§ã¯ãéçšã®æ¡åŒµæ§ããã³å°æ¥çãªãã©ã€ããŒã CA éçšïŒåŸè¿°ïŒãžã®ç§»è¡ãèŠæ®ããèªå·±çœ²åèšŒææžåŽã« CA 屿§ïŒ CA:TRUE ïŒãä»äžã㊠trust_anchors ã«ç»é²ããã¢ãããŒããæ¡çšããŸãã TrustConfig ã®ä¿¡é Œã¢ã³ã«ãŒïŒTrust AnchorïŒãšããŠèªå·±çœ²åèšŒææžãç»é²ããå Žåããã®èšŒææžã X.509 ã®ä»æ§äžãCA ãšããŠã®å±æ§ãæã£ãŠããå¿
èŠããããŸããéåžžã®æ«ç«¯ãµãŒããŒèšŒææžããã®ãŸãŸ TrustConfig ã®ã¢ã³ã«ãŒã«ç»é²ããŠããCA å¶çŽãæºãããŠããªãå Žåã¯æ€èšŒã«å€±æããŸãããã®ãããèªå·±çœ²åèšŒææžãçæããéã¯ä»¥äžã®æ¡åŒµå±æ§ãä»äžããŸãã èšå®é
ç® å€ Basic Constraints CA:TRUE ïŒèªèšŒå±ã§ããããšã瀺ããã©ã°ïŒ Key Usage Certificate Sign ïŒ cert_signing ïŒã Digital Signature ã Key Encipherment Subject Alternative Name (SAN) æ¥ç¶å
ãã¹ãåïŒ api-server ïŒããã³å
éš IP ã¢ãã¬ã¹ TrustConfig ã®å®çŸ© Certificate Manager ã® TrustConfig ãªãœãŒã¹ã¯ããšããšãmTLS ã Egress éä¿¡æã® TLS æ€èšŒã«ãããŠãGoogle Cloud ã®ãããŒãžããããã·ãä¿¡é Œãã¹ãèšŒææžã®ã«ãŒã CA ãäžéèšŒææžãåå¥ã®èšŒææžçãå®çŸ©ãããªãœãŒã¹ã§ãã åè : Core components of Certificate Manager - Trust configs åœèšäºã®å®è£
äŸã§ã¯æ§æãã·ã³ãã«ã«ãããããåè¿°ã®ãšãã API ãµãŒããŒèªèº«ãçºè¡ããèªå·±çœ²åèšŒææžããCA ã®æ§è³ªãæãããããã§çŽæ¥ç»é²ããŸãã èªåã®ãã©ã€ããŒãã«ãŒã CA èšŒææžã Trust Anchors ã«ç»é²ããAPI ãµãŒããŒã«ã¯ãã® CA ã眲åããèšŒææžãé
眮ããããšãã£ãå®è·µçãªéçšã«ã€ããŠã¯ãåœèšäºæ«å°Ÿã«åŸè¿°ããŸãã Agent Connectivity Template ã§ã® TLS çµ±å Agent Gateway ã«ãããã¯ãŒã¯é¢é£èšå®ãé©çšããããã®èšå®ãã³ãã¬ãŒãã§ãã Agent Connectivity Template ã«ãããŠãEgress éä¿¡æã® TLS èšå®ãå®çŸ©ããŸãã èšå®æã®éèŠãªãã©ã¡ãŒã¿ã¯ä»¥äžã®2ç¹ã§ãã ãã©ã¡ãŒã¿å å€ trust_config äœæãã Certificate Manager TrustConfig ã®å®å
šãªãªãœãŒã¹ ID ãæå® additional_roots "PUBLICLY_TRUSTED_ROOTS" ãæå®ãããã«ãããTrustConfig ã§å®çŸ©ããã«ã¹ã¿ã èšŒææžã«å ããŠããããªãã¯ã«ä¿¡é Œãããäžè¬çãªã«ãŒãèšŒææžïŒGoogle Trust Services ã Let's Encrypt çïŒãåŒãç¶ãä¿¡é Œããã åè : Set up VPC connectivity for Agent Gateway Cloud DNS ãã©ã€ããŒããŸãŒã³ãš DNS Peering TLS éä¿¡ã«ãããŠãã¯ã©ã€ã¢ã³ãããã³ Agent Gateway ã¯ãæ¥ç¶å
ãã¹ãåãšãµãŒããŒèšŒææžã® Subject Alternative NameïŒSANïŒãäžèŽããŠããããæ€èšŒããŸãããã®ãããIP ã¢ãã¬ã¹ãçŽæ¥æå®ããã®ã§ã¯ãªãããã¡ã€ã³åïŒãã¹ãåïŒã§ã®æ¥ç¶ããååãšããŠå¿
é ãšãªããŸãã Agent Gateway ãã VPC å
éšã®ãã¹ãåã解決ããããã«ã¯ã以äžã®èšå®ãå¿
èŠã§ãã VPC ãããã¯ãŒã¯ã«çŽä»ãã Cloud DNS ãã©ã€ããŒããŸãŒã³ïŒäŸ: api-server. ïŒãäœæããA ã¬ã³ãŒããç»é² Agent Connectivity Template ã® dns_peering_config ã§å¯Ÿè±¡ãã¡ã€ã³ãšã¿ãŒã²ãã VPC ãããã¯ãŒã¯ãæå® Agent Gateway ã®ãããŒãžããµãŒãã¹ã¢ã«ãŠã³ãã«å¯ŸããŠããããžã§ã¯ãã¬ãã«ã§ DNS ãã¢ïŒ roles/dns.peer ïŒããŒã«ãä»äž Terraform ã«ããã€ã³ãã©æ§ç¯ èªå·±çœ²åèšŒææžãš TrustConfig åœèšäºã§ã¯ãTerraform ãäžå¿ãšããŠåçš®èšå®ãšã€ã³ãã©æ§ç¯ãè¡ããŸãããµã³ãã«ã³ãŒãã§ã¯ data.google_project ãªã©ãäºåã«å®çŸ©ãããŠããããšãåæã®å€ããããããå®éã®éçºã®éã¯ããããéæãè£è¶³ããŠãã ãããåœèšäºã§ã¯äžå¿çãªèŠçŽ ã®ã¿ã玹ä»ããŸãã 以äžã®ã³ãŒãã§ã¯ãTerraform ã® tls ãããã€ãã䜿çšããŠèšŒææžãçæãã google_certificate_manager_trust_config ã§ä¿¡é Œèšå®ãè¡ããŸãã # 1. ç§å¯éµã®çæ resource "tls_private_key" "api_server" { algorithm = "RSA" rsa_bits = 2048 } # 2. X.509 CA å¶çŽãä»äžããèªå·±çœ²åèšŒææžã®çæ resource "tls_self_signed_cert" "api_server" { private_key_pem = tls_private_key.api_server.private_key_pem subject { common_name = "api-server" organization = "Internal API" } # 1幎éæå¹ validity_period_hours = 8760 # TrustConfig ã®ä¿¡é Œã¢ã³ã«ãŒãšãããã CA ãã©ã°ãä»äž is_ca_certificate = true allowed_uses = [ "key_encipherment" , "digital_signature" , "server_auth" , "cert_signing" , ] dns_names = [ "api-server" ] ip_addresses = [ var.api_server_internal_ip ] } # 3. Certificate Manager TrustConfig ãžã®ç»é² resource "google_certificate_manager_trust_config" "internal_api" { provider = google-beta name = "internal-api-trust-config" location = var.region description = "Trust config for internal API server self-signed certificate" trust_stores { trust_anchors { pem_certificate = tls_self_signed_cert.api_server.cert_pem } } } åè : Terraform - tls_private_key åè : Terraform - tls_self_signed_cert åè : Terraform - google_certificate_manager_trust_config ãããã¯ãŒã¯é¢é£ãªãœãŒã¹ãš Agent Gateway 次ã®ã³ãŒãã§ã¯ãNetwork AttachmentãDNS Peeringãããã³ TrustConfig ãæããæ¥ç¶ãã³ãã¬ãŒããäœæããAgent Gateway ã«é©çšããŠããŸãã # 1. PSC Network Attachment resource "google_compute_network_attachment" "agent_attachment" { name = "agent-runtime-attachment" region = var.region subnetworks = [ "projects/$ { var.project_id } /regions/$ { var.region } /subnetworks/$ { var.subnetwork_name } " ] connection_preference = "ACCEPT_AUTOMATIC" } # 2. Agent Connectivity Template resource "google_network_services_agent_connectivity_template" "default" { provider = google-beta agent_connectivity_template_id = "agent-connectivity-template" location = var.region access_path = "AGENT_TO_ANYWHERE" egress_network_config { network_attachment = google_compute_network_attachment.agent_attachment.id vpc_egress = "PRIVATE_RANGES_ONLY" # VPC å
ã® Cloud DNS ãŸãŒã³ã«å¯Ÿãã Peering dns_peering_config { domains = [ "api-server." ] target_network = "projects/$ { var.project_id } /global/networks/$ { var.network_name } " } # èªå·±çœ²åèšŒææžã® TrustConfig ãã€ã³ã tls_config { trust_config = google_certificate_manager_trust_config.internal_api.id additional_roots = "PUBLICLY_TRUSTED_ROOTS" } } } # 3. Agent Gateway (Egress Mode) resource "google_network_services_agent_gateway" "egress" { provider = google-beta name = "test-gw-egress" location = var.region description = "Agent Gateway with VPC egress connectivity" agent_connectivity_template = "projects/$ { data.google_project.current.number } /locations/$ { var.region } /agentConnectivityTemplates/$ { google_network_services_agent_connectivity_template.default.agent_connectivity_template_id } " google_managed { governed_access_path = "AGENT_TO_ANYWHERE" } registries = [ "//agentregistry.googleapis.com/projects/$ { var.project_id } /locations/$ { var.region } " ] } åè : Terraform - google_compute_network_attachment åè : Terraform - google_network_services_agent_connectivity_template åè : Terraform - google_network_services_gateway IAP èªå¯ããªã·ãŒïŒAuthzPolicyïŒã®èšå® Agent Gateway ãçµç±ãããã©ãã£ãã¯ã«å¯ŸããŠãIdentity-Aware ProxyïŒIAPïŒãšé£æºããèªå¯ãç£æ»ãã°åºåãé©çšããããã AuthzExtension ããã³ AuthzPolicy ãå®çŸ©ã㊠Agent Gateway ã«çŽä»ããŸãã åè : Delegate authorization with Service Extensions ä»åã¯æ§ç¯åæã®çéæ€èšŒãåæ»ã«è¡ããããIAP ã®åŒ·å¶ã¢ãŒãïŒ iamEnforcementMode ïŒã DRY_RUN ïŒãã©ã€ã©ã³ïŒã«èšå®ããŠããŸããããã«ãããèªå¯ããªã·ãŒã«ããæå³ããªãéä¿¡æåŠãé²ãã€ã€ãCloud Logging ã§èªå¯å€å®ãã°ãç£èŠããããšãã§ããŸãã # 1. IAP 飿ºçš AuthzExtension (DRY_RUN ã¢ãŒã) resource "google_network_services_authz_extension" "iap_extension" { provider = google-beta name = "test-gw-egress-iap-authzextension" location = var.region service = "iap.googleapis.com" timeout = "10s" fail_open = true metadata = { iapPolicyVersion = "V2" iamEnforcementMode = "DRY_RUN" } } # 2. Agent Gateway ã«çŽä»ãã AuthzPolicy resource "google_network_security_authz_policy" "iap_authz_policy" { provider = google-beta name = "test-gw-egress-iap-authzpolicy" location = var.region description = "AuthzPolicy binding IAP extension to Agent Gateway" policy_profile = "REQUEST_AUTHZ" action = "CUSTOM" target { resources = [ "projects/$ { data.google_project.current.number } /locations/$ { var.region } /agentGateways/$ { google_network_services_agent_gateway.egress.name } " ] } custom_provider { authz_extension { resources = [ google_network_services_authz_extension.iap_extension.id ] } } } åè : Terraform - google_network_services_authz_extension åè : Terraform - google_network_security_authz_policy å®éã®ã¢ã¯ã»ã¹å¶åŸ¡ãéå§ããéã¯ã iamEnforcementMode ã®è¡ãåé€ããŠæ¬çªé©çšã«åãæ¿ãããšãŒãžã§ã³ãã®ãµãŒãã¹ã¢ã«ãŠã³ãã«å¯ŸããŠå¿
èŠãª IAP ããŒã«ãä»äžããŠãã ããã ãªããåœèšäºã§ã¯çé確èªãåªå
ããŠãã©ã€ã©ã³ã¢ãŒãã§æ€èšŒããŠãããããAPI ãšã³ããã€ã³ãã Agent Registry ãžç»é²ããäœæ¥ã¯çç¥ããŠããŸããå®éã«ã¯ãå®å
ã®ãšã³ããã€ã³ã URL ã Agent Registry ã«ç»é²ããŠãã ããã åè : Route Agent Runtime traffic through Agent Gateway Cloud DNS ãš IAM æš©éã®èšå® ãã¹ãå api-server ã®åå解決çšãŸãŒã³ãšãAgent Gateway ã DNS Peering ãè¡ãããã®æš©éãèšå®ããŸãã # 1. Cloud DNS ãã©ã€ããŒããŸãŒã³ resource "google_dns_managed_zone" "internal_api" { name = "api-server-private-zone" dns_name = "api-server." description = "Private DNS zone for internal API server" visibility = "private" private_visibility_config { networks { network_url = "projects/$ { var.project_id } /global/networks/$ { var.network_name } " } } } # 2. A ã¬ã³ãŒãã®ç»é² resource "google_dns_record_set" "api_server_a" { name = "api-server." managed_zone = google_dns_managed_zone.internal_api.name type = "A" ttl = 300 rrdatas = [ var.api_server_internal_ip ] } # 3. Agent Gateway ãµãŒãã¹ã¢ã«ãŠã³ããžã® DNS ãã¢ãªã³ã°æš©éä»äž resource "google_project_iam_member" "agent_gateway_dns_peer" { project = var.project_id role = "roles/dns.peer" member = "serviceAccount:service-$ { data.google_project.current.number } @gcp-sa-agentgateway.iam.gserviceaccount.com" } resource "google_project_iam_member" "dep_dns_peer" { project = var.project_id role = "roles/dns.peer" member = "serviceAccount:service-$ { data.google_project.current.number } @gcp-sa-dep.iam.gserviceaccount.com" } åè : Terraform - google_dns_managed_zone åè : Terraform - google_dns_record_set åè : Terraform - IAM policy for projects åè : Terraformã§Google Cloudã®IAMã管çããéã®æ³šæç¹ - G-gen Tech Blog API ãµãŒããŒïŒNginxïŒã®èšå® æ€èšŒçšã®ãã©ã€ããŒã VMïŒCompute EngineïŒã®ã¹ã¿ãŒãã¢ããã¹ã¯ãªããã§ãTerraform ã§çæããèšŒææžãé
眮ããNginx ã HTTPS ã§æ§æããŸãããªãã以äžã«æ²èŒããã¹ã¯ãªãã㯠Terraform å
ã«èšè¿°ããæ³å®ãªã®ã§ãTerraform ã®å€æ°ãåç
§ããŠããŸãã #!/bin/bash set -e apt-get update apt-get install -y nginx # èšŒææžããã³ç§å¯éµã®é
眮 mkdir -p /etc/nginx/ssl cat << 'CERT' > /etc/nginx/ssl/server.crt ${tls_self_signed_cert.api_server.cert_pem} CERT cat << 'KEY' > /etc/nginx/ssl/server.key ${tls_private_key.api_server.private_key_pem} KEY chmod 600 /etc/nginx/ssl/server.key chmod 644 /etc/nginx/ssl/server.crt # Nginx èšå® (HTTPS 443 ã§ /api ãæäŸ) cat << 'CONFIG_EOF' > /etc/nginx/conf.d/api.conf server { listen 443 ssl default_server; listen [::]:443 ssl default_server; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.key; ssl_protocols TLSv1.2 TLSv1.3; location /api { default_type text/plain; return 200 'Hello, world\n'; } } CONFIG_EOF rm -f /etc/nginx/sites-enabled/default systemctl restart nginx ãšãŒãžã§ã³ãå®è£
ADK ãšãŒãžã§ã³ãã®å®çŸ© Google ãæäŸãã AI ãšãŒãžã§ã³ãéçºãã¬ãŒã ã¯ãŒã¯ã§ãã Agent Development KitïŒADKïŒã® Python çã䜿çšããŠãå
éš API ãåŒã³åºããšãŒãžã§ã³ããèšè¿°ããŸãã åè : Agent Development Kit ä»åã®ãšãŒãžã§ã³ãã¯æ€èšŒçšãªã®ã§ãåçŽã« API ãšã³ããã€ã³ããåŒã³åºããŠçµæããŠãŒã¶ãŒã«è¿ããã®ãšããŠããŸãããšãŒãžã§ã³ãå
ã®ããŒã« fetch_internal_api ã§ã¯ã requests ã©ã€ãã©ãªã䜿çšã㊠https://api-server/api ãåŒã³åºããŸãã """ADK Agent Definition for PSC Interface Private API Connection.""" import os import requests import urllib3 from google.adk.agents import Agent from google.adk.models import Gemini from vertexai import agent_engines # èªå·±çœ²åèšŒææžã«äŒŽã InsecureRequestWarning ã®èŠåãææ¢ urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def fetch_internal_api ( target_url: str = "https://api-server/api" , ) -> dict : """å
éšãã©ã€ããŒã API ãšã³ããã€ã³ãããããŒã¿ãååŸããããŒã«ã""" try : # ãã¹ãå api-server å®ãŠã«ãªã¯ãšã¹ã # Agent Gateway åŽã§ TrustConfig ã«ãã TLS æ€èšŒã宿œããã response = requests.get(target_url, verify= False , timeout= 10 ) return { "success" : True , "status_code" : response.status_code, "content" : response.text.strip(), "target_url" : target_url, } except Exception as exc: return { "success" : False , "error_type" : type (exc).__name__, "error_message" : str (exc), "target_url" : target_url, } root_agent = Agent( model=Gemini( model=os.environ.get( "GEMINI_MODEL" , "gemini-3.5-flash-lite" ), client_kwargs={ "vertexai" : True , "location" : "global" }, ), name= "psc_internal_api_agent" , description= "å
éšãã©ã€ããŒã API ãšéä¿¡å¯èœãªã¢ã·ã¹ã¿ã³ããšãŒãžã§ã³ãã" , instruction=( "You are a helpful assistant deployed in Google Cloud Agent Runtime. " "You have access to an internal API endpoint (https://api-server/api) hosted within a private VPC network. " "When asked to call the internal API or check the endpoint, " "always use the `fetch_internal_api` tool to query the API. " "Present the tool's result clearly to the user." ), tools=[fetch_internal_api], ) # Agent Runtime ãããã€çšã® AdkApp ã©ãã㌠app = agent_engines.AdkApp(agent=root_agent) Agent Runtime ãžã®ãããã€ã¹ã¯ãªãã äœæãããšãŒãžã§ã³ãã Agent Runtime ã«ãããã€ããŸãããã®éã agent_gateway_config ã«æ§ç¯æžã¿ã® Agent Gateway ãªãœãŒã¹åãæå®ããã®ããã€ã³ãã§ãã import agentplatform from vertexai import types from agents.agent import app client = agentplatform.Client(project=project_id, location=location) agent_gateway_resource = ( f "projects/{project_id}/locations/{location}/agentGateways/{agent_gateway_name}" ) config = { "display_name" : "psc-internal-api-agent" , "description" : "Agent Runtime querying internal API via Agent Gateway" , "identity_type" : types.IdentityType.AGENT_IDENTITY, "requirements" : [ "google-cloud-aiplatform[agent_engines,adk]" , "google-adk>=2.8.0" , "cloudpickle" , "pydantic" , "requests" , "urllib3" , ], "extra_packages" : [ "agents" ], "staging_bucket" : f "gs://{staging_bucket}" , "agent_framework" : "google-adk" , # Agent Gateway ã®ãã€ã³ãèšå® "agent_gateway_config" : { "agent_to_anywhere_config" : { "agent_gateway" : agent_gateway_resource, } }, "env_vars" : { "GOOGLE_API_PREVENT_AGENT_TOKEN_SHARING_FOR_GCP_SERVICES" : "False" , }, } remote_agent = client.agent_engines.create( agent=app, config=config, ) åäœæ€èšŒ èžã¿å° VM ããã®çŽæ¥å°éç¢ºèª ãŸããã€ã³ãã©åŽã®åäœç¢ºèªãšããŠãåã VPC å
ã«é
眮ããèžã¿å°ïŒBastionïŒVM ãã Cloud IAP çµç±ã§ SSH æ¥ç¶ããå
éš API ãµãŒããŒãžã®çŽæ¥å°éã確èªããŸãã # èžã¿å° VM ã« SSH æ¥ç¶ gcloud compute ssh bastion --tunnel-through-iap --zone = asia-northeast1-a --project = my-project # èžã¿å° VM å
ã§å
éš API ãå®è¡ curl -k https://api-server/api ä»åãåŒã³åºãã®å¯Ÿè±¡ãšãã API ã¯åçŽãªæååãè¿ããµã³ãã«ãªã®ã§ãå®è¡çµæãšããŠä»¥äžã®ããã«ã¬ã¹ãã³ã¹ãè¿åŽãããŸãã Hello, world ãšãŒãžã§ã³ãããã®ãã©ã€ããŒã API åŒã³åºã 次ã«ãAgent Runtime äžã«ãããã€ããããšãŒãžã§ã³ãã Python ã¹ã¯ãªããããåŒã³åºãããšãŒãžã§ã³ããå
éš API ããããŒã¿ãååŸã§ãããããã¹ãããŸãã import agentplatform client = agentplatform.Client(project=project_id, location=location) remote_agent = client.agent_engines.get(name=agent_resource_name) # ãšãŒãžã§ã³ããžã®åãåãã response = remote_agent.query( input ={ "message" : "å
éš API ã®ãšã³ããã€ã³ã https://api-server/api ã«ã¢ã¯ã»ã¹ããŠçµæãæããŠãã ããã" } ) print (response) å®è¡æã®åºåäŸã¯ä»¥äžã®éãã§ãã [Tool Invocation]: fetch_internal_api with args: {'target_url': 'https://api-server/api'} [Tool Result]: fetch_internal_api -> {'success': True, 'status_code': 200, 'content': 'Hello, world', 'target_url': 'https://api-server/api'} [Agent Response (psc_internal_api_agent)]: å
éš API ãšã³ããã€ã³ã `https://api-server/api` ãžã®ãªã¯ãšã¹ãçµæã¯ä»¥äžã®éãã§ãïŒ - **HTTP ã¹ããŒã¿ã¹ã³ãŒã:** 200 - **ã¬ã¹ãã³ã¹ããã£:** Hello, world äžèšã®ããã«ãAgent Gateway ã TrustConfig ãåç
§ããŠèªå·±çœ²åèšŒææžãé©åã«æ€èšŒããåå解決ãã HTTPS éä¿¡ãŸã§ãæ£åžžã«äžç¶ã§ããŠããããšã確èªã§ããŸãã Agent Gateway ã®ãã°ç¢ºèª ãã®ãšããCloud Logging ã«ã¯ãã©ã€ã©ã³ã¢ãŒãã§çšŒåããŠãã Agent Gateway ã«ãã£ãŠã¢ã¯ã»ã¹ãæåŠããæšã®ãã°ãåºåãããŸãã åœæ€èšŒã§ã¯ãAgent Gateway ããã©ã€ã©ã³ã¢ãŒãã«ããŠããã®ã§ã jsonPayload.authzPolicyInfo.result ã®å€ã ALLOWED ã«ãªã£ãŠããŸãããã©ã€ã©ã³ã¢ãŒããè§£é€ããŠãã©ãã£ãã¯ãæåŠããããšããã®å€ã¯ DENIED ãšãªããã¹ããŒã¿ã¹ã³ãŒãã¯403ãšãªããŸããAPI ãšã³ããã€ã³ãã Agent Registry ã«ç»é²ããèš±å¯å¯Ÿè±¡ãšã㊠Agent Gateway ã®ããªã·ãŒã§æ£ããæå®ããã°ãéä¿¡ã¯èš±å¯ãããŸãã { " httpRequest ": { " latency ": " 0.088799s ", " protocol ": " HTTP/1.1 ", " remoteIp ": " 7.0.2.2:1025 ", " requestMethod ": " GET ", " requestSize ": " 144 ", " requestUrl ": " http://api-server/api ", " responseSize ": " 137 ", " serverIp ": " 10.146.0.59:443 ", " status ": 200 , " userAgent ": " python-requests/2.34.2 " } , " insertId ": " 1a4531xe21i1e ", " jsonPayload ": { " @type ": " type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry ", " agentGatewayInfo ": { " agentRegistryResource ": " projects/1234567890/locations/asia-northeast1/endpoints/agentregistry-00000000-0000-0000-3d7e-aaad1d2c01cc " } , " authzPolicyInfo ": { " policies ": [ { " name ": " projects/229318387257/locations/asia-northeast1/authzPolicies/test-gw-egress-iap-authzpolicy ", " result ": " ALLOWED " } ] , " result ": " ALLOWED " } , " enforcedGatewaySecurityPolicy ": { " hostname ": " api-server ", " matchedRules ": [ { " action ": " ALLOWED ", " name ": " default_denied " } ] , " requestWasTlsIntercepted ": true , " serverNameIndication ": " api-server " } , " mtls ": { " clientCertChainVerified ": " false ", " clientCertError ": " client_cert_validation_not_performed ", " clientCertPresent ": " true ", " clientCertSha256Fingerprint ": " 7U0xSLEA7zzT60Fh+vjiT1kfsReCEnGQKcEYKM/jwtY ", " clientCertValidEndTime ": " 1970-01-01T00:00:00Z ", " clientCertValidStartTime ": " 1970-01-01T00:00:00Z " } , " tlsSniHostname ": " api-server " } , " logName ": " projects/my-project/logs/networkservices.googleapis.com%2Fgateway_requests ", " receiveTimestamp ": " 2026-10-07T00:39:00.168806796Z ", " resource ": { " labels ": { " gateway_name ": " test-gw-egress ", " gateway_type ": " SECURE_WEB_GATEWAY ", " location ": " asia-northeast1 ", " network_name ": " projects/g306208825b1c5693p-tp/global/networks/uk1-25feb-2-vpc4 ", " resource_container ": " 1234567890 " } , " type ": " networkservices.googleapis.com/Gateway " } , " severity ": " INFO ", " timestamp ": " 2026-10-07T00:38:56.195008Z " } åè : Monitor traffic through Agent Gateway VPC ãããŒãã°ã®ç¢ºèª åœèšäºã®ç®çïŒèªå·±çœ²åèšŒææžã® API ãšã³ããã€ã³ããšã®çéïŒãšã¯çŽæ¥çã«ã¯é¢ä¿ãããŸããããVPC ãããŒãã°ã確èªããAI ãšãŒãžã§ã³ãã API ãšã³ããã€ã³ãã«ã¢ã¯ã»ã¹ããéã®æ¥ç¶å
IP ã¢ãã¬ã¹ã確èªããŠã¿ãŸãã API ããã¹ããã VM åŽããèŠãŠããšãŒãžã§ã³ãã®æ¥ç¶å
IP ã¢ãã¬ã¹ïŒ jsonPayload.connection.src_ip ïŒã¯ 10.146.15.193 ã®ããã« RFC 1918 ç¯å²ïŒãããããã©ã€ããŒã IP ã¢ãã¬ã¹ïŒã«ãªã£ãŠããŸããããã¯ãNetwork Attachment ãªãœãŒã¹ã«å²ãåœãŠããã IP ã¢ãã¬ã¹ã§ãããªããNetwork Attachment äœææã«ãã® IP ã¢ãã¬ã¹ãæå®ããããšã¯ã§ãããæå®ãããµããããã®äžããèªåçã«å²ãåœãŠãããŸãã åè : ãããã¯ãŒã¯ ã¢ã¿ããã¡ã³ãã«ã€ã㊠åè : Set up Agent Gateway with VPC connectivity { " insertId ": " oqx8oafifan84 ", " jsonPayload ": { " reporter ": " DEST ", " end_time ": " 2026-10-08T01:26:11.570219768Z ", " packets_sent ": " 16 ", " dest_instance ": { " vm_name ": " api-server ", " zone ": " asia-northeast1-a ", " region ": " asia-northeast1 ", " project_id ": " my-project " } , " connection ": { " src_ip ": " 10.146.15.193 ", " protocol ": 6 , " src_port ": 46682 , " dest_port ": 443 , " dest_ip ": " 10.146.0.59 " } , " src_psc_interface ": { " producer ": { " zone ": " asia-northeast1-a ", " region ": " asia-northeast1 ", " project_id ": " g306208825b1c5693p-tp " } , " network_attachment ": { " project_id ": " my-project ", " name ": " agent-runtime-attachment ", " region ": " asia-northeast1 " } } , " bytes_sent ": " 0 ", " network_service ": { " dscp ": 32 } , " src_vpc ": { " subnetwork_name ": " default ", " project_id ": " my-project ", " vpc_name ": " default ", " subnetwork_region ": " asia-northeast1 " } , " dest_vpc ": { " project_id ": " my-project ", " subnetwork_region ": " asia-northeast1 ", " subnetwork_name ": " default ", " vpc_name ": " default " } , " src_google_service ": { " type ": " VPC_HOSTED_SERVICE ", " service_name ": " networkservices.googleapis.com ", " connectivity ": " PRIVATE_SERVICE_CONNECT_INTERFACE " } , " start_time ": " 2026-10-08T01:26:11.561092161Z " } , " resource ": { " type ": " gce_subnetwork ", " labels ": { " location ": " asia-northeast1 ", " subnetwork_id ": " 7843426217831826765 ", " project_id ": " my-project ", " subnetwork_name ": " default " } } , " timestamp ": " 2026-10-08T01:26:18.442041438Z ", " logName ": " projects/my-project/logs/compute.googleapis.com%2Fvpc_flows ", " receiveTimestamp ": " 2026-10-08T01:26:18.442041438Z " } ãªãœãŒã¹å逿ã®äŸåé¢ä¿ åœã¢ãŒããã¯ãã£ã®ã€ã³ãã©ãç Žæ£ïŒ terraform destroy ãªã©ïŒããéã ãªãœãŒã¹ã®åé€é åº ã«æ³šæãå¿
èŠã§ãã Agent Runtime ã Agent Gateway ãåç
§ããŠããç¶æ
ã§ Agent Gateway ãåé€ããããšãããšã以äžã®ãšã©ãŒãçºçããŠåé€ã倱æããŸãã Error: Resource is already being used ããã¯ãAgent Platform åŽã®ãããŒãžãã©ã³ã¿ã€ã ã Gateway ãªãœãŒã¹ãžã®åç
§ãã€ã³ã¿ãä¿æããŠããããã§ãããã®ãããç°å¢ãã¯ãªãŒã³ã¢ããããéã¯ã å
ã« Agent Runtime ã®ãšãŒãžã§ã³ããåé€ ããŠãã Terraform ã®ãªãœãŒã¹ç Žæ£ãå®è¡ããŠãã ããã èšŒææžã®æŽæ°ã»è¿œå èšŒææžãçŽæ¥ç»é²ããå Žå åœèšäºã®å®è£
äŸã®ããã«ãAPI ãµãŒããŒã®èªå·±çœ²åèšŒææžãçŽæ¥ TrustConfig ã® trust_anchors ã«ç»é²ããŠããå ŽåãèšŒææžã®æŽæ°ïŒç§å¯éµãèšŒææžã®åäœæïŒã«äŒŽããä¿¡é Œã¢ã³ã«ãŒã®å
å®¹ãæŽæ°ããå¿
èŠããããŸãã Certificate Manager ã® TrustConfig ã§ã¯ã trust_anchors ã«è€æ°ã®èšŒææžãåæã«ç»é²ã§ããŸããèšŒææžã®æéåãã«ããéä¿¡æãé²ãããã以äžã®ããŒããŒã·ã§ã³æé ãæšå¥šããŸãã æ°ããç§å¯éµãšèªå·±çœ²åèšŒææžïŒæ°èšŒææžïŒãçºè¡ããã Terraform ã® TrustConfig å®çŸ©ã«æ°èšŒææžã远å ããæ§èšŒææžãšæ°èšŒææžã®äž¡æ¹ãç»é²ãããç¶æ
ãé©çšããã API ãµãŒããŒïŒNginxïŒã®èšŒææžãæ°èšŒææžã«å·®ãæ¿ããŠãªããŒãããã ãã¹ãŠã®ãã©ãã£ãã¯ãæ°èšŒææžã§æ£åžžã«çéããããšã確èªããåŸãTrustConfig ããæ§èšŒææžãåé€ããã ãã©ã€ããŒãã«ãŒã CA ãç»é²ããå Žå åè¿°ã®æ¹æ³ã§ã¯ãèšŒææžãæ°ããçºè¡ãã床ã«ä¿¡é Œã¢ã³ã«ãŒã®æŽæ°ãå¿
èŠãšãªããŸããèšŒææžã®æŽæ°é »åºŠãé«ãç°å¢ããè€æ°ã®ãã©ã€ããŒã API ãµãŒããŒãéçšããç°å¢ã§ã¯ãèªåã® ãã©ã€ããŒãã«ãŒã CA ïŒèªèšŒå±ïŒãäœæã㊠TrustConfig ã«ç»é²ããŠããããšã§ãéçšè² è·ãäžããããšãã§ããŸãã æå¹æéã®é·ãïŒæ°å¹Žåäœãªã©ïŒãã©ã€ããŒãã«ãŒã CA èšŒææžã TrustConfig ã® trust_anchors ã«ç»é²ããå API ãµãŒããŒã«ã¯ãã®ã«ãŒã CA ã眲åãããµãŒããŒèšŒææžãé
眮ããŸãã ãã®æ§æãæ¡çšããæå€§ã®ã¡ãªããã¯ããµãŒããŒèšŒææžã®æŽæ°æã« Google Cloud åŽã® TrustConfig ã Agent Gateway ã倿Žããå¿
èŠããªãç¹ã§ããAPI ãµãŒããŒåŽã§æ°ããèšŒææžãçºè¡ã»å·®ãæ¿ããŠãªããŒãããã ãã§æŽæ°ãå®äºããŸãããŸããå°æ¥çã«å¥ã®å
éš API ãµãŒããŒã远å ãããå Žåã§ããåãã«ãŒã CA ã§çœ²åããã° TrustConfig åŽã®èšå®å€æŽãªãã§æ¥ç¶ã§ããŸãã ãã®æ§æã«ããããµãŒããŒèšŒææžã®æŽæ°æé ã¯ä»¥äžã®éãã§ãã ã«ãŒã CA ã®ç§å¯éµã䜿çšããæ°ããæå¹æéãæã€ãµãŒããŒèšŒææžãçºè¡ãã API ãµãŒããŒïŒNginxïŒã«é
眮ãããŠãããµãŒããŒèšŒææžãå·®ãæ¿ããŠãªããŒããã ã«ãŒã CA èªäœã®æå¹æéãåããªãéããGoogle Cloud åŽã® TrustConfig ã倿Žã»åãããã€ããå¿
èŠã¯ãããŸããã ææ å銬 (èšäºäžèЧ) å·è¡åœ¹å¡ CTO å
èŠå¯å®ãšããçµæŽãæã€ IT ãšã³ãžãã¢ãã¯ã©ãŠã管çã»éçšããããã¯ãŒã¯ã«ç¥èŠãAWS èªå®è³æ Œããã³ Google Cloud èªå®è³æ Œã¯ãã¹ãŠååŸãXïŒæ§ TwitterïŒã§ã¯ Google Cloud ã Google Workspace ã®ã¢ããããŒãæ
å ±ãã€ã¶ãããŠããŸãã Follow @y_sugi_it