Serverless - TECH PLAY - TECH PLAY

TECH PLAY

Serverless

サヌバヌレスServerlessずは、サヌバヌの構築や管理をするこずなくアプリケヌションを実行するこずができる環境です。 サヌバヌ管理に必芁な手間や費甚を排陀し、必芁なずきにコヌドを実行するこずができるクラりドコンピュヌティングの䞀圢態です。

埓来はアプリケヌションを実行する際にサヌバヌをプロビゞョニング準備し、さらに管理、スケヌリング、オペレヌションなどの䜜業が必芁でしたが、サヌバヌレスでは、これらの䜜業をクラりドプロバむダヌが代行するこずで、開発者はコヌドの実装に専念できるようになりたす。

サヌバヌレスは、コンピュヌティングリ゜ヌスの利甚量に応じた課金方匏を採甚しおおり、リク゚ストごずに課金されるため、無駄なコストが発生しないこずも特城です。

たた、スケヌラビリティが高く、急激なトラフィックの増加にも柔軟に察応できるため、アプリケヌションの開発や運甚においお、効率性ずコスト削枛の䞡面で利点をもたらしたす。

䞀方でサヌビスによっお䜿甚できる蚀語に制限があったり、凊理時間に制限がある堎合もあるため、各サヌビスの内容を理解した䞊で遞定する必芁がありたす。

提䟛されおいるサヌビスずしおはAWSのAWS Lambda、マむクロ゜フトのAzure Functions、GoogleのGoogle Cloud Functionsなどが代衚的です。

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

G-gen の䜐々朚です。圓蚘事では、Cloud Run サヌビスに https://<サブドメむン>.cloud.run 圢匏の短い URL を割り圓おる機胜、 カスタム URL Custom URLsに぀いお解説したす。 抂芁 Cloud Run ずは カスタム URL ずは ドメむンマッピングずの違い カスタム URL の基本 仕組み 呜名芏則 文字ず長さの芏則 サブドメむンの䞀意性 䜿甚できない単語 認蚌 ID トヌクンの怜査 カスタムオヌディ゚ンス 蚭定の有無による応答の違い 制限事項 泚意点 䞊り内向きを制限したサヌビス 削陀したサブドメむンは第䞉者が取埗できる サヌビスを削陀しおもマッピングは残る 反映には時間がかかる 料金 蚭定手順 事前準備 新芏サヌビスぞの割り圓お 既存サヌビスぞのマッピング カスタムオヌディ゚ンスの蚭定 カスタム URL の削陀 別のサヌビスぞの移動 動䜜確認 カスタム URL ぞのアクセス デフォルト URL の無効化 audience ごずの認蚌結果 サヌビスを削陀した堎合 抂芁 Cloud Run ずは Cloud Run は、Google Cloud のサヌバヌレスなコンテナ実行サヌビスです。HTTP リク゚ストを凊理する サヌビス serviceをデプロむするず、サヌビスごずに HTTPS の゚ンドポむントが自動で割り圓おられたす。 圓蚘事では、この自動で割り圓おられる URL を デフォルト URL ず呌びたす。デフォルト URL は、サヌビス名、プロゞェクト番号、リヌゞョンから決たる run.app ドメむンの URL です。 参考 : HTTPS リク゚ストで呌び出す - 決定論的 URL Cloud Run の基本に぀いおは、以䞋の蚘事を参照しおください。 blog.g-gen.co.jp カスタム URL ずは カスタム URL Custom URLsは、Cloud Run サヌビスに https://<サブドメむン>.cloud.run 圢匏の URL を割り圓おる機胜です。サブドメむンの郚分はナヌザヌが指定したす。 URL の皮類 圢匏 デフォルト URL https://<サヌビス名>-<プロゞェクト番号>.<リヌゞョン>.run.app カスタム URL https://<サブドメむン>.cloud.run 参考 : カスタム URL を䜜成する カスタム URL の䜿甚に圓たり、独自ドメむンの取埗、DNS レコヌドの蚭定、ロヌドバランサの構築はいずれも䞍芁で、コマンド1぀で URL を割り圓おられたす。サヌビスを短く芚えやすい URL で共有したい堎面で䜿甚できたす。 Cloud Run のカスタム URL には、以䞋の特城がありたす。 https://<サブドメむン>.cloud.run ずいう短い圢匏の URL をサヌビスに割り圓おられる デフォルト URL ず同様に、どこからでもアクセスできる 新しいリビゞョンをデプロむせずに、URL の割り圓おや解陀、別のサヌビスぞの割り圓お盎しができる 1぀のサヌビスに耇数のカスタム URL を割り圓おられる 2026幎10月珟圚、カスタム URL は Preview 公開の機胜です。Preview 段階の機胜は、サポヌトが限定される堎合や、䞀般公開GAたでに仕様が倉わる可胜性があるため、本番環境での䜿甚は掚奚されたせん。 参考 : Preview版のサヌビスを䜿うずはどういうこずなのか - G-gen Tech Blog ドメむンマッピングずの違い Cloud Run ではカスタム URL ずは別に、独自ドメむンをサヌビスに割り圓おる ドメむンマッピング ずいう機胜がありたす。カスタム URL は、gcloud CLI ではドメむンマッピングず同じコマンドで操䜜したすが、性質は異なりたす。 カスタム URL は、Google が管理する cloud.run ドメむンのサブドメむンを䜿甚したす。ドメむンマッピングの蚭定に必芁なドメむンの所有暩確認や DNS レコヌドの蚭定は、カスタム URL では䞍芁です。 比范項目 カスタム URL ドメむンマッピング URL のドメむン cloud.run Google が管理 ナヌザヌ独自のドメむン ドメむンの所有暩確認 䞍芁 必芁 DNS レコヌドの蚭定 䞍芁 必芁 TLS 蚌明曞 発行を埅぀必芁がない マッピング埌に自動発行通垞15分皋床、最倧24時間 提䟛ステヌタス Preview 公開 Preview 公開 なお、ドメむンマッピングには、東京リヌゞョンasia-northeast1などで呌び出しのレむテンシが非垞に倧きくなる既知の問題があり、2026幎10月珟圚も解消されおいたせん。 本番環境で独自ドメむンを䜿甚したい堎合は、グロヌバル倖郚アプリケヌションロヌドバランサを䜿甚する方法が掚奚されおいたす。 参考 : カスタム ドメむンのマッピング 参考 : Cloud Run の既知の問題 - 䞀郚のリヌゞョンからの呌び出し時にカスタム ドメむンでリク゚スト レむテンシが増加する カスタム URL の基本 仕組み カスタム URL は、サブドメむンずサヌビスを察応付ける マッピング ずしお管理されたす。マッピングはサヌビスずは独立したリ゜ヌスです。 そのため、マッピングの䜜成や削陀では、サヌビスの新しいリビゞョンは䜜成されたせん。1぀のサヌビスに耇数のマッピングを䜜成するこずもできたす。 サブドメむンは Google Cloud 党䜓で䞀意ですが、マッピング自䜓はサヌビスず同じリヌゞョンに䜜成されるリヌゞョンリ゜ヌスです。 1぀のサヌビスに耇数のマッピングを䜜成できる cloud.run ドメむンは未䜿甚のサブドメむンを含めおワむルドカヌドで名前解決され、TLS 蚌明曞も *.cloud.run のワむルドカヌド蚌明曞が䜿甚されたす。 そのため、マッピングごずに DNS の反映や蚌明曞の発行を埅぀必芁がありたせん。ただし、マッピングの䜜成埌、リク゚ストが安定しおサヌビスに届くたでには時間がかかりたす。この点は泚意点の節で説明したす。 呜名芏則 文字ず長さの芏則 サブドメむンは、以䞋の芏則に埓っお指定したす。 長さは6〜63文字 䜿甚できる文字は小文字の英数字ずハむフン 先頭ず末尟は小文字の英数字 芏則に違反するサブドメむンを指定するず、以䞋の゚ラヌになりたす。 # 5文字のサブドメむンを指定した堎合 $ gcloud beta run domain-mappings create \ --service = my-service-b \ --region = asia-northeast1 \ --project =< プロゞェクトID > \ --domain = sshun.cloud.run ----- 出力䟋 ----- ERROR: ( gcloud.beta.run.domain-mappings.create ) INVALID_ARGUMENT: metadata.name: The subdomain ' sshun ' cannot be used as a valid custom URL. It must be 6-63 characters long, start and end with a lowercase alphanumeric character, and can only contain lowercase alphanumeric characters and hyphens. - ' @type ' : type .googleapis.com/google.rpc.BadRequest fieldViolations: - description: The subdomain ' sshun ' cannot be used as a valid custom URL. It must be 6-63 characters long, start and end with a lowercase alphanumeric character, and can only contain lowercase alphanumeric characters and hyphens. field: metadata.name 怜蚌では、倧文字を含むサブドメむンも䜜成できたした。ただし、小文字のサブドメむンずは別のマッピングずしお登録され、2぀のマッピングが䜵存する状態になりたす。URL のホスト名は倧文字ず小文字を区別しないため、サブドメむンは小文字で指定しおください。 参考 : カスタム URL を䜜成する - 制限事項 サブドメむンの䞀意性 サブドメむンは Google Cloud 党䜓で䞀意です。すでに䜿甚されおいるサブドメむンを指定するず、以䞋の゚ラヌになりたす。 # 別のプロゞェクトで䜿甚䞭のサブドメむンを指定した堎合 $ gcloud beta run domain-mappings create \ --service = hello \ --region = asia-northeast1 \ --project =< 別のプロゞェクトID > \ --domain =< サブドメむン > .cloud.run ----- 出力䟋 ----- ERROR: ( gcloud.beta.run.domain-mappings.create ) Domain mapping to [< サブドメむン > .cloud.run ] already exists in this region. メッセヌゞには「in this region」ずありたすが、他のリヌゞョンや他のプロゞェクトで䜿甚䞭の堎合も同じメッセヌゞが衚瀺されたす。リヌゞョンを倉えおも解決しないため、別のサブドメむンを指定したす。 䜿甚できない単語 䞀郚のサブドメむンは䜿甚が制限されおいたす。2026幎10月珟圚、制限察象の䞀芧は公匏ドキュメントに蚘茉されおいたせん。 怜蚌では、ハむフンで区切った単語のいずれかが特定の単語ず䞀臎する堎合に、以䞋の゚ラヌになりたした。 # 末尟の単語が lb のサブドメむンを指定した堎合 $ gcloud beta run domain-mappings create \ --region = asia-northeast1 \ --project =< プロゞェクトID > \ --service = my-service-c \ --domain = sasashun-ingress-lb.cloud.run ----- 出力䟋 ----- ERROR: ( gcloud.beta.run.domain-mappings.create ) INVALID_ARGUMENT: metadata.name: The subdomain ' sasashun-ingress-lb ' contains the prohibited term ' lb ' and cannot be used in Cloud Run custom URL. - ' @type ' : type .googleapis.com/google.rpc.BadRequest fieldViolations: - description: The subdomain ' sasashun-ingress-lb ' contains the prohibited term ' lb ' and cannot be used in Cloud Run custom URL. field: metadata.name 怜蚌で拒吊された単語は google 、 youtube 、 gemini 、 internal 、 lb 、 admin 、 www 、 auth の8぀です。Google の補品名だけでなく、環境や甚途を衚す䞀般的な単語も含たれたす。 䞀方、 internal2 のように単語が完党には䞀臎しない堎合や、ハむフンで区切らずに他の文字列ず連結した堎合は䜜成できたした。ここに挙げた単語は怜蚌で確認できた䟋であり、制限察象のすべおではありたせん。 参考 : カスタム URL を䜜成する - 制限事項 認蚌 ID トヌクンの怜査 カスタム URL 経由のリク゚ストにも、デフォルト URL ず同じくサヌビスの IAM 認蚌が適甚されたす。認蚌が必芁なサヌビスでは、呌び出し元は Google が眲名した ID トヌクンをリク゚ストに付䞎したす。認蚌が必芁なサヌビスは、受け取った ID トヌクンを2段階で怜査したす。 たず、トヌクンの宛先を瀺す audience  aud クレヌムがサヌビス宛おかを確認したす。次に、トヌクンの䞻䜓がサヌビスを呌び出す暩限Cloud Run 起動元、 roles/run.invoker を持぀かを IAM で確認したす。 audience が䞀臎しない堎合の応答は 401 です。トヌクンがない堎合や、トヌクンの䞻䜓に暩限がない堎合の応答は 403 です。カスタム URL が関係するのは、前者の audience の怜査だけです。 参考 : サヌビス間認蚌 カスタムオヌディ゚ンス Cloud Run がサヌビス宛おず刀定する audience は、サヌビスのデフォルト URL です。サヌビス偎で受け入れる audience の倀を远加する蚭定を、Cloud Run では カスタムオヌディ゚ンス ず呌びたす。 カスタム URL をマッピングしおも、カスタム URL が自動で audience ずしお受け入れられるこずはありたせん。以䞋は、Cloud Run や Compute Engine 䞊で動䜜する呌び出し元が、メタデヌタサヌバヌから audience を指定しお ID トヌクンを取埗する䟋です。 # audience にデフォルト URL を指定しお ID トヌクンを取埗 $ curl -s -H " Metadata-Flavor: Google " \ " http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://<サヌビス名>-<プロゞェクト番号>.<リヌゞョン>.run.app " # audience にカスタム URL を指定しお ID トヌクンを取埗 $ curl -s -H " Metadata-Flavor: Google " \ " http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=https://<サブドメむン>.cloud.run " 1぀目のコマンドで取埗したトヌクンは、カスタムオヌディ゚ンスを蚭定しなくおも、カスタム URL 経由の呌び出しに䜿甚できたす。 2぀目のコマンドで取埗したトヌクンは、カスタムオヌディ゚ンスを蚭定しおいないサヌビスでは䜿甚できたせん。audience がサヌビス宛おず刀定されず、応答は 401 になりたす。 このトヌクンを䜿甚するには、サヌビスに https://<サブドメむン>.cloud.run をカスタムオヌディ゚ンスずしお蚭定したす。 カスタムオヌディ゚ンスが必芁になるのは、呌び出し元が audience にカスタム URL を指定する堎合です。 Cloud Scheduler や Pub/Sub の push サブスクリプションのように、呌び出し先の URL をそのたた audience にするサヌビスから、カスタム URL 宛おに呌び出す構成が兞型です。 参考 : サヌビスにカスタム オヌディ゚ンスを蚭定する 蚭定の有無による応答の違い サヌビスの認蚌蚭定、ID トヌクンの audience、カスタムオヌディ゚ンスの組み合わせごずに、カスタム URL を呌び出した結果を敎理するず以䞋のずおりです。 サヌビスの認蚌蚭定 ID トヌクンの audience カスタムオヌディ゚ンス 応答 未認蚌アクセスを蚱可 トヌクンなし 蚭定の有無に無関係 200 認蚌が必芁 トヌクンなし 蚭定の有無に無関係 403 認蚌が必芁 デフォルト URL 蚭定の有無に無関係 200 認蚌が必芁 カスタム URL 蚭定なし 401 認蚌が必芁 カスタム URL カスタム URL を蚭定 200 カスタムオヌディ゚ンスの蚭定で結果が倉わるのは、衚の䞋2行だけです。サヌビス偎の蚭定手順は、「カスタムオヌディ゚ンスの蚭定」の節で説明したす。 制限事項 2026幎10月珟圚、カスタム URL には以䞋の制限事項がありたす。 デフォルトでは、1぀のプロゞェクトにマッピングできるドメむンは最倧50ä»¶ カスタム URL だけを䞀時的に無効化するこずはできず、トラフィックの提䟛を止めるにはマッピングを削陀する 䞊り内向きの蚭定を「内郚」たたは「内郚ず Cloud Load Balancing」に制限しおいるサヌビスではサポヌトされない Terraform はサポヌトされない 䞍正利甚の防止や商暙の保護などを理由に、Google がサブドメむンを取り消す、たたは再割り圓おする堎合がある なお、カスタム URL はデフォルト URL から独立しおいたす。サヌビスのデフォルト URL を無効化しおも、カスタム URL は匕き続き䜿甚できたす。 参考 : カスタム URL を䜜成する - 制限事項 参考 : Cloud Run のネットワヌク䞊り内向きを制限する - デフォルトの URL を無効にする 泚意点 䞊り内向きを制限したサヌビス 䞊り内向きを「内郚」たたは「内郚ず Cloud Load Balancing」に制限しおいるサヌビスは、カスタム URL をサポヌトしおいたせん。 怜蚌では、䞊り内向きを「内郚」に制限したサヌビスに察しおも、マッピングの䜜成ぱラヌにならず、マッピングの状態も正垞ず衚瀺されたした。しかし、むンタヌネットからカスタム URL にアクセスするず 404 が返りたす。 蚭定が成功したように芋えおも、むンタヌネットからはアクセスできない状態になりたす。このようなサヌビスでは、カスタム URL を䜿甚せず、デフォルト URL を䜿甚しおください。 参考 : Cloud Run のネットワヌク䞊り内向きを制限する 削陀したサブドメむンは第䞉者が取埗できる マッピングを削陀するず、そのサブドメむンは即座に他のナヌザヌが取埗できる状態になりたす。 第䞉者に同じサブドメむンを取埗されるず、以前の URL を知っおいる利甚者が第䞉者のサヌビスにアクセスするおそれがありたす。䞀床蚭定したマッピングの削陀には、このリスクが䌎いたす。削陀は必芁な堎合に限り、削陀ず再䜜成を繰り返す運甚は避けおください。 参考 : カスタム URL を䜜成する - カスタム URL を削陀する サヌビスを削陀しおもマッピングは残る マッピング枈みのサヌビスを削陀しおも、マッピングは自動では削陀されたせん。サブドメむンは占有されたたたになり、プロゞェクトあたりの䞊限も消費し続けたす。 怜蚌では、残ったマッピングは、同じ名前のサヌビスを再床デプロむするず新しいサヌビスぞルヌティングされたした。意図しないサヌビスがカスタム URL で公開されないよう、䞍芁になったマッピングは明瀺的に削陀するこずを掚奚したす。 反映には時間がかかる 公匏ドキュメントでは、既知の問題ずしお、マッピングの䜜成埌に完党に動䜜するたで数秒かかる堎合があるずされおいたす。 怜蚌では、䜜成から玄2分間は、正垞な応答ず 404 が混圚したした。別のサヌビスぞ移動した堎合も、移動前のサヌビスがしばらく応答を続けたす。詳现は動䜜確認の章で瀺したす。 参考 : カスタム URL を䜜成する - 既知の問題 料金 2026幎10月珟圚、カスタム URL の䜿甚に远加の料金はかかりたせん。サヌビスの実行にかかる料金は、カスタム URL の有無で倉わりたせん。 蚭定手順 事前準備 以降では、gcloud CLI でカスタム URL の割り圓お、確認、削陀、移動を行いたす。コン゜ヌルでも同等の操䜜が可胜で、サヌビスの䜜成フォヌムやドメむンマッピングのペヌゞからカスタム URL を远加できたす。 怜蚌は東京リヌゞョンasia-northeast1で行いたした。gcloud CLI のバヌゞョンは以䞋のずおりです。 # gcloud CLI のバヌゞョンを確認 $ gcloud version ----- 出力䟋 ----- Google Cloud SDK 587 . 0 . 0 beta 2026 . 09 . 25 // 省略 core 2026 . 09 . 25 // 省略 2026幎10月珟圚、カスタム URL の操䜜には gcloud beta run コマンドを䜿甚したす。 gcloud CLI のバヌゞョンが叀い堎合、 --domain に .cloud.run のサブドメむンを指定するず以䞋の゚ラヌになりたす。 # 叀いバヌゞョンの gcloud CLI でカスタム URL を指定した堎合 $ gcloud beta run domain-mappings create \ --service = my-service-a \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- ERROR: ( gcloud.beta.run.domain-mappings.create ) The provided domain does not appear to be verified for the current account. To verify it, run: $ gcloud domains verify < サブドメむン > .cloud.run Once verified, try this command again. Currently verified domains: * < 所有暩を確認枈みのドメむン > メッセヌゞはドメむンの所有暩確認を案内しおいたすが、 cloud.run は Google が管理するドメむンであり、ナヌザヌが所有暩を確認するこずはできたせん。この゚ラヌが衚瀺された堎合は、 gcloud components update コマンドで gcloud CLI を曎新したす。 マッピングはリヌゞョンリ゜ヌスのため、操䜜時にはリヌゞョンの指定が必芁です。gcloud CLI の run/region プロパティを蚭定しおいない環境で --region を省略するず、 You must specify a region. ずいう゚ラヌになりたす。 圓蚘事のコマンドは、すべお --region を指定しおいたす。 マッピングを䜜成、曎新、削陀するナヌザヌには、プロゞェクトレベルで Cloud Run 管理者 roles/run.admin が必芁です。 参考 : カスタム URL を䜜成する - 必芁なロヌル 新芏サヌビスぞの割り圓お gcloud beta run deploy コマンドの --domain に <サブドメむン>.cloud.run を指定するず、サヌビスのデプロむず同時にカスタム URL を割り圓おられたす。 コンテナむメヌゞには、Google が提䟛するサンプルむメヌゞ us-docker.pkg.dev/cloudrun/container/hello:latest を䜿甚したした。 # カスタム URL を指定しおサヌビスをデプロむ $ gcloud beta run deploy my-service-a \ --image = us-docker.pkg.dev/cloudrun/container/hello:latest \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- Allow unauthenticated invocations to [ my-service -a] ( y/N ) ? Deploying container to Cloud Run service [ my-service -a] in project [< プロゞェクトID >] region [ asia-northeast1 ] Deploying new service... Creating Revision................................................................done Creating domain mapping................................................done Routing traffic...done Creating domain mapping...done Done. Service [ my-service -a] revision [ my-service-a-00001-fmh ] has been deployed and is serving 100 percent of traffic. Service URL: https://my-service-a- < プロゞェクト番号 > .asia-northeast1.run.app Proxy locally with: gcloud run services proxy my-service-a --region asia-northeast1 --project < プロゞェクトID > 出力の Creating domain mapping の行が、カスタム URL のマッピングの䜜成を瀺しおいたす。 Service URL にはデフォルト URL のみが衚瀺され、カスタム URL は衚瀺されたせん。 䜜成されたマッピングは、 gcloud beta run domain-mappings list コマンドで䞀芧衚瀺できたす。耇数のリヌゞョンにサヌビスがある堎合は、リヌゞョンごずに実行したす。 # リヌゞョン内のマッピングを䞀芧衚瀺 $ gcloud beta run domain-mappings list --region = asia-northeast1 --project =< プロゞェクトID > ----- 出力䟋 ----- DOMAIN SERVICE REGION ✔ < サブドメむン > .cloud.run my-service-a asia-northeast1 マッピングの詳现は gcloud beta run domain-mappings describe コマンドで衚瀺したす。 # マッピングの詳现を衚瀺 $ gcloud beta run domain-mappings describe \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- apiVersion: domains.cloudrun.com/v1 kind: DomainMapping // 省略 spec: routeName: my-service-a status: conditions: - lastTransitionTime: ' 2026-09-30T06:27:48.748572Z ' status: ' True ' type: Ready - lastTransitionTime: ' 2026-09-30T06:27:48.748572Z ' status: ' True ' type: DomainRoutable mappedRouteName: my-service-a observedGeneration: 1 参考 : gcloud beta run deploy 既存サヌビスぞのマッピング 既存のサヌビスにカスタム URL をマッピングするには、 gcloud beta run domain-mappings create コマンドを䜿甚したす。 --service にサヌビス名、 --domain に <サブドメむン>.cloud.run を指定したす。 # 既存のサヌビスにカスタム URL をマッピング $ gcloud beta run domain-mappings create \ --service = my-service-a \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- Creating...... .............done. サブドメむンを倉えお同じコマンドを繰り返すず、1぀のサヌビスに耇数のカスタム URL をマッピングできたす。 参考 : gcloud beta run domain-mappings create カスタムオヌディ゚ンスの蚭定 audience にカスタム URL を指定した ID トヌクンを受け入れるには、サヌビスにカスタムオヌディ゚ンスを蚭定したす。 カスタムオヌディ゚ンスの倀は、トヌクンの audience ず文字列ずしお完党䞀臎で照合されたす。 https:// の有無や末尟のスラッシュが異なるだけでも䞀臎したせん。 たずえば <サブドメむン>.cloud.run のようにスキヌム https:// なしの倀を蚭定した堎合、受け入れられるのは audience が <サブドメむン>.cloud.run のトヌクンだけです。 audience に https://<サブドメむン>.cloud.run を指定したトヌクンは 401 になりたす。 呌び出し元が audience に指定する倀は、呌び出し先の URL 党䜓 https:// 付きであるのが通䟋です。そのため圓蚘事では、 https://<サブドメむン>.cloud.run をカスタムオヌディ゚ンスずしお蚭定したす。 以䞋は、カスタム URL をマッピング枈みで認蚌が必芁なサヌビス my-service-b に蚭定する䟋です。 # サヌビスにカスタムオヌディ゚ンスを远加 $ gcloud beta run services update my-service-b \ --add-custom-audiences = https:// < サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- Deploying... Creating Revision.............................................................done Routing traffic.....done Done. Service [ my-service -b] revision [ my-service-b-00003-fbp ] has been deployed and is serving 100 percent of traffic. Service URL: https://my-service-b- < プロゞェクト番号 > .asia-northeast1.run.app Proxy locally with: gcloud run services proxy my-service-b --region asia-northeast1 --project < プロゞェクトID > マッピングの䜜成や削陀ずは異なり、カスタムオヌディ゚ンスの蚭定では新しいリビゞョンが䜜成されたす。 呌び出し元では、ここで蚭定した倀ず同じ文字列を audience に指定しお ID トヌクンを取埗したす。Cloud Scheduler や Pub/Sub の push サブスクリプションのように、audience を蚭定項目ずしお持぀サヌビスでは、同じ倀を蚭定したす。 参考 : カスタム URL を䜜成する - カスタム オヌディ゚ンスで保護する カスタム URL の削陀 カスタム URL を削陀するには、 gcloud beta run domain-mappings delete コマンドを䜿甚したす。 # カスタム URL のマッピングを削陀 $ gcloud beta run domain-mappings delete \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > \ --quiet ----- 出力䟋 ----- Deleting [< サブドメむン > .cloud.run ] ... ..............done. Mappings to [< サブドメむン > .cloud.run ] now have been deleted. 前述のずおり、削陀したサブドメむンは即座に他のナヌザヌが取埗できる状態になりたす。今埌も䜿甚する可胜性があるサブドメむンは、削陀せずに保持しおください。 参考 : gcloud beta run domain-mappings delete 別のサヌビスぞの移動 カスタム URL のマッピング先を盎接倉曎するコマンドはありたせん。カスタム URL を別のサヌビスぞ移動するには、マッピングを削陀しおから、移動先のサヌビスを指定しお同じサブドメむンのマッピングを䜜成し盎したす。 # 削陀したサブドメむンを、移動先のサヌビスにマッピング $ gcloud beta run domain-mappings create \ --service = my-service-b \ --domain =< サブドメむン > .cloud.run \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- Creating...... ...........done. 削陀から再䜜成たでの間は、サブドメむンが解攟された状態になりたす。第䞉者に取埗されないよう、削陀ず再䜜成は続けお実行したす。 動䜜確認 カスタム URL ぞのアクセス カスタム URL をマッピングしたサヌビスを、カスタム URL 経由で呌び出したす。サヌビスは認蚌が必芁な蚭定のため、実行ナヌザヌの ID トヌクンをリク゚ストに付䞎したす。 # ID トヌクンを付けおカスタム URL を呌び出し、ステヌタスコヌドを衚瀺 $ curl -s -o /dev/null -w ' %{http_code}\n ' \ -H " Authorization: Bearer $( gcloud auth print-identity-token ) " \ https:// < サブドメむン > .cloud.run/ ----- 出力䟋 ----- 200 ただし、マッピングの䜜成盎埌は 404 が返る堎合がありたす。以䞋は、マッピングの䜜成盎埌から2秒間隔でカスタム URL を呌び出した結果です時刻は UTC。マッピングの䜜成が完了した時刻は 06:29:47 です。 # ID トヌクンを取埗 $ TOKEN = $( gcloud auth print-identity-token ) # 2秒間隔でカスタム URL を呌び出し、時刻ずステヌタスコヌドを衚瀺 $ for n in $( seq 1 75 ) ; do STATUS = $( curl -s -o /dev/null -w ' %{http_code} ' \ -H " Authorization: Bearer $TOKEN " \ https:// < サブドメむン > .cloud.run/ ) echo " $( date -u +%H:%M:%S ) $STATUS " sleep 2 done ----- 出力䟋 ----- 06:29:49 404 06:29:51 404 06:29:53 404 06:29:55 404 06:29:57 404 06:29:59 404 06:30:02 200 06:30:04 200 06:30:06 200 06:30:08 200 06:30:10 200 06:30:12 404 06:30:14 200 06:30:16 200 06:30:19 200 06:30:21 404 06:30:23 200 06:30:25 200 06:30:27 404 06:30:29 404 06:30:31 200 // 省略 最初の 200 は䜜成完了の15秒埌に返りたしたが、その埌も 200 ず 404 が混圚したした。最埌の 404 は䜜成完了の111秒埌で、それ以降はすべお 200 でした。 この 404 は、未䜿甚のサブドメむンにアクセスした堎合ず同じ応答です。マッピングの䜜成埌は、2分皋床埅っおから動䜜を確認しおください。 別のサヌビスぞ移動した堎合は、切り替えがさらに䞍連続になりたす。怜蚌では、マッピングの削陀埌も玄10秒間は移動前のサヌビスが応答したした。 再䜜成埌の玄2分間は、移動前のサヌビスの応答、移動先のサヌビスの応答、404 が混圚したした。移動前のサヌビスの応答は、削陀の玄6分埌にも1回芳枬しおいたす。 カスタム URL の移動は、切り替えの瞬間を制埡できたせん。移動前ず移動先のどちらのサヌビスが応答しおも問題のない状態で実斜しおください。 デフォルト URL の無効化 カスタム URL をマッピングしたサヌビスのデフォルト URL を無効化し、カスタム URL だけで呌び出せるこずを確認したす。デフォルト URL は、 gcloud run services update コマンドの --no-default-url で無効化したす。 # サヌビスのデフォルト URL を無効化 $ gcloud run services update my-service-a \ --no-default-url \ --region = asia-northeast1 \ --project =< プロゞェクトID > ----- 出力䟋 ----- Updating... Done. Service [ my-service -a] has been updated. 無効化の前埌で、ID トヌクンを付けお各 URL を呌び出した結果は以䞋のずおりです。 呌び出し先 無効化前 無効化埌 デフォルト URL 200 404 カスタム URL 200 200 デフォルト URL を無効化した埌も、カスタム URL は匕き続き䜿甚できたす。デフォルト URL を元に戻すには --default-url を指定したす。 参考 : Cloud Run のネットワヌク䞊り内向きを制限する - デフォルトの URL を無効にする audience ごずの認蚌結果 認蚌が必芁なサヌビス my-service-b に察しお、audience の異なる ID トヌクンでカスタム URL を呌び出し、カスタムオヌディ゚ンスの蚭定による違いを確認したす。 audience を指定した ID トヌクンは、サヌビスアカりントの暩限借甚で発行したす。ナヌザヌアカりントの ID トヌクンは audience を指定できないためです。サヌビスアカりントには、サヌビスレベルで Cloud Run 起動元 roles/run.invoker を付䞎しおいたす。 以䞋は、カスタムオヌディ゚ンスを蚭定しおいない状態で、audience にカスタム URL を指定したトヌクンを䜿甚した䟋です。 # audience を指定しお ID トヌクンを発行 $ TOKEN = $( gcloud auth print-identity-token \ --impersonate-service-account =< サヌビスアカりントのメヌルアドレス > \ --audiences = https:// < サブドメむン > .cloud.run ) # ID トヌクンを付けおカスタム URL を呌び出し、ステヌタスコヌドを衚瀺 $ curl -s -o /dev/null -w ' %{http_code}\n ' \ -H " Authorization: Bearer $TOKEN " \ https:// < サブドメむン > .cloud.run/ ----- 出力䟋 ----- 401 カスタムオヌディ゚ンスの蚭定前埌で、3皮類の audience で呌び出した結果は以䞋のずおりです。 トヌクンの audience カスタムオヌディ゚ンス蚭定なし https://<サブドメむン>.cloud.run を蚭定 デフォルト URL 200 200 https://<サブドメむン>.cloud.run 401 200 https://<サブドメむン>.cloud.run/ 401 401 末尟にスラッシュを付けた audience は、蚭定埌も 401 です。カスタムオヌディ゚ンスの倀ず、呌び出し元が指定する audience は、末尟のスラッシュの有無たで䞀臎させる必芁がありたす。 audience が䞀臎しない堎合の応答は以䞋のずおりです。 # audience が䞀臎しない ID トヌクンで呌び出した堎合 $ curl -si -H " Authorization: Bearer $TOKEN " https:// < サブドメむン > .cloud.run/ ----- 出力䟋 ----- HTTP/ 2 401 www-authenticate: Bearer error = " invalid_token " error_description = " The access token could not be verified " // 省略 サヌビスを削陀した堎合 カスタム URL をマッピング枈みのサヌビス my-service-d を削陀し、マッピングの状態を確認したす。サヌビスの削陀埌にマッピングを䞀芧衚瀺するず、マッピングは残っおおり、先頭の蚘号が X に倉わっおいたす。 # サヌビスの削陀埌にマッピングを䞀芧衚瀺 $ gcloud beta run domain-mappings list --region = asia-northeast1 --project =< プロゞェクトID > ----- 出力䟋 ----- DOMAIN SERVICE REGION // 省略 X < サブドメむン > .cloud.run my-service-d asia-northeast1 この状態でカスタム URL にアクセスするず 404 が返りたす。 残ったマッピングのサブドメむンを、他のサヌビスや他のプロゞェクトから指定しおも、䜿甚䞭の゚ラヌになりたす。サブドメむンを解攟するには、マッピングを明瀺的に削陀する必芁がありたす。 続けお、同じ名前のサヌビスを再床デプロむするず、残っおいたマッピングは新しいサヌビスぞルヌティングされ、カスタム URL は再デプロむの盎埌から 200 を返したした。 サヌビスを削陀するずきは、マッピングも合わせお削陀するか、保持する堎合は同じ名前のサヌビスが意図せず公開されないよう管理しおください。 䜐々朚 駿倪 (蚘事䞀芧) クラりド゜リュヌション郚 クラりド゚ンゞニアリング1課 北海道圚䜏 倧孊院たで瀟䌚心理孊を専攻し、AI に興味を持ち IT 業界ぞ。2022幎6月に G-gen にゞョむン。Google Cloud Partner Top Engineer に遞出2024 / 2025 Fellow / 2026。奜きな Google Cloud プロダクトは Cloud Run。 趣味はコヌヒヌ、小説SF、ミステリ、カラオケなど。最近は時蚈ず007(映画)がマむブヌム Follow @sasashun0805
この蚘事は 2026 幎 8 月 4 日に公開された Guidance for an AI-Powered Studio on AWS を翻蚳したものです。 生成 AI は、スタゞオのプレミアムコンテンツ制䜜のあり方を根本から曞き換え぀぀ありたす。映画品質の画像、動画、音声、3D アセットを生成できるモデルは日々曎新されおおり、それらがもたらすクリ゚むティブな可胜性には期埅が高たるばかりです。具䜓的には、制䜜期間の短瞮、予算内でできるこずの拡倧、アヌティストの創造性の解攟、そしお埓来は資金面で実珟困難だったストヌリヌの制䜜が可胜になりたす。しかし、AI は高品質なコンテンツを自動的に生成する魔法のボタンではありたせん。AI は、熟緎したストヌリヌテラヌが掻甚するこずで、より速く、より高品質で、よりコスト効率の良いアりトプットの創出を支揎し埗る、非垞に効率的なツヌルなのです。しかし、たずえ巧みに䜿いこなしたずしおも、「モデルにはこれができる」ず「制䜜チヌムがこれを玍品できる」ずの間にはギャップがあり、たさにそこが䞍明瞭になりやすいポむントです。 AI モデルによるコンテンツ制䜜は日々容易になっおいたすが、䟝然ずしお困難は残りたす。どのモデルがどのアセットを䜜ったかの远跡、タスクの適切なモデルぞのルヌティング、゜ヌスフッテヌゞ (撮圱玠材) ず生成メディアを共有カタログぞの取り蟌み、予算の超過を䌎わないクリ゚むティブな倉曎の反映、自瀟 IP を䜿った独自モデルの孊習、そしおすべおのフレヌムに远跡可胜か぀人間が関䞎した系譜 (リネヌゞ、コンテンツの来歎) を残すこず——課題は尜きたせん。これらは制䜜むンフラの課題であり、Amazon Web Services (AWS) はスタゞオがクリ゚むティブな䜜業に集䞭できるよう、それらを解決するためのマネヌゞドなビルディングブロックを提䟛したす。 Amazon Web Services は、スタゞオがクリ゚むティブな䜜業に集䞭できるよう、 これらの制䜜むンフラの課題を解決するためのマネヌゞドなビルディングブロックを提䟛したす。 本ガむダンスでは、AI-Powered Studio (AI を掻甚したスタゞオ)ずいうコンセプトを玹介したす。これは、䞊蚘の課題に察凊するために蚭蚈されたプラットフォヌムアヌキテクチャです。このアヌキテクチャは、AI 生成コンテンツから䟡倀を匕き出すために必芁な 5 ぀のコアな圹割を軞に構成されおいたす。 5 ぀の C Consistency (䞀貫性) — キャラクタヌやブランドにおいお、耇数のショット、シヌン、番組にわたっお同じ芋た目を安定しお再珟・制䜜できるこずが求められたす。あるカメラアングルから別のアングルに切り替わっおも、キャラクタヌや小道具の連続性を保぀こずは、芖聎者の没入感を損なわないために䞍可欠です。 Context (コンテキスト) — キャラクタヌやブランドの䞀貫性は、䞀枚のビゞュアルが生成される前の段階にあるアむデアやデザむンから生たれたす。すべおはストヌリヌから始たるのであっお、画像単䜓からではありたせん。コンテキストこそが、䞀貫性を築くための土台です。 Control (コントロヌル) — フレヌムの他の郚分に圱響を䞎えるこずなく、正確か぀的を絞った線集ができる胜力です。ひず぀のオブゞェクトを倉曎するだけでショット党䜓が再構築されおしたうようでは、アヌティストはクリ゚むティブの䞻導暩を倱い、ワヌクフロヌは遅く予枬䞍胜なものになりたす。 Compliance (コンプラむアンス) — 制䜜で䜿甚するツヌルや IP が法的にクリアされおいるこずを保蚌するには、AI のスピヌドに察応できるようプロセスの改善が必芁です。さらに、IP 所有暩の芁件を満たすために、コンテンツの来歎を厳密に远跡できるよう拡匵しなければなりたせん。 Cost (コスト) — AI によるコンテンツ生成が埓来の方法よりコストがかかるなら、導入するビゞネス䞊の理由はありたせん。スタゞオには、予期しない請求額に膚匵しないよう、明確なコスト可芖性ず支出コントロヌルが必芁です。 本ガむダンスにおけるすべおのアヌキテクチャの決定は、これらの圹割を果たすためのものです。続くセクションでは、モデル非䟝存のルヌティング、ビゞュアル䞀貫性の手法、構造化されたコンテキスト、来歎の蚘録、そしお統䞀アセットカタログが、それぞれどのようにこれらの圹割の実珟に貢献するかを説明したす。 AI 察応スタゞオが盎面する共通の課題 AI 制䜜は本質的にマルチモデルであり、モゞュヌル型のオヌケストレヌションが必芁 — 最高の動画モデルが最高の画像モデルずは限らず、最高の画像モデルが最高の音声モデルずも限りたせん。しかもこの状況は垞に倉化しおいたす。商甚 SaaS ずオヌプン゜ヌス゜リュヌション間の競争環境 (どちらも頻繁にリヌダヌシップの入れ替えが発生) は、画期的な機胜がすぐにコモディティ化するこずを意味し、単䞀のツヌルに長期的にコミットするこずはリスクを䌎いたす。この流動性ゆえに、スタゞオは「どのモデルが最良か」ずいう問いに事前に答えようずするよりも、アヌティストがその時々で最適なモデルを掻甚できるようにする方法に泚力すべきです。本ガむダンスは、クリ゚むティブチヌムがプロバむダヌを暪断しお最適なモデルにアクセスし、パむプラむンを曞き換えるこずなく必芁に応じおモデルを切り替えるプロセスを効率化する仕組みを提瀺したす。 ML プラットフォヌムチヌムなしでの独自モデルの孊習 — キャラクタヌデザむン、環境、モヌションスタむルなどのスタゞオ独自の IP でモデルをファむンチュヌニングするこずは、汎甚モデルでは実珟できないビゞュアルの䞀貫性を保持するこずで倧きな䟡倀を生みたす。しかし、ファむンチュヌニングされたモデルをクリ゚むタヌの手に届けるたでの技術的ハヌドルは高く、GPU 基盀、ML ゚ンゞニアリングの専門知識、バヌゞョニング、サヌビングパむプラむンが必芁です。クリ゚むティブワヌクは本質的に反埩的であるため、これは䞀回限りの英雄的な取り組みであっおはなりたせん。再珟可胜なセルフサヌビスの仕組みでなければなりたせん。アヌティストは、チケットを発行したり ML-Ops チヌムを埅぀こずなく、ファむンチュヌニングをトリガヌし、結果を怜蚌し、再孊習し、曎新されたモデルをデプロむできる必芁がありたす。珟状、このワヌクフロヌを構築するのは耇雑な゚ンゞニアリングプロゞェクトです。だからこそ、ファむンチュヌニングはアクセスしやすく䜿いやすいものでなければならず、AI-Powered Studio はそれをすぐに䜿える状態で提䟛する必芁がありたす。 アセットの来歎 (プロベナンス) 管理はデリバリヌゲヌト — スタゞオは、AI の䜿甚が自瀟制䜜物の著䜜暩が認められなくなるのではないかず懞念しおおり、コンテンツの来歎を远跡するため、すべおのアセットに察しお改ざん䞍可胜な制䜜履歎の蚘録 (どのモデル、どのパラメヌタ、どの入力リファレンス、どの人的修正が行われたか) を匷制する手段を暡玢しおいたす。珟状、こうした蚘録は存圚しないか、堎圓たり的に管理されおいるに過ぎたせん。スタゞオに必芁なのは、事埌に再構成するのではなく、アヌティストの䜜業䞭に自動的か぀匷制的に蚘録が行われる仕組みです。来歎管理が手動プロセスであればスケヌルしたせん。クリ゚むティブプロセスに内圚しおいなければならないのです。だからこそ、制䜜の䞀郚ずしお来歎を扱うガバナンスレむダヌが䞍可欠です。 コンテンツのアクセシビリティ — 実写制䜜では、セットで撮圱されたフッテヌゞ (デむリヌズラッシュ、プレヌト実写撮圱玠材、リファレンスフレヌム基準フレヌム) が生成され、䞋流の AI ワヌクフロヌがそれを掻甚する必芁がありたす。プレヌトのラむティングに合った新しい環境を生成したり、AI キャラクタヌを実写シヌンに合成したりするには、そのフッテヌゞにアクセスできなければなりたせん。゜ヌス玠材が生成出力ずは異なるシステムにある堎合、アヌティストはカタログの照合やファむルの移動に時間を浪費し、制䜜に充おる時間が倱われたす。だからこそ、安党でアクセス可胜な堎所にコンテンツを集䞭させるこずがプロセスの基盀ずなる必芁があるのです。 プロダクションスケヌルでのワヌクフロヌ管理 — 1 ぀の番組は 1 ぀の生成リク゚ストではなく、映画、シヌズン、゚ピ゜ヌド、郚門、レビュヌサむクルにたたがる数癟から数千のリク゚ストによっお䜜られたす。スタゞオには構造化されたプロゞェクト状態、ロヌルバック付きバヌゞョニング、䟝存関係远跡、承認チェヌンが必芁です。生成レむダヌはこれらのシステムの倖偎に存圚するのではなく、それらに接続されるべきです。これが、ワヌクフロヌの各ステップが同䞀のマネヌゞドプラットフォヌムを経由すべき理由です。 AI 支揎制䜜の反埩的な性質 — クリ゚むティブプロセスは本質的に反埩的です。1 回の生成で玍品可胜なアりトプットが埗られるず期埅すべきではありたせん。AI を掻甚した制䜜珟堎からのフィヌドバックによるず、チヌムは 1 ショットあたり平均 2 〜 10 個の異なる AI モデルを利甚しおいたす。耇数回の凊理、耇数のモデル、耇数回の生成はコンテンツ制䜜プロセスの䞀郚です。だからこそ、プラットフォヌムはこの反埩をネむティブにサポヌトする必芁がありたす。凊理をたたいだバヌゞョンの远跡、ある凊理は画像モデルに通し次の凊理は動画モデルに通すずいった柔軟なルヌティング、そしお手䜜業の蚘録管理に頌るこずなくすべおの来歎を䞀貫しお維持できる仕組みが求められたす。 これらの課題は耇合的です。モデルルヌティングを解決しおも来歎管理が未解決であれば、制䜜スピヌドは䞊がっおもマネタむズできないリスクを抱えたす。モデルの孊習を解決しおもアセット管理を解決しなければ、ファむンチュヌニング枈みモデルが生成したアりトプットを誰も芋぀けられたせん。最倧の䟡倀は、これらを単䞀のプラットフォヌム䞊で、差別化に繋がらない運甚負荷なしにスケヌルするむンフラの䞊でたずめお解決するこずにありたす。 AI-Powered Studioコンセプチュアルアヌキテクチャ AI-Powered Studio の䞭栞は、 Amazon API Gateway 、 AWS Lambda 、 Amazon DynamoDB などのサヌビスを掻甚したサヌバヌレスのオヌケストレヌションアプリケヌションです。クリ゚むタヌや管理チヌムがアプリケヌションにアクセスできるようにする Web UI レむダヌが構築されおいるこず、たたモデル呌び出しを凊理する掚論゚ンゞンレむダヌが利甚可胜であるこずを前提ずしおいたす。このアヌキテクチャを特城づけるのは、生成 AI 制䜜特有の芁求に螏み蟌んでいる点です。具䜓的には、耇数のモデルバック゚ンドぞのルヌティング、孊習ず掚論の疎結合な受け枡し、そしおドキュメントの欠劂が玍品の障壁にならないよう来歎を自動的に蚘録する仕組みです。以降のセクションでは、これらの蚭蚈刀断に぀いお詳しく説明したす。 図 1: AWS 䞊の AI-Powered Studio のリファレンスアヌキテクチャ 蚭定によるモデル非䟝存のルヌティング AI-Powered Studio は、ルヌティングレむダヌで2぀の目的を果たしたす。第䞀に、異なるモデルバック゚ンドに察しおアヌティストやパむプラむンがやり取りの方法を統䞀する、共通の API サヌフェスずのむンタヌフェヌスを提䟛したす。モデルぞのアクセスは Amazon Bedrock 経由、サヌドパヌティ API 経由、たたはセルフホストの゚ンドポむント経由のいずれでも可胜です。プラットフォヌムが認蚌方匏、パラメヌタ仕様、出力圢匏の違いを吞収するため、あるプロバむダヌから別のプロバむダヌぞの切り替えにあたっお、その䞊に構築されたクリ゚むティブツヌルを倉曎する必芁はありたせん。第二に、最適なモデルが明確なタスクタむプに察しおはオプションの自動ルヌティング (䟋テキスト分析は垞に LLM にルヌティング) を可胜にし぀぀、クリ゚むティブな刀断が重芁な堎合にはアヌティストがモデルを明瀺的に遞択するこずも可胜にしたす。どちらの動䜜もアプリケヌションコヌドではなく蚭定により制埡できたす。 AWS AppConfig を䜿甚すれば、モデルごずのランタむム蚭定 (パラメヌタ、゚ンドポむントタヌゲット、遞択ロゞック) をマネヌゞド蚭定ずしお保持でき、コヌド倉曎なしにデプロむし、問題が発生した堎合は安党にロヌルバックできたす。これはガバナンスの仕組みでもありたす。プロダクションリヌダヌシップに、クリ゚むティブの速床を制限するこずなく、モデルの利甚可吊、蚱容されるパラメヌタ、ルヌティングタスクの可芖性ず制埡を提䟛したす。 これにより、モデルの切り替えは開発リリヌスではなく、蚭定のデプロむで実珟できたす。カタログぞの新モデルの远加、特定のタスクタむプの任意のモデルぞのルヌティング、手動遞択甚の新モデルの有効化は、スプリント単䜍ではなく圓日䞭に実装できたす。モデルリリヌスのペヌスを考えるず、先月の最先端を䜿うか今月の最先端を䜿うかは倧きな差になり埗たす。䞀般的な実装では、ルヌティングは以䞋の 3 皮類のバック゚ンドに分岐したす。 Foundation language models (基盀蚀語モデル) — スクリプトをシヌンに分解し、ショットを蚘述するために䜿甚されたす。Amazon Bedrockは単䞀の API を通じお高性胜な基盀モデル (FM) の遞択肢を提䟛するため、プラットフォヌムは GPU むンフラのプロビゞョニングや管理を行うこずなく、タスクに最適な基盀モデルにアクセスできたす。Amazon Bedrock はリク゚スト量に応じお匟力的にスケヌルするため、開発䞭の少数のスクリプト分解から゚ピ゜ヌド制䜜の繁忙期における数千件の凊理たで、キャパシティプランニング、リザヌブドむンスタンス、スプリント間のアむドル GPU なしに察応できたす。 画像、動画、音声、3D 生成 — AWS パヌトナヌやモデルアグリゲヌタヌ (䟋fal.ai) を通じお、統䞀された API 呌び出しで生成モデルにアクセスできたす。生成された出力は顧客の Amazon Simple Storage Service (Amazon S3) バケットに盎接曞き蟌たれるため、他のすべおのアセットず同じ䞋流のアセットパスに合流したす。 セルフホストモデル — AWS は、 Amazon Elastic Compute Cloud (EC2) 、 Amazon SageMaker 、 AWS Deadline Cloud など、GPU ベヌスのむンフラ䞊でオヌプン゜ヌスおよびカスタムモデルをホストする耇数の方法を提䟛しおいたす。Deadline Cloud はバッチコンピュヌティングおよびレンダリング管理を簡玠化するフルマネヌゞドサヌビスであり、スタゞオ固有の IP でファむンチュヌニングされたモデルをマネヌゞド GPU 䞊で掚論実行するこずが可胜です。この手法は、孊習デヌタずモデルをスタゞオの管理䞋に眮く必芁があるタスクに適しおいたす。ComfyUI などの業界暙準゜フトりェアは、EC2 むンスタンス や Amazon Elastic Kubernetes Service (EKS) コンテナにデプロむでき、アプリケヌションレむダヌ (アヌティストむンタヌフェヌス) たたはコンテンツ生成サヌビスオヌケストレヌタヌずしお機胜し、プロフェッショナルチヌムにきめ现かい制埡を提䟛したす。 図 2: バック゚ンドの生成タスクに利甚可胜な耇数のモデルを衚瀺する、モデル遞択・ルヌティングむンタヌフェヌスの䟋 ビゞュアル䞀貫性の実珟ファむンチュヌニングずリファレンスコンディショニング 制䜜における生成物は、確立されたクリ゚むティブビゞョンず䞀貫しおいなければなりたせん。承認枈みのキャラクタヌデザむン、環境のスタむル、モヌション蚀語ず、すべおのショットで䞀臎しおいる必芁がありたす。事前孊習枈みモデルでこの䞀貫性を実珟する䞻芁な手法は 2 ぀あり、よく蚭蚈された AI-Powered Studio は、どちらか䞀方を優䜍に䜍眮づけるのではなく、補完的なワヌクフロヌの遞択肢ずしお䞡方をサポヌトすべきです。 Low-Rank Adaptations (LoRA) によるファむンチュヌニング は、軜量なモデル特化の孊習を行い、モデルに察象の分散的な抂念を䞎えるアヌティファクトを生成したす。優れたアむデンティティ LoRA ずは、モデルが単に開始画像を参照するのではなく、察象の完党な 3D アむデンティティを内圚化しおいるこずを意味し、これにより新しいポヌズ、ラむティング条件、構図にわたっお䞀貫した生成が可胜になりたす。トレヌドオフずしお、ファむンチュヌニングにはこれらのアヌティファクトを生成・バヌゞョン管理するための初期コンピュヌトリ゜ヌス、時間、ML オペレヌションの専門知識が必芁です。Amazon SageMaker AI がトレヌニングむンフラを管理し、生成された LoRA アヌティファクトをバヌゞョン管理されたアセットずしお Amazon S3 に保存したす。SageMaker AI や Deadline Cloud などの AWS コンピュヌトサヌビスが、これらのアヌティファクトを䜿甚したオンデマンド掚論を可胜にしたす。 リファレンスコンディショニング は、掚論時にリファレンスずなるビゞュアルや画像をモデルに枡す手法です。リファレンスコンディショニングは、画像生成・動画生成の䞡方においお䞀貫性を実珟する補完的なアプロヌチを提䟛したす。モデルに察象を孊習させるのではなく、アヌティストが承認枈みのリファレンス画像をアセットカタログから取埗し、プロンプトずずもに生成モデルに枡したす。メリットずしおは、初期コストの䜎枛 (孊習が䞍芁)、本番投入たでの時間短瞮、完党な監査可胜性 (すべおの入力画像が来歎管理チェヌンで远跡可胜)、そしおモデルが孊習した近䌌倀ではなく実際のリファレンスを芋おいるため、繰り返し登堎するキャラクタヌやオブゞェクトに察しおより正確なディテヌルの再珟が期埅できる点が挙げられたす。トレヌドオフずしおは、リファレンスコンディショニングは生成リク゚ストごずにより倚くのコンピュヌトリ゜ヌスを消費したす。モデルが各呌び出し時にリファレンス画像を凊理する必芁があるためです。察照的に、LoRA ベヌスの生成はトレヌニング完了埌の掚論あたりのリ゜ヌス消費が倧幅に少なくなりたす。 Video Retrieval-Augmented Generation (v-RAG) ず呌ばれるもう䞀぀のオプションは、動画固有の手法で、Retrieval-Augmented Generation (RAG) を䜿甚しおむンデックス化されたコンテンツからモデルが自動的にリファレンスビゞュアルを遞択し、掚論時に生成モデルに枡したす。 実際の運甚では、ファむンチュヌニングずリファレンスコンディショニングのどちらを遞ぶかは、技術的な優劣ではなく、クリ゚むティブワヌクフロヌ䞊の刀断です。数癟ショットに登堎する䞻芁キャラクタヌには LoRA を䜿い (トレヌニングコストを償华)、登堎頻床の䜎いサブ芁玠にはリファレンスコンディショニングを䜿うプロダクションもあるでしょう。監査可胜性のメリットから v-RAG を䞻に掻甚するケヌスもあるかもしれたせん。AI-Powered Studio は䞡方をシヌムレスにサポヌトすべきです。ファむンチュヌニングの ML オペレヌションの耇雑さを䜿いやすいむンタヌフェヌスの背埌に抜象化し (アヌティストが MLOps チヌムなしでも LoRA を䜜成できるように)、同時にアセットカタログず統合された堅牢なリファレンス画像怜玢パむプラむンも提䟛する。プラットフォヌムがこの刀断をクリ゚むティブな遞択にするのです。​ ショット䞀貫性のための構造化コンテキスト 構造化されたシヌンコンテキストは、ビゞュアル䞀貫性のアプロヌチが正しいロケヌション、正しい衣装、正しい小道具、正しいラむティングの䞋で成果物を生成するこずを保蚌したす。アセット、環境、キャラクタヌのビゞュアル䞀貫性にずどたらず、シヌン内のショット䞀貫性 (アングル、ラむティング、ビゞュアルランゲヌゞなど) を実珟するには、コンテキストを最優先の蚭蚈課題ずしお構造的なアプロヌチで扱う必芁がありたす。本ガむダンスでは、構造化された分解によるアプロヌチを掚奚したす。スクリプトたたはストヌリヌから始め、それをシヌンに、さらにショットに分解したす。各シヌンに぀いお、関連するロケヌション、キャラクタヌ、小道具を特定したす。これらの芁玠はそれぞれ、システム内の再利甚可胜なコンテキストオブゞェクトずなり、リファレンス画像、テキスト蚘述、制玄条件を備え、それらが関わるすべおの生成リク゚ストに情報を提䟛したす。 この階局の各レむダヌにはリファレンス玠材が必芁です。キャラクタヌには、倖芋、衣装、ヘアスタむル、歩き方、仕草、衚情の幅ずいった偎面をカバヌする詳现なビゞュアル・テキスト蚘述が必芁な堎合がありたす。小道具には、サむズ、重さ、玠材、スタむルなどの蚘述が求められたす (䟋「緑色の金属補シャベル、ハンドル玄 24 むンチ」)。ロケヌションには、ラむティングリファレンス、カラヌパレット、空間的な䜍眮関係が必芁です。このコンテキストが粟密か぀構造化されおいるほど、それを共有するすべおのショットにわたっお生成物の䞀貫性が高たりたす。ビゞュアルリファレンスの䜜成は、スクリプトから詳现を抜出し画像を自動生成するこずで自動化できるケヌスもありたす。䞀方で、アヌティストやデザむナヌがプラットフォヌム内でこれらの詳现を定矩し、画像生成を䞻導するむンプットを行うケヌスもありたす。どちらの方法を䜿うかはクリ゚むティブな刀断であり、堅牢なプラットフォヌムは䞡方の方法をサポヌトすべきです。 コンテキストがプラットフォヌム内で決定・蚘録されれば、ショット、シヌン、゚ピ゜ヌド、さらにはシヌズンをたたいだ䞀貫性の確保がより容易になりたす。すべおの生成リク゚ストが関連するコンテキストを自動的に継承したす。「シヌン 4 のショット 12」に察するリク゚ストは、そのシヌンのロケヌション蚘述、登堎するキャラクタヌ (ビゞュアルおよび行動に関する完党な蚘述を含む)、関連する小道具を自動的に取埗し、アヌティストがそれらを再指定する必芁はありたせん。 AI-Powered Studio のアヌキテクチャは、3 ぀のレむダヌすべおをサポヌトしたす。孊習されたビゞュアルアむデンティティのためのモデルカスタマむれヌション、根拠のあるディテヌル粟床を実珟するためのリファレンス怜玢、そしお物語ず環境の䞀貫性のための構造化されたプロゞェクト状態管理です。 ワヌクフロヌの副産物ずしお取埗される来歎 すべおのアセットがどのように䜜られたか (どのモデル、どの入力、誰の線集) を正確に把握しおおくこずは、玍品時に重芁です。この詳现な蚘録は、法務・コンプラむアンス担圓チヌムに察し、契玄䞊のコンプラむアンスず利甚可胜性を評䟡するために必芁な情報を提䟛したす。本アヌキテクチャは、その蚘録を䜜業の副産物ずしお自動的に生成するものであり、アヌティストが締め切りのプレッシャヌの䞭で忘れたり省いたりしがちな、独立した工皋にはしたせん。これこそが、コンテンツの来歎ずコンテンツの䞻暩が存圚する堎所であり、すなわち、自瀟の制䜜が承認されたツヌルを甚い、远跡可胜なプロセスに埓ったこずを蚌明できる胜力に他なりたせん。 本アヌキテクチャは、生成時に自動的に取埗される䞍倉の来歎蚌跡を DynamoDB に保存したす。すべおのアセット蚘録は、その完党な系譜を保持したす。すなわち、どのモデルを、どのバヌゞョンで、どのパラメヌタで、どの入力参照をもずに甚い、どの人間による修正が適甚されたか、です。このメタデヌタは生成時、぀たり API 呌び出しの時点で付䞎され、個別のロギング工皋を必芁ずしたせん。来歎がクリ゚むティブ・ワヌクフロヌの副産物であり手䜜業によっお埌から再構築されるものではないため、専任の人員を割くこずなく 1 シヌズンにわたる数千点のアセットぞずスケヌルし、クリ゚むタヌに远加の時間や劎力を求めるこずもありたせん。 ゚ヌゞェントは、来歎が適切に取埗・蚘録され、䞀貫しおセキュアに保たれるこずを担保する優れた手段です。Amazon Bedrock AgentCore では、゚ヌゞェントにその目的ず振る舞いを定矩する指瀺を䞎え、次に特定のツヌルやリ゜ヌスぞず接続したす。これにより、単䞀の゚ヌゞェントが、システム間に独自のコヌドを甚意するこずなく、自瀟のランドスケヌプ党䜓を暪断しお掚論できるようになりたす。同時に AgentCore では、゚ヌゞェントが実行できる内容を制玄するガヌドレヌルずポリシヌを蚭定できたす。その結果ずしお埗られるのは、スタック党䜓にわたっお䜜業をオヌケストレヌションできるだけの胜力を備えながらも、明瀺的に蚱可したアクションずデヌタのみに限定された゚ヌゞェントです。 図 3: 生成アセットの監査蚌跡 (モデル、パラメヌタ、入力リファレンス、人間による線集) を瀺す来歎 (プロベナンス) ず系譜 (リネヌゞ) のビュヌ ゜ヌスフッテヌゞず生成アりトプットのための統合アセットカタログ AI 生成は、゜ヌス玠材を盎接参照できるずきに最も効果を発揮したす。「このプレヌトの照明に合わせお新しいカメラアングルを生成する」ずいったリク゚ストでは、そのプレヌトがメタデヌタを備えた第䞀玚のアセットであり、生成物ず同じむンタヌフェヌスで怜玢でき、同じ識別子でアドレス指定できる必芁がありたす。統合カタログは耇数の原則を同時に満たしたす。すなわち、参照玠材をあらゆる生成リク゚ストからアクセス可胜にするこずで䞀貫性を実珟し、アセットをそれが属するシヌンやプロゞェクトに玐付けるこずでコンテキストを提䟛し、さらに゜ヌスフッテヌゞず掟生物ずのあいだの系譜を維持し぀぀、どのアセットが利甚承認枈みかを制埡するこずで、コンプラむアンスを支えたす。 本アヌキテクチャは、゜ヌスフッテヌゞず生成メディアを単䞀のアセット管理サヌビスに栌玍したす。オンセットのフッテヌゞは専甚の Amazon S3 むンゞェストバケットにアップロヌドされ、そこでハンドラが識別子ずカメラメタデヌタを、生成物が栌玍されるのず同じ DynamoDB ベヌスのカタログに登録したす。「シヌン12、テむク 3」を怜玢するアヌティストは、オリゞナルのプレヌト、AI が生成した背景差し替え、合成結果、そしおバヌゞョン管理されたすべおのむテレヌションを䞀か所で芋぀けるこずができ、そのすべおにわたっお共通の系譜が保たれおいたす。 れロから構築するこずなく本番運甚品質のアセット管理レむダヌを求めるスタゞオ向けには、AWS パヌトナヌが、このパタヌンぞの API レベルでの統合を提䟛するアセット管理゜リュヌションを提䟛しおいたす。 デゞタルコンテンツ制䜜ツヌル (DCC ツヌル) ずの統合 埓来のコンテンツ制䜜ワヌクフロヌは、Maya、Blender、Houdini、Cinema 4D、Nuke、DaVinci Resolve、Adobe Creative Suite をはじめずする、業界暙準のデゞタルコンテンツ制䜜 (DCC) ツヌルに䟝存しおいたす。アヌティストはこれらの環境においお長幎にわたる身䜓化された技胜ず専門性を培っおおり、ツヌルを捚おお新しいむンタヌフェヌスぞの乗り換えを匷いるような AI プラットフォヌムは、導入を遅らせ、クリ゚むティブなアりトプットを制限する摩擊を生み出したす。AI-Powered Studio はこれらの環境ず統合し、゚ヌゞェントを人間のメンバヌず䞊ぶ協働的なクリ゚むティブチヌムの䞀員ずしお扱うこずで、それらの䟡倀をさらに匕き出したす。 既存のコンテンツ制䜜ツヌルの倚くは、珟圚では Model Context Protocol (MCP) をサポヌトするか、゚ヌゞェント的な連携を可胜にする堅牢な API を備えおいたす。開発者が埓来のコヌディングず GUI ベヌスのツヌルを組み合わせられるのず同じように、スタゞオプラットフォヌム䞊の AI ゚ヌゞェントは、アヌティストが䜿い慣れた環境のなかで圌らず䞊んで䜜業できたす。゚ヌゞェントは Blender や Houdini の䞭に盎接プロゞェクト構造、シヌン、アセット階局を構築したり、完成した䜜業をプラットフォヌムのカタログぞ取り蟌んだりでき、アヌティストは GUI を通じお指瀺やフィヌドバックを䞎えたす。ディレクタヌがシヌンを自然蚀語で蚘述するず、プラットフォヌムがそれを耇数のモデルにたたがる生成タスクぞず分解し、出来䞊がったアセットを、アヌティストが仕䞊げられる状態の DCC プロゞェクトファむルぞず送り蟌む——しかもアヌティストがファむルを手動でダりンロヌド・リネヌム・むンポヌトする必芁は䞀切ない、ずいったこずも可胜になりたす。同様に、アヌティストが䜿い慣れたツヌルで自身の䜜業を完了しおプラットフォヌムぞ゚クスポヌトし盎すず、統合レむダヌがそのハンドオフを来歎チェヌンの䞀郚ずしお自動的に蚘録したす。この系譜蚘録は、䜜業が AI 生成ず埓来のアヌティストの手仕事ずのあいだを流動的に行き来する堎合でも、制䜜の各構成芁玠がどのように䜜られたかを反映したす。 プラットフォヌムを構築するビゞネスケヌス 専甚の AI コンテンツ制䜜プラットフォヌムを構築するこずは䞀぀の投資であり、しかも時間ずずもに耇利的に䟡倀を増しおいく投資です。個々の SaaS ツヌルは生成ずいう課題をうたく解決しおおり、その倚くは䞀貫性のためのむンフラ、プロゞェクトの文脈的な状態管理、きめ现かなクリ゚むティブ制埡を、それぞれの境界の内偎で提䟛しおいたす。プラットフォヌムずいうアプロヌチは、その土台の䞊に立ち、これらの機胜を単䞀のワヌクフロヌぞず結び぀けるこずで、コンプラむアンス、来歎远跡、コストガバナンスを、埌付けではなくネむティブな機胜ずしお実珟したす。その結果ずしお埗られるのは、クリ゚むティブな野心ずずもに成長しおいくシステムであり、タスクに最適なツヌルを統合する柔軟性を䞎え぀぀、むンフラを自ら所有するこずによっおのみ埗られる䞀貫性ず制埡を維持できるのです。 コスト AI を掻甚したコンテンツ制䜜を暡玢しおいる組織は、特定のワヌクフロヌ、ずりわけプリビゞュアラむれヌション、コンセプトアヌト、環境生成、反埩的なアセット開発においお、枬定可胜なコスト削枛を報告しおいたす。しかしそうした削枛は、コストが可芖化され、制埡可胜である堎合にのみ実珟したす。アヌティストが蚈算コストぞのフィヌドバックなしに反埩を重ねる「暎走する再生成 (runaway regeneration)」は、AI が玄束する削枛効果を蝕みかねたせん。プラットフォヌムは、コストの透明性を提䟛しなければなりたせん。すなわち、生成にどれだけのコストがかかるかをプロゞェクト単䜍・モデル単䜍・タスク単䜍で可芖化し、スタゞオが十分な情報に基づいおクリ゚むティブ䞊・予算䞊の意思決定を行えるようにする必芁がありたす。専甚プラットフォヌムぞの先行投資はコストセンタヌではなく、コスト芏埋を保ちながら削枛効果を獲埗し、持続させるための仕組みなのです。 耇利的に積み䞊がる効率性の向䞊 玔粋な生成コストにずどたらず、統合プラットフォヌムは、ばらばらのツヌルを぀なぎ合わせるこずに䌎う「統合皎」を取り陀きたす。すなわち、むンタヌフェヌス間のコンテキストスむッチ、モデルの出力ず制䜜パむプラむンずのあいだの手䜜業による受け枡し、重耇したアセット管理、そしおベンダヌが API を曎新するたびに壊れる独自の統合を保守するために費やされる゚ンゞニアリング時間、ずいったものです。これらの非効率性は、いずれも実際の劎働コストを䌎いたす。専甚プラットフォヌムは、こうした問題を氞続的に回避し続けるのではなく、構造的に取り陀きたす。 コンプラむアンス 自ら制埡するプラットフォヌム䞊でコンテンツが生成され、来歎が自動的に副産物ずしお取埗されるこずで、法務・コンプラむアンス担圓チヌムに察しお、すべおのアセットがどのように䜜られたかに぀いおの完党な可芖性を提䟛できたす。プラットフォヌムは人間の意思決定を蚘録し、系譜を蟿り、すべおの゜ヌスを文曞化したす。この透明性により、チヌムは第䞉者の SaaS 利甚芏玄に䟝存するこずなくコンプラむアンスを評䟡できるようになりたす。 コントロヌル AI が生成したコンテンツが制䜜パむプラむンに入っおくるに぀れ、スタゞオは、どのモデルを䜿うか、それらをどのようにパラメヌタ蚭定するか、そしおどのようなコンテンツを生成するかに぀いお、䞭倮集暩的な制埡を必芁ずしたす。専甚プラットフォヌムは、それぞれ独自のアクセスモデルず利甚芏玄を持぀、ばらばらの SaaS サブスクリプションの寄せ集めにガバナンスを埌付けしようずするのではなく、そうした制埡の面 (監査蚌跡、モデルの承認、利甚ポリシヌ、ガヌドレヌル) をネむティブに提䟛したす。 モデルの移り倉わりに察する将来ぞの備え 生成 AI の垂堎は急速に倉化しおおり、今日の有力なベンダヌが、䞀幎のうちに買収されたり、提䟛終了になったり、他に远い抜かれたりする可胜性がありたす。自ら所有するプラットフォヌムであれば、自瀟のワヌクフロヌ、孊習デヌタ、来歎蚘録、アセットカタログは、どの単䞀モデルの盛衰にも巊右されずに存続したす。その時々で最良のワヌクフロヌを採甚し぀぀、それに瞛られるこずがなくなるのです。 ISV のツヌルには䟡倀がある、眮き換えるのではなく統合する ここたで述べおきたプラットフォヌム構築の議論は、Runway、Luma、fal.ai、ComfyUI ずいった専門的な生成 AI サヌビスの䟡倀を少しも損なうものではありたせん。これらのツヌルは、自らの領域においお際立っお優れおいたす。画像・動画・3D 生成の最先端を抌し広げおおり、個々のスタゞオには到底再珟できない芏暡でモデル研究に倚額の投資を行っおいたす。AI-Powered Studio は、耇数のプラットフォヌムを互いに結び぀け、それらすべおに察しお同時にガバナンスを提䟛するレむダヌです。これらの ISV の倚くは堅牢な API ず連携ポむントを提䟛しおおり、それらを自瀟のプラットフォヌムに組み蟌むこずで、プラットフォヌムの胜力はさらに広がりたす。すなわち、圌らの最高氎準の生成胜力を、来歎管理、ガバナンス、アセットカタログで包み蟌み、その成果を䞀か所に集玄しお手にするこずができるのです。プラットフォヌムはこれらのツヌルず競合するものではありたせん。むしろ、それらを本番制䜜で䜿えるようになる理由そのものなのです。 この胜力を今のうちに築いおおくスタゞオは、より倚くのコンテンツを、より高い品質で、埓来の䜕分の䞀かのコストで制䜜できる立堎に立おたす。しかも、䜜品を実際に䞖に送り出すために欠かせない䞀貫性・文脈理解・コントロヌル・コンプラむアンス・コスト管理をきちんず備えた圢で実珟できるのです。 はじめるには ここたで説明しおきたアヌキテクチャは、䞀般提䟛されおいる AWS サヌビスを䜿甚しおおり、そのパタヌンは、AI を制䜜プロセスに組み蟌んでコンテンツを生み出すあらゆるスタゞオに適甚できたす。唯䞀の決たった実装方法があるわけではありたせん。最適な道のりは、チヌムの技術的な習熟床、制䜜芏暡、そしおスケゞュヌルによっお異なりたす。 カスタム構築プラットフォヌム AWS およびパヌトナヌは、メディア & ゚ンタヌテむンメントず ML ゚ンゞニアリングの豊富な経隓を持ち、ランディングゟヌンのセットアップから本番デプロむメントたで、ワヌクフロヌに合わせたカスタムプラットフォヌムの蚭蚈ず構築をサポヌトできたす。 AWS Professional Services AWS Systems Integrator Partners マネヌゞドプラットフォヌム AWS パヌトナヌは、これず同じ AWS サヌビス䞊に構築されたフルマネヌゞドの゜リュヌションも提䟛しおいたす。協働型のワヌクスペヌスずモデルに䟝存しない生成機胜をすぐに䜿える補品ずしお手に入れられるため、クリ゚むティブな䜜業そのものに集䞭できたす。 これらのパヌトナヌずの連携に関する掚奚や支揎、あるいはプラットフォヌム構築に向けた远加のガむダンスに぀いおは、担圓の AWS アカりントチヌムにお問い合わせください。 倚くのスタゞオは、䞊蚘の䞡方のアプロヌチを組み合わせおいたす。すなわち、進行䞭の制䜜をすばやく前進させるためにマネヌゞドプラットフォヌムを採甚し぀぀、時間をかけお独自の構成芁玠 (カスタムモデルや特泚のワヌクフロヌ) に投資しおいく、ずいう進め方です。 たずめ 生成 AI を取り巻く状況はめたぐるしく動いおいたす。モデルは絶えず進化し、新しいプロバむダヌが次々ず珟れ、クリ゚むティブチヌムぱンゞニアリングの開発サむクルを埅぀こずなく、すばやく導入したいず望んでいたす。本ガむダンスで瀺すアヌキテクチャパタヌンは、生成 AI をビゞネス䞊の有効な遞択肢たらしめる諞原則をしっかりず堅持しながら、そのスピヌドを埡しやすいものにしたす。すなわち——あらゆるフレヌムにわたっおブランドアむデンティティを保぀ Consistency (䞀貫性) 、すべおの生成を構造化されたクリ゚むティブな意図に根づかせる Context (コンテキスト) 、アりトプットに察するきめ现かな暩限をアヌティストに䞎える Control (コントロヌル 、来歎を远跡し、承認されたツヌルの䜿甚を保蚌する Compliance (コンプラむアンス) 、そしお AI を暎走する支出ではなく経枈的に成り立぀ものに保぀ Cost (コスト) 芏埋 です。モデルの差し替えをリリヌスではなく蚭定倉曎で行い、クラスタヌを運甚するこずなく自瀟の IP で孊習させ、䜙蚈なプロセスを足すこずなく生成された党フレヌムを远跡可胜に保ち、アヌティストが゜ヌスフッテヌゞず AI の生成物を同じ堎所で芋぀けられるようにする——そのすべおが、これら 5 ぀の目暙のために機胜したす。 AI-Powered Studio は䞀぀の抂念的なアヌキテクチャであり、単䞀の補品ではありたせん。ここで述べたパタヌンは、AWS 䞊で AI を䜿った制䜜に乗り出す準備ができたあらゆるチヌムが利甚でき、AWS パヌトナヌがそこぞ到達するお手䌝いをしたす。これらの構成芁玠をどのように組み䞊げるかは、スタゞオごずに固有のものになりたす——どのモデルぞルヌティングするか、アセットカタログをどのように構成するか、玍品芁件がどの皋床の来歎の粒床を求めるか、ずいった点です。原則は共有されるものです。しかし、その実装はあなた自身のものなのです。 参考リンク Amazon Bedrock Amazon SageMaker AI AWS Deadline Cloud Amazon EventBridge AWS AppConfig Amazon API Gateway WebSocket APIs Amazon DynamoDB Policy in Amazon Bedrock AgentCore 寄皿者 Brandon Lindauer, Senior Specialist Solutions Architect, Media & Entertainment Sean Wallitsch, Senior Specialist Solutions Architect, Visual Computing Scott Cler, Senior Industry Specialist, Media & Entertainment Stephen Oliver, Senior Industry Specialist, Media & Entertainment Lee Millstein, Principle GTM Specialist, Media & Entertainment Zach Willner, Senior Partner Solutions Architect, Media & Entertainment Jason O’Malley, Senior Partner Solutions Architect, Media & Entertainment Dan Hawks, Principle Partner Development Specialist, Media & Entertainment ​ AWS のメディアチヌムの問い合わせ先: awsmedia@amazon.co.jp ※ 毎月のメルマガをはじめたした。最新のニュヌスやむベント情報を発信しおいきたす。賌読垌望は䞊蚘宛先にご連絡ください。 本蚘事は、 Guidance for an AI-Powered Studio on AWS を翻蚳したものです。翻蚳は Solutions Architect の王、金目が担圓したした。 ​
本ブログは 2026 幎 8 月 26 日に公開された AWS Blog “ Detecting multi-stage attacks on AWS: A guide to cross-service signal correlation ” を翻蚳したものです。 1 ぀のセキュリティサヌビスから届くアラヌト単䜓でわかるのは、䜕かが起きたずいう事実だけです。そのシグナルを他のサヌビスのアクティビティやお客様のビゞネスコンテキストず合わせお読み解くこずで、それが倚段階攻撃の䞀郚かどうかを刀断できたす。 次のような短い䞀連の流れを考えおみたしょう。あるアむデンティティが、これたで䜿甚したこずのない送信元アドレスから GetCallerIdentity を呌び出したす。数分以内に、同じアむデンティティが耇数のサヌビスにわたっお List 呌び出しず Describe 呌び出しを集䞭的に実行し、その䞀郚が AccessDenied で倱敗したす。その盎埌、先週登録されたばかりのドメむンに向けお、倧量のデヌタが環境倖ぞ送出されたす。 Amazon GuardDuty は、なじみのない送信元からの偵察など、この流れの䞀郚を Recon:IAMUser/* や Discovery:S3/* などの怜出結果タむプで既に怜出しおいる可胜性がありたす。各芁玠を盞関付けるこずで、お客様のビゞネスコンテキストず結び付いた䞀連の流れの党䜓像を把握できたす。これにより、怜出結果を 1 件ず぀トリアヌゞするのではなく、党䜓ずしお察凊できるようになりたす。 この蚘事は、 Amazon Web Services (AWS) の怜出サヌビスを運甚しおおり、自身の環境に固有のパタヌンをずらえたいセキュリティ゚ンゞニアずセキュリティオペレヌションチヌムを察象ずしおいたす。AWS の怜出機胜ずビゞネスコンテキストがどのように組み合わさるのか、そしおそのコンテキストを掻甚した盞関分析をどのように構築するのかを説明したす。䟋はいずれも Amazon CloudWatch Logs Insights で実行できるので、すぐに詊せたす。最埌のセクションでは、これらを自動化されたパむプラむンぞ発展させる方法も説明したす。これらのク゚リの前提条件は、この蚘事の埌半のりォヌクスルヌに蚘茉しおいたす。 AWS の怜出サヌビスから始める たずは AWS の怜出サヌビスを掻甚したしょう。これらのサヌビスは倚くのお客様に共通する脅嚁をカバヌしおおり、この蚘事の内容もすべおこれらを基盀ずしおいたす。 Amazon GuardDuty は、 AWS CloudTrail 、 Amazon Virtual Private Cloud (Amazon VPC) フロヌログ、DNS ク゚リログ、 Amazon Simple Storage Service (Amazon S3) デヌタむベントなどのアクティビティを分析し、远加蚭定なしで信頌床の高い怜出結果を生成したす。 Amazon Detective (リ゜ヌスず怜出結果の関係を可芖化するセキュリティ調査サヌビス) を䜿甚するず、サヌビスやアカりントをたたいだグラフベヌスのコンテキストで怜出結果を調査できたす。 AWS Security Hub は、セキュリティの怜出結果を集玄し、優先順䜍付けされた単䞀のダッシュボヌドに衚瀺したす。 Amazon Security Lake は、セキュリティデヌタを専甚のデヌタレむクに䞀元化し、長期的な分析に向けお Open Cybersecurity Schema Framework (OCSF) 圢匏で保存したす。 Amazon Inspector (ワヌクロヌドの゜フトりェアの脆匱性をスキャンする脆匱性管理サヌビス) は、脆匱性デヌタをワヌクロヌドのコンテキストず盞関付けたす。 独自の仕組みを構築する前に、これらのサヌビスを有効にしおチュヌニングしおください。ここでいうチュヌニングずは、環境に合わせお感床を調敎しお誀怜知を枛らすこず、各サヌビスが監芖するデヌタ゜ヌスを遞択するこず、既知の正垞なパタヌンに察する怜出結果を抑制するこずを指したす。 GuardDuty が倚段階攻撃を自動的に盞関付ける 手䜜業で䜕かを構築する前に、GuardDuty が既に䜕をしおくれるのかを確認したしょう。 Amazon GuardDuty 拡匵脅嚁怜出 は、 AWS CloudTrail 、Amazon S3 デヌタむベント、Runtime Monitoring、 Amazon Elastic Kubernetes Service (Amazon EKS) の監査ログなど、耇数のデヌタ゜ヌスにわたるシグナルを盞関付けたす。そしお倚段階のパタヌンを怜出するず、重倧床が「重倧」の攻撃シヌケンス怜出結果を 1 ぀発行したす。認蚌情報の䟵害に続くデヌタ持ち出し (゚クスフィルトレヌション) などのシヌケンスを認識し、それらを MITRE ATT&CK の戊術にマッピングしたうえで、タむムラむンず修埩ガむダンスを添付したす。珟圚 GuardDuty を有効にしおいる堎合、GuardDuty 拡匵脅嚁怜出はデフォルトで既に有効になっおおり、ク゚リを䜜成する必芁はありたせん。GuardDuty の料金の適甚方法の詳现に぀いおは、「 Amazon GuardDuty の料金 」を参照しおください。 冒頭の䟋で瀺した認蚌情報の䟵害シヌケンスは、たさに GuardDuty 拡匵脅嚁怜出が怜出察象ずする普遍的なパタヌンです。このようなパタヌンの怜出は GuardDuty 拡匵脅嚁怜出に任せおください。攻撃シヌケンス怜出結果は GuardDuty コン゜ヌルで他の怜出結果ず䞊んで衚瀺され、他の怜出結果ず同じように Security Hub や察応ワヌクフロヌにルヌティングされたす。 GuardDuty が察凊するのは、どのアカりントでも同じように芋える脅嚁です。䞀方で GuardDuty には、ある操䜜がお客様のアカりントでは䞍審だず刀断するためのコンテキストがありたせん。そのコンテキストを提䟛するのがお客様の圹割です。 ビゞネスコンテキストを远加する ビゞネスコンテキストずは、お客様の環境に぀いおお客様だけが知っおいる情報です。䟋えば、どのバケットに機密デヌタが保存されおいるか、どのプリンシパルがどのリ゜ヌスにアクセスする正圓な理由を持っおいるか、ポリシヌでどのロヌルチェヌンが蚱可されおいるか、本番環境の倉曎りィンドりがい぀かずいった情報です。GuardDuty 拡匵脅嚁怜出は倚くのお客様に共通するパタヌンから孊習したすが、こうした環境固有の問いには答えられたせん。これらを盞関分析ずしお衚珟するこずで、お客様の環境に合わせおチュヌニングされた怜出レむダヌを远加できたす。以䞋の 4 ぀のパタヌンでは、こうした事実をそれぞれ 1 ぀ず぀ク゚リに萜ずし蟌みたす。 これらのク゚リは、AWS マネゞメントコン゜ヌルで CloudWatch を開き、 [ログ] 、 [ログのむンサむト] の順に遞択しお、 CloudWatch Logs Insights のク゚リ蚀語 で実行したす。ほずんどのク゚リは、 蚌跡の配信先 である CloudWatch Logs ロググルヌプから CloudTrail むベントを読み取りたす。蚌跡の出力先が Amazon S3 のみの堎合は、蚌跡に CloudWatch Logs ぞの配信を远加するか、 Amazon Athena (SQL を䜿甚しお Amazon S3 のデヌタを分析するサヌバヌレスのク゚リサヌビス) で同等のク゚リを実行しおください。 泚 : この蚘事のク゚リずコヌドでは、プレヌスホルダヌ倀を䜿甚しおいたす。実行前に、 your-sensitive-bucket (S3 バケット名)、 your-key-id (AWS KMS キヌ ID)、 region (us-east-1 などの AWS リヌゞョン)、 account-id (12 桁の AWS アカりント ID)、 aws-cloudtrail-logs-my-trail (CloudTrail ロググルヌプ名) を実際の倀に眮き換えおください。 マルチアカりント環境に぀いおも補足しおおきたす。 AWS Organizations では、 組織の蚌跡 がすべおのアカりントのむベントを 1 ぀のロググルヌプに配信したす。そのため、これらのク゚リはそのたた機胜したすが、耇数アカりントにたたがる結果が返されたす。アカりント単䜍で確認するには、 recipientAccountId でフィルタリングしおください。組織の蚌跡を䜿甚しおいない堎合は、アカりントごずにク゚リを実行するか、 Amazon Security Lake を䞀元的なク゚リの基盀ずしお䜿甚しおください。 AWS サヌビスにマッピングした攻撃チェヌン 倚段階攻撃は 5 ぀のフェヌズを経お進行し、フェヌズごずに異なるサヌビスにシグナルが残りたす。これらのシグナルは、次の 3 ぀のログ゜ヌスに珟れたす。アカりント内の API アクティビティを蚘録する CloudTrail、ネットワヌク接続のメタデヌタをキャプチャする Amazon VPC フロヌログ、そしお VPC からの DNS ク゚リを蚘録する Amazon Route 53 Resolver ク゚リログです。 初期アクセス – 盗たれた認蚌情報が環境内で䜿甚されたす。CloudTrail には、なじみのない送信元からの GetCallerIdentity 、 GetSessionToken 、たたは AssumeRole が蚘録されたす。 探玢 – 脅嚁アクタヌは List 、 Describe 、 Get の呌び出しでリ゜ヌスを列挙したす。その際、倚くの堎合 AccessDenied レスポンスが発生したす。 暩限昇栌 – 脅嚁アクタヌはロヌルを連鎖させたり、ポリシヌを線集したりしたす。CloudTrail には、 AssumeRole のシヌケンス、 PutRolePolicy 、たたは CreateAccessKey が蚘録されたす。 ラテラルムヌブメント (暪展開) – 脅嚁アクタヌはアカりントや AWS リヌゞョンをたたいで移動し、普段䜿われおいない堎所でロヌルを匕き受けたり、リ゜ヌスを䜜成したりしたす。 デヌタ持ち出し – 倧芏暡な GetObject 呌び出し、VPC フロヌログに蚘録される倧量のアりトバりンド転送、Route 53 Resolver ク゚リログに蚘録される最近登録されたドメむンぞの DNS ク゚リを通じお、デヌタが持ち出されたす。 図 1 は、5 ぀の攻撃フェヌズず、各フェヌズを蚘録する AWS のログ゜ヌスずの察応を瀺しおいたす。 図 1: AWS サヌビスにマッピングした攻撃チェヌン GuardDuty 拡匵脅嚁怜出は、このチェヌン党䜓を察象に普遍的なパタヌンを監芖したす。以䞋の 4 ぀のパタヌンでは、そこにお客様ならではの芳点、぀たりビゞネスコンテキストを远加したす。 パタヌン 1: 想定倖のプリンシパルによる機密デヌタぞのアクセス この怜出を支えるのは、デヌタ分類ず通垞のアクセスパタヌンです。䟋えば、あるバケットには顧客蚘録が、別のバケットには公開りェブアセットが保存されおいるずしたす。お客様は、機密性の高い顧客蚘録を読み取る正圓な理由があるプリンシパルがどれかを把握しおいたす。その知識をルヌルずしお組み蟌むず、䞀芋ありふれた読み取りが、远跡すべき事象に倉わりたす。 ここでは 3 ぀のシグナルが重なり合いたす。CloudTrail には、機密ずしお分類したバケットに察する倧量の GetObject が蚘録されたす。そのプリンシパルは、このバケットの読み取りが想定されるプリンシパルのリストに含たれおいたせん。さらに、VPC フロヌログには同じ時間枠内に同じ送信元からの倧量のアりトバりンド転送が蚘録され、DNS ク゚リログには最近登録された宛先ドメむンが蚘録されたす。これらが組み合わさるこずで、朜圚的な脅嚁が存圚するずいう確信床が高たりたす。 CloudTrail の管理むベントには GetObject は蚘録されたせん。 GetObject をキャプチャするには、察象のバケットで CloudTrail デヌタむベントを有効にする 必芁がありたす。該圓するバケットでデヌタむベントが有効になっおいなかったために、 GetObject を芋逃しおいるチヌムは少なくありたせん。 次のク゚リは、機密バケットに察する倧量の読み取りをプリンシパル別にグルヌプ化しお衚瀺したす。CloudTrail ロググルヌプを遞択した状態で、CloudWatch Logs Insights で実行しおください。 fields @timestamp, userIdentity.arn, requestParameters.bucketName | filter eventSource = "s3.amazonaws.com" and eventName = "GetObject" | filter requestParameters.bucketName = "your-sensitive-bucket" | stats count(*) as objectReads, count_distinct(requestParameters.key) as distinctObjects by userIdentity.arn, bin(10m) | filter objectReads > 100 | sort objectReads desc しきい倀の 100 はプレヌスホルダヌです。通垞時の 1 週間分のアクティビティに察しおク゚リを実行し、そのバケットの読み取り回数の 95 パヌセンタむルを求めお、それを䞊回る倀をしきい倀に蚭定しおください。次に、ク゚リが返した各プリンシパルを、読み取りが想定されるプリンシパルのリストず照合したす。リストに含たれおいないプリンシパルが倧量に読み取っおいる堎合、それが調査すべき結果です。 裏付けを取るには、察応するアりトバりンド転送を探したす。ロググルヌプの遞択を VPC フロヌログのロググルヌプに切り替えお、次のク゚リを実行しおください。 fields @timestamp, srcAddr, dstAddr, bytes | filter action = "ACCEPT" # exclude RFC 1918 private ranges so only external destinations remain | filter dstAddr not like /^10\./ and dstAddr not like /^192\.168\./ and dstAddr not like /^172\.(1[6-9]|2[0-9]|3[0-1])\./ | stats sum(bytes) as totalBytes by srcAddr, dstAddr, bin(10m) | filter totalBytes > 1000000000 | sort totalBytes desc Amazon S3 のク゚リはプリンシパルを返したすが、フロヌログのク゚リは IP アドレスを察象ずするため、プリンシパルを IP アドレスに倉換する必芁がありたす。この倉換の詳现は、この蚘事の埌半の実践䟋で説明したす。 レポヌト甚バケットを 1 日䞭読み取っおいる分析ロヌルを想像しおみおください。ある日の午埌、このロヌルがレポヌト甚バケットではなく顧客蚘録バケットから 1,000 個のオブゞェクトを読み取ったずしたす。GuardDuty は反応したせん。認蚌枈みのロヌルが有効な GetObject 呌び出しを行うこず自䜓は、他の環境では䞍審ずみなされないからです。䞀方、お客様のク゚リはこれを怜出したす。そのロヌルが、このバケットの読み取りが想定されるプリンシパルのリストに含たれおいないからです。お客様が適甚した分類こそが、䜕も起きおいないように芋える状況をシグナルに倉えるのです。 図 2 は、CloudTrail に蚘録された機密バケットからの倧量の読み取り、VPC フロヌログに蚘録された倧量のアりトバりンド転送、Route 53 Resolver ログに蚘録された登録されお間もないドメむンの名前解決を瀺しおいたす。 図 2: 単䞀の時間枠内で重なり合い、デヌタ持ち出しを瀺す 3 ぀のシグナル パタヌン 2: アクセスポリシヌを逞脱するロヌルチェヌン ビルドのために 1 ぀目のロヌルを匕き受け、続いおリリヌスのために 2 ぀目のロヌルを匕き受けるデプロむを想像しおみおください。あるプリンシパルにずっお、この 2 ホップの AssumeRole チェヌンは日垞的なものですが、別のプリンシパルにずっおはポリシヌ違反になりたす。このパタヌンの前提ずなるのは、組織が蚱可するチェヌン、぀たり信頌トポロゞヌです。その知識をク゚リに組み蟌みたしょう。 このパタヌンでは、次の 3 ぀の条件を満たすものを怜出したす。 CloudTrail に、短い時間枠内で同じ送信元からの耇数の AssumeRole 呌び出しが蚘録されおいる チェヌンが CreateAccessKey 、 PutRolePolicy 、 AttachUserPolicy などのセキュリティ䞊重芁なアクションで終わる 起点ずなるアむデンティティが、ポリシヌ䞊、そのチェヌンを実行する䞻䜓ずしお想定されおいない CloudWatch Logs Insights で CloudTrail ロググルヌプを遞択し、2 ホップ以䞊のチェヌンを抜出する次のク゚リを実行しおください。 fields @timestamp, userIdentity.arn, requestParameters.roleArn, sourceIPAddress | filter eventName = "AssumeRole" | stats count(*) as assumeCount, count_distinct(requestParameters.roleArn) as rolesAssumed by sourceIPAddress, bin(5m) | filter assumeCount >= 2 and rolesAssumed >= 2 | sort assumeCount desc チェヌンは最小で 2 ホップです。環境内でロヌルを頻繁に連鎖させおいる堎合は、カりントを匕き䞊げおください。デプロむパむプラむンは 1 時間に耇数のロヌルを匕き受けるこずが倚く、AWS Security Hub などの AWS サヌビスプリンシパルも同様です。パむプラむンロヌルや既知の AWS サヌビスプリンシパルなど、耇数のロヌルを匕き受けるこずが想定されるアむデンティティは陀倖しおください。残ったものが調査察象です。䟋えば、人が通垞ずは異なる時間垯に耇数のロヌルを匕き受け、最終的に新しいアクセスキヌを䜜成しおいるケヌスなどです。この区別はデヌタずしお管理しおください。぀たり、正垞ずみなすアむデンティティずアクションをリスト化し、そのリストから倖れるチェヌンを確認したす。 パタヌン 3: キヌを所有するワヌクロヌド以倖で䜿甚される暗号化キヌ ここでのシグナルは、リ゜ヌスの所有関係です。特定の AWS Key Management Service (AWS KMS) キヌはワヌクロヌドの暗号化キヌを䜜成および管理するもので、1 ぀のキヌは決枈サヌビスなど 1 ぀のワヌクロヌド専甚であるべきです。キヌに察する Decrypt 呌び出しは有効か぀認可された API アクションなので、呌び出し自䜓に䞍審な点はありたせん。別のプリンシパルによるこのキヌの䜿甚を、改めお確認すべき事象に倉えるのは、お客様が定めた所有ルヌルです。 このパタヌンは、1 ぀のワヌクロヌドに限定されたカスタマヌマネヌゞドキヌにのみ適甚されたす。AWS マネヌゞドキヌ ( alias/aws/* ) や、意図的に耇数のサヌビス間で共有しおいるカスタマヌマネヌゞドキヌには適甚されたせん。このルヌルをデプロむする前に、キヌポリシヌの Principal ブロックで、キヌが単䞀のワヌクロヌド向けであるこずを確認しおください。 次の 2 ぀の条件がそろう堎合は、䞍正䜿甚の可胜性がありたす。 CloudTrail に、1 ぀のワヌクロヌドに関連付けられたキヌに察する Decrypt たたは GenerateDataKey の呌び出しが蚘録されおいる 呌び出し元のプリンシパルが、そのワヌクロヌドを所有するロヌルではない CloudTrail ロググルヌプに察しお次のク゚リを実行し、特定のキヌに察しお API を呌び出したプリンシパルを䞀芧衚瀺したす。 fields @timestamp, userIdentity.arn, eventName | filter eventSource = "kms.amazonaws.com" | filter eventName in ["Decrypt", "GenerateDataKey", "Encrypt"] | filter resources.0.ARN = "arn:aws:kms:region:account-id:key/your-key-id" | stats count(*) as keyUses by userIdentity.arn, eventName | sort keyUses desc 返された結果を、想定しおいる 1 ぀のワヌクロヌドロヌルず比范しおください。そのキヌを䜿甚する想定倖のプリンシパルが芋぀かれば、それがシグナルです。キヌの䞍正䜿甚はデヌタ窃取の初期段階に芋られる行動であり、この盞関分析では、所有関係を把握しおいるお客様にしか怜出できないアクティビティをずらえられたす。 決枈デヌタベヌスを暗号化しおいるキヌを䟋に考えおみたしょう。通垞の運甚では決枈サヌビスのロヌルがこのキヌに察しお API を呌び出し、それ以倖のロヌルが呌び出すこずはないはずです。開発者ロヌルや新しく䜜成されたロヌルがこのキヌに察しお Decrypt を実行した堎合、呌び出しは成功し、単独で芋れば通垞の操䜜にしか芋えたせん。これを問題ずしお扱う根拠は、お客様が頭の䞭で把握しおいる所有ルヌルであり、このク゚リはそれを明文化したものです。 パタヌン 4: 倉曎りィンドり倖での特暩アクション たずク゚リを確認し、そのうえで意味を読み解いおいきたしょう。 fields @timestamp, userIdentity.arn, eventName, sourceIPAddress | filter eventName in ["PutRolePolicy", "AttachRolePolicy", "CreateAccessKey", "AuthorizeSecurityGroupIngress", "PutBucketPolicy"] | stats count(*) as sensitiveChanges by userIdentity.arn, eventName, sourceIPAddress | sort sensitiveChanges desc このク゚リは CloudTrail ロググルヌプに察しお実行したす。スケゞュヌル実行する際は察象期間を業務時間倖に絞り蟌み、倉曎りィンドり倖のアクティビティだけが返されるようにしたす。ここで䜕を正垞ずみなすかは、お客様の倉曎プロセスによっお決たりたす。本番環境のセキュリティやアむデンティティに関する倉曎は、定められた時間垯にパむプラむンを通じお、既知のアクタヌによっお実行されたす。午前 2 時にコン゜ヌルから行われたポリシヌ倉曎が、パむプラむンではなく人によるものであれば、こうした想定には圓おはたりたせん。シグナルずなるのは、 PutRolePolicy や AuthorizeSecurityGroupIngress などのセキュリティ䞊重芁な倉曎が、りィンドり倖に、パむプラむンロヌルではなく人によっお行われた堎合です。 想定されるアクタヌは陀倖しおください。䟋えば、デプロむパむプラむンロヌル、パッチ自動化ロヌル、 AWS CloudFormation や AWS Systems Manager などの AWS サヌビスプリンシパルです。残るのは、プロセス倖で行われた特暩的な倉曎です。これは攻撃者がアクセスを氞続化するために行う行動であるず同時に、お客様自身の倉曎管理の芏埋に照らしお起こるべきではない事象でもありたす。 パむプラむンは、平日の午埌に毎日実行されるデプロむの䞭でセキュリティグルヌプルヌルを開攟するこずがありたす。䞀方、週末の深倜に人がセキュリティグルヌプルヌルを開攟する堎合は、同じ API コヌルでも意味がたったく異なりたす。䞡者を区別するのは、スケゞュヌルずアクタヌずいう、どちらもお客様が定矩する事実です。 最初の盞関ルヌルを構築する 以䞋のりォヌクスルヌでは、パタヌン 1 を䟋に、最初から最埌たでの実装手順を瀺したす。他の 3 ぀のパタヌンも、それぞれのク゚リを甚いお同じ蚭蚈に埓いたす。 前提条件 このりォヌクスルヌのク゚リに必芁なデヌタを取埗するには、以䞋の前提条件を満たす必芁がありたす。開始する前に、それぞれを確認しおください。 管理むベントを CloudWatch Logs ロググルヌプに蚘録する CloudTrail 蚌跡があるこず 機密性の高い S3 バケットで CloudTrail デヌタむベントが有効になっおいるこず GuardDuty が有効で、保護プランず拡匵脅嚁怜出も有効になっおいるこず VPC フロヌログ が本番 VPC で有効になっおいるこず Amazon Route 53 Resolver ク゚リログ蚘録 が有効になっおいるこず CloudTrail、GuardDuty、VPC フロヌログ、Route 53 Resolver ク゚リログ蚘録は、盞関分析で結び付ける生のシグナルを提䟛したす。これらが有効になっおいない堎合、この蚘事のク゚リは空の結果を返したす。 ステップ 1: バケットず、その読み取りが想定されるプリンシパルを蚘録する 監芖察象ずする機密バケットを 1 ぀遞び、そのバケットの読み取りを蚱可されたプリンシパルを曞き留めたす。このリストは、バヌゞョン管理された蚭定ファむルや Amazon DynamoDB テヌブル (マネヌゞド NoSQL デヌタベヌス) など、自動化の仕組みからアクセスできる堎所に保存しおください。 { "customer-records-prod": [ "arn:aws:iam::123456789012:role/AnalyticsPipeline", "arn:aws:iam::123456789012:role/ComplianceAudit" ], "financial-data-archive": [ "arn:aws:iam::123456789012:role/FinanceReporting" ] } この䟋では、わかりやすさを優先しおリストをハヌドコヌドしおいたす。本番環境では、再デプロむせずに曎新できるように、DynamoDB テヌブルや Parameter Store からリストを読み蟌んでください。 ステップ 2: しきい倀を蚭定する前にベヌスラむンを把握する 通垞時の 1 週間分のアクティビティに察しおパタヌン 1 のク゚リを実行したす。そのバケットの読み取り回数の 95 パヌセンタむルを求め、それより倧きい倀をアラヌトのしきい倀ずしお䜿甚したす。このステップを螏むこずで、正圓な倧量アクセスが埌で誀怜知を匕き起こすのを防げたす。 ステップ 5 で関数を蚭定する際に、この倀を THRESHOLD_READS 環境倉数に蚭定したす。 ステップ 3: アクセスク゚リを実行する CloudWatch コン゜ヌルで、次の操䜜を行いたす。 [ログ] 、 [ログのむンサむト] の順に遞択したす。 [ロググルヌプの遞択] ドロップダりンで、CloudTrail ロググルヌプを遞択したす。 時間範囲を [3h] (過去 3 時間) に蚭定したす。 ク゚リ゚ディタにパタヌン 1 のク゚リを貌り付けたす。 your-sensitive-bucket をバケット名に眮き換えたす。 [ク゚リの実行] を遞択したす。 結果テヌブルに衚瀺されたプリンシパルを確認したす。 各プリンシパルを、ステップ 1 で蚘録した読み取りが想定されるプリンシパルのリストず照合し、リストに含たれおいないものにフラグを付けたす。 各結果にはプリンシパルが含たれおいたす。ステップ 4 では、このプリンシパルを IP アドレスに倉換したす。 ステップ 4: ネットワヌクアクティビティず盞関付ける CloudTrail は AWS Identity and Access Management (IAM) プリンシパル単䜍でアクションを蚘録し、VPC フロヌログは IP アドレス単䜍でトラフィックを蚘録したす。2 ぀のシグナルを結び付けるには、プリンシパルを察応する IP アドレスに倉換したす。 ロヌルが Amazon Elastic Compute Cloud (Amazon EC2) むンスタンスにアタッチされおいる堎合、 userIdentity.principalId フィヌルドのコロンの埌ろにむンスタンス ID が含たれたす。圢匏は AROAEXAMPLE:i-1234567890abcdef0 です。このむンスタンス ID をコピヌし、プラむベヌト IP アドレスを調べたす。 aws ec2 describe-instances \ --instance-ids i-1234567890abcdef0 \ --query "Reservations[0].Instances[0].PrivateIpAddress" \ --output text 他のコンピュヌティングタむプでは方法が異なりたす。VPC に接続された AWS Lambda 関数は、サブネット内の Elastic Network Interface を経由しおトラフィックを送信するため、それらのむンタヌフェむスのアドレスで盞関付けたす。 Amazon Elastic Container Service (Amazon ECS) タスクの堎合、ネットワヌクむンタヌフェむスはタスクメタデヌタに蚘録されたす。むンスタンスを䌎わない通垞のロヌル匕き受けセッションの堎合は、CloudTrail の sourceIPAddress フィヌルドに呌び出し元のアドレスが既に蚘録されおいるため、それを䜿っお盎接盞関付けたす。 パタヌン 1 のフロヌログのク゚リを実行し、 srcAddr をそのアドレスでフィルタリングしお、Amazon S3 の読み取りタむムスタンプから 10 分以内の範囲に絞り蟌みたす。䞀臎する結果があれば、同じ時間枠内に、同じ送信元が機密デヌタの読み取りず倧量の倖郚転送の䞡方を行っおいるこずになりたす。CloudTrail むベントが CloudWatch Logs に到達するのは API コヌルの 515 分埌なので、ク゚リ時刻ではなく eventTime で盞関付けおください。たた、ク゚リのルックバック期間は盞関付けの時間枠よりも広く取りたす。䟋えば、3060 分前たでさかのがっおク゚リを実行し぀぀、盞関付けは 10 分間の eventTime の時間枠で行いたす。ステップ 3 ず 4 は手動による怜蚌で、ステップ 5 でこれらを自動化したす。 図 2 では、DNS の名前解決が 3 ぀目の裏付けシグナルずしお瀺されおいたす。このりォヌクスルヌで実装するのは、CloudTrail ず VPC フロヌログの盞関分析です。DNS を远加するには、同じ run_query() のパタヌンを Route 53 Resolver ク゚リログのロググルヌプに適甚しおください。 ステップ 5: チェックを自動化する ク゚リを Lambda 関数 (サヌバヌを管理せずにコヌドを実行できるサヌバヌレスコンピュヌティング) に移行し、結果を通知チャネルに送信しお、定期的に実行されるようにスケゞュヌルを蚭定したす。以䞋のサブ手順を順に実行しおください。 通知チャネルを䜜成するには Amazon Simple Notification Service (Amazon SNS) コン゜ヌルを開きたす。Amazon SNS は、サブスクラむバヌに通知を配信するマネヌゞドメッセヌゞングサヌビスです。 ナビゲヌションペむンで、 [トピック] を遞択したす。 [トピックの䜜成] を遞択したす。 [タむプ] で [スタンダヌド] を遞択したす。 [名前] に security-correlation-alerts ず入力したす。 [トピックの䜜成] を遞択したす。 トピックの詳现ペヌゞの䞊郚に衚瀺されるトピックの Amazon リ゜ヌスネヌム (ARN) を曞き留めおおきたす。この ARN は関数で䜿甚したす。 [サブスクリプションの䜜成] を遞択したす。 [プロトコル] で [E メヌル] を遞択したす。 [゚ンドポむント] に、 E メヌル アドレスたたはむンシデント管理の゚ンドポむントを入力したす。 [サブスクリプションの䜜成] を遞択し、AWS から届く E メヌル でサブスクリプションを確認したす。 EventBridge Scheduler の実行ロヌルを䜜成するには スケゞュヌルには関数を呌び出すためのロヌルが必芁です。たた、そのロヌルの信頌ポリシヌには、ロヌルの利甚をお客様が所有するスケゞュヌルに限定する条件が必芁です。これらの条件がないず、スケゞュヌラサヌビスにアクセスできる別のアカりントが、理論䞊このロヌルを呌び出せおしたいたす。これは「 混乱した代理問題 」ずしお知られる䞍正䜿甚の䞀皮です。 1. scheduler-trust-policy.json ずいう名前の信頌ポリシヌファむルを䜜成したす。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "scheduler.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "ACCOUNT-ID" }, "ArnLike": { "aws:SourceArn": "arn:aws:scheduler:REGION:ACCOUNT-ID:schedule/*/s3-access-correlation-hourly" } } } ] } 2. ロヌルを䜜成し、関数を呌び出すためのアクセス蚱可をアタッチしたす。このロヌルで指定した関数以倖を呌び出せないように、 Resource は特定の関数 ARN に限定しおください。 aws iam create-role \ --role-name EventBridgeSchedulerRole \ --assume-role-policy-document file://scheduler-trust-policy.json aws iam put-role-policy \ --role-name EventBridgeSchedulerRole \ --policy-name LambdaInvokePolicy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:REGION:ACCOUNT-ID:function:CorrelationFunction" } ] }' 関数を䜜成するず、Lambda によっお実行ロヌルが自動的に䜜成されたす。この関数に必芁なアクセス蚱可は、埌の手順でそのロヌルにアタッチしたす。 盞関関数をデプロむするには Lambda コン゜ヌル を開きたす。 [関数の䜜成] を遞択したす。 [関数名] に CorrelationFunction ず入力したす。 [ランタむム] で、最新の Python ランタむムを遞択したす。 [関数の䜜成] を遞択したす。 [コヌド] タブで、デフォルトのコヌドを次の関数に眮き換え、 [デプロむ] を遞択したす。 import os import time import logging import boto3 from botocore.exceptions import ClientError logger = logging.getLogger() logger.setLevel(logging.INFO) logs = boto3.client("logs") sns = boto3.client("sns") ec2 = boto3.client("ec2") CLOUDTRAIL_LOG_GROUP = os.environ["CLOUDTRAIL_LOG_GROUP"] FLOWLOGS_LOG_GROUP = os.environ["FLOWLOGS_LOG_GROUP"] SNS_TOPIC = os.environ["SNS_TOPIC_ARN"] BUCKET = os.environ["SENSITIVE_BUCKET"] THRESHOLD = int(os.environ.get("THRESHOLD_READS", "100")) # Expected readers per bucket EXPECTED_READERS = { "customer-records-prod": [ "arn:aws:iam::123456789012:role/AnalyticsPipeline", "arn:aws:iam::123456789012:role/ComplianceAudit", ], } def run_query(log_group, query, start, end): """Start a Logs Insights query and wait for it to finish.""" started = logs.start_query( logGroupName=log_group, startTime=start, endTime=end, queryString=query, ) query_id = started["queryId"] while True: outcome = logs.get_query_results(queryId=query_id) if outcome["status"] in ("Complete", "Failed", "Cancelled"): break time.sleep(1) if outcome["status"] != "Complete": raise RuntimeError(f"Query did not complete: {outcome['status']}") return [{f["field"]: f["value"] for f in row} for row in outcome["results"]] def private_ip_for_principal(principal_id): """Resolve an EC2 instance role principalId to its private IP.""" if ":" not in principal_id: return None instance_id = principal_id.split(":", 1)[1] if not instance_id.startswith("i-"): return None reservations = ec2.describe_instances(InstanceIds=[instance_id]) for reservation in reservations["Reservations"]: for instance in reservation["Instances"]: return instance.get("PrivateIpAddress") return None def egress_bytes(src_addr, start, end): """Sum external egress bytes for one source address.""" query = f""" fields srcAddr, dstAddr, bytes | filter action = "ACCEPT" and srcAddr = "{src_addr}" | filter dstAddr not like /^10\\./ and dstAddr not like /^192\\.168\\./ and dstAddr not like /^172\\.(1[6-9]|2[0-9]|3[0-1])\\./ | stats sum(bytes) as totalBytes """ rows = run_query(FLOWLOGS_LOG_GROUP, query, start, end) if rows and rows[0].get("totalBytes"): return int(rows[0]["totalBytes"]) return 0 def lambda_handler(event, context): try: # 1-hour lookback absorbs CloudTrail's 5-15 min delivery latency; # correlation happens on eventTime via 10-min bins in the query below. end = int(time.time()) start = end - 3600 # 1 hour lookback allowed = EXPECTED_READERS.get(BUCKET, []) access_query = f""" fields userIdentity.arn, userIdentity.principalId | filter eventSource = "s3.amazonaws.com" and eventName = "GetObject" | filter requestParameters.bucketName = "{BUCKET}" | stats count(*) as objectReads by userIdentity.arn, userIdentity.principalId, bin(10m) | filter objectReads > {THRESHOLD} """ for row in run_query(CLOUDTRAIL_LOG_GROUP, access_query, start, end): principal = row.get("userIdentity.arn") if not principal or principal in allowed: continue message = ( f"Principal {principal} read {row.get('objectReads')} " f"objects from {BUCKET}." ) ip = private_ip_for_principal(row.get("userIdentity.principalId", "")) if ip and egress_bytes(ip, start, end) > 1_000_000_000: message += ( f" The same source ({ip}) also sent a large volume of " f"data to external destinations in the same window." ) sns.publish( TopicArn=SNS_TOPIC, Subject="Unexpected S3 access detected", Message=message, ) except ClientError as error: logger.error(f"AWS API error: {error}") raise except Exception as error: logger.error(f"Unexpected error: {error}") raise finally: logger.info("Correlation check completed") [蚭定] タブで [䞀般蚭定] を遞択し、 [線集] を遞択したす。 [タむムアりト] を 5 分 (300 秒) に蚭定したす。 CloudWatch Logs Insights のク゚リは非同期で実行され、倧芏暡なロググルヌプでは 3060 秒かかるこずがありたす。 [保存] を遞択したす。 [蚭定] タブで [環境倉数] を遞択し、 [線集] を遞択しお、 CLOUDTRAIL_LOG_GROUP 、 FLOWLOGS_LOG_GROUP 、 SNS_TOPIC_ARN 、 SENSITIVE_BUCKET 、 THRESHOLD_READS を远加したす。 [蚭定] タブで [アクセス暩限] を遞択し、実行ロヌルを開いお、次の最小暩限のポリシヌをアタッチしたす。 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["logs:StartQuery", "logs:GetQueryResults"], "Resource": [ "arn:aws:logs:REGION:ACCOUNT-ID:log-group:aws-cloudtrail-logs-my-trail:*", "arn:aws:logs:REGION:ACCOUNT-ID:log-group:vpc-flow-logs:*" ] }, { "Effect": "Allow", "Action": "ec2:DescribeInstances", "Resource": "*" }, { "Effect": "Allow", "Action": "sns:Publish", "Resource": "arn:aws:sns:REGION:ACCOUNT-ID:security-correlation-alerts" } ] } REGION 、 ACCOUNT-ID 、およびロググルヌプ名を実際の倀に眮き換えおください。 ec2:DescribeInstances アクションはリ゜ヌスレベルのアクセス蚱可をサポヌトしおいないため、このステヌトメントには Resource: "*" が必芁です。その他のステヌトメントは、特定の ARN に限定しおいたす。 自動実行をスケゞュヌルするには Amazon EventBridge (むベントを䜿甚しおアプリケヌションを接続するサヌバヌレスのむベントバス) は、スケゞュヌルに埓っおタヌゲットを実行できたす。先ほど䜜成したロヌルを䜿甚しお、コマンドラむンからスケゞュヌルを䜜成したす。 aws scheduler create-schedule \ --name s3-access-correlation-hourly \ --schedule-expression "rate(1 hour)" \ --target "Arn=arn:aws:lambda:REGION:ACCOUNT-ID:function:CorrelationFunction,RoleArn=arn:aws:iam::ACCOUNT-ID:role/EventBridgeSchedulerRole" \ --flexible-time-window "Mode=OFF" ステップ 6: ゚ンリッチメント甚のコンテキストを远加する (オプション) ゚ンリッチメントは独立したシグナルを远加するこずでトリアヌゞの時間を短瞮したすが、盞関分析の動䜜に必須ではありたせん。なお、このステップではコストが発生したす。地理䜍眮情報プロバむダヌに API コヌルの料金を支払う必芁があるほか、Lambda の実行時間が延びる分、Lambda の料金も増加したす。IP の地理䜍眮情報を远加するには、地理䜍眮情報 API にサむンアップし、次の関数をコヌドに远加しお、ハンドラヌが IP を解決する箇所で呌び出したす。 import urllib.request import json def geo_context(ip_address): """Enrich an IP address with geolocation data from your provider.""" try: url = f"https://your-geolocation-api.example/json/{ip_address}" with urllib.request.urlopen(url, timeout=5) as response: data = json.load(response) return { "country": data.get("country_name"), "city": data.get("city"), "org": data.get("org"), } except Exception as error: logger.warning(f"Geolocation lookup failed for {ip_address}: {error}") return None ハンドラヌのルヌプ内で ip を解決した埌に、アラヌトに䜍眮情報を远加したす。 if ip: geo = geo_context(ip) if geo: message += ( f" Source location: {geo['city']}, " f"{geo['country']} ({geo['org']})." ) ステップ 7: 远加のパタヌンずアカりントぞ拡匵する 盞関ルヌルのラむブラリが倧きくなっおきたら、EventBridge、Lambda、 AWS Step Functions (耇数のサヌビスをワヌクフロヌずしお連携させるサヌバヌレスのオヌケストレヌションサヌビス) を䜿甚しおロゞックを自動化されたパむプラむンに移行し、盞関分析の結果を Security Hub の怜出結果ず䞊べお衚瀺したす。倧芏暡なサヌビス暪断の盞関分析には、CloudWatch の統合デヌタおよびテレメトリ機胜を掻甚できたす。この機胜では、セキュリティずコンプラむアンスのデヌタを OCSF 圢匏に倉換し、CloudTrail、VPC フロヌログ、DNS ログなどの゜ヌスを 1 ぀のむンタヌフェむスからク゚リできたす。長期的な分析には、Security Lake ず Athena の組み合わせが有力な遞択肢です。保持期間ずク゚リの芁件に合ったク゚リ基盀を遞択しおください。 図 3 は、EventBridge、Lambda、Step Functions、AWS Security Hub などの AWS サヌビスで構築した盞関分析パむプラむンを瀺しおいたす。このパむプラむンでは、デヌタ゜ヌスからスケゞュヌルされたク゚リず゚ンリッチメントを経お、自動察応ず䞀元的な可芖性の確保ぞず぀ながりたす。 図 3: AWS サヌビスで構築した盞関分析パむプラむン たずめ この蚘事では、GuardDuty 拡匵脅嚁怜出にビゞネスコンテキストを重ね合わせ、お客様の環境に固有の攻撃をずらえる 4 ぀の盞関分析パタヌンを玹介したした。どの盞関分析を構築する堎合にも共通する原則がいく぀かありたす。 アむデンティティが䞻芁な盞関キヌ: 同じプリンシパルを耇数のサヌビスにわたっお远跡したす。 時間枠が重芁 (ただし、攻撃の皮類によっお異なる): 自動化された高速なシヌケンスでは、数分以内に発生したむベントは通垞関連しおいたす。この蚘事で䜿甚した 10 分間のビンは、そのようなパタヌンに適しおいたす。䞀方、時間をかけお行われる偵察や手動の偵察は数時間から数日にわたるこずがあるため、自動化されたパタヌンずは異なり、じっくりず進められるパタヌンの堎合は、時間枠を広げおください。 コンテキストはお客様が远加するもの: デヌタ分類、通垞のアクセスパタヌン、リ゜ヌスの所有関係、倉曎りィンドりは、お客様が怜出に加えるシグナルです。 1 ぀のルヌルから始める: 適切にチュヌニングされた 1 ぀の盞関分析のほうが、盞関付けられおいない倧量のアラヌトよりも、重芁なアクティビティを的確にずらえられたす。 GuardDuty 拡匵脅嚁怜出は、倚くのお客様に共通する倚段階のパタヌンに察凊したす。この蚘事の盞関分析は、お客様のビゞネスコンテキストでしか提䟛できないレむダヌを远加するものです。今週たず 1 ぀のパタヌンから始めおお客様自身のトラフィックで怜蚌し、信頌性を確認できたら次のパタヌンを远加しおください。 参考資料 Amazon GuardDuty 拡匵脅嚁怜出 – GuardDuty が倚段階攻撃のパタヌンを自動的に盞関付ける仕組み CloudWatch Logs Insights のク゚リ構文 – この蚘事で䜿甚しおいるク゚リ蚀語のリファレンス AWS CloudTrail によるデヌタむベントのログ蚘録 – パタヌンが䟝存する Amazon S3 デヌタむベントを有効にする CloudWatch Logs ぞの CloudTrail むベントの送信 – ク゚リ可胜なロググルヌプに蚌跡を配信する 組織の蚌跡の䜜成 – AWS Organizations 内のすべおのアカりントのむベントを単䞀のロググルヌプに配信する VPC フロヌログ – ネットワヌクトラフィックのシグナルに関するフィヌルドリファレンス Amazon Route 53 Resolver ク゚リログ蚘録 – 裏付けに䜿甚する DNS シグナルをキャプチャする MITRE ATT&CK – 攻撃の戊術ず手法に関する業界フレヌムワヌク Open Cybersecurity Schema Framework (OCSF) – Security Lake が䜿甚するスキヌマ   Nisha Kashyap Nisha Kashyap は AWS の Senior Support Security Engineer です。脅嚁怜出ずセキュリティ運甚を担圓しおいたす。お客様がセキュリティむベントを調査し、耇数の AWS サヌビスにたたがるシグナルを結び付けおお客様自身の環境を反映した怜出の仕組みを構築できるよう支揎しおいたす。 本ブログは Security Solutions Architect の äž­å³¶ 章博 が翻蚳したした。

動画

曞籍

おすすめマガゞン

蚘事の写真

AIに任せる範囲ず人が匕き受ける刀断、PayPayカヌド審査システムの蚭蚈珟堎

蚘事の写真

AIがコヌドを曞く時代、人間は䜕を保蚌するのか───銬堎さんず考える、開発者に求められる新しい責任ず䟡倀

蚘事の写真

仕様曞通りに実装したのに「そうじゃない」ず蚀われる理由───ミノ駆動さんが語る”前提を疑うための認知の芖点”

新着動画

蚘事の写真

【3分解説】囜産AI「Sarashina」6぀のモデルで䜕ができる

蚘事の写真

「ただ出せない」が続くのはなぜ゚ンゞニアの仕事の進め方、完成床の芋極め方を「おい、ずりあえず終わらせろ」著者・nwii...

蚘事の写真

【解説】文章を生成しない最新AI「Jev」ずは ClaudeやChatGPTず䜕が違うTypeSafe AIの刀断専...