コンテンツにスキップ
Dev Classmethod Jp Articles Aws Deadline Cloud Cmf Private Vpc Sts Endpoint

閉域 VPC の AWS Deadline Cloud CMF Worker では STS の VPC エンドポイントが要る話

  • URL: https://dev.classmethod.jp/articles/aws-deadline-cloud-cmf-private-vpc-sts-endpoint
  • 日付: 2026-06-22
  • Tier: Tier 2
  • 要旨: AWS Deadline Cloud CMF を閉域 VPC(インターネット出口なし)で運用時、Worker Agent 本体は IDLE だがジョブ実行でエラー「STS endpoint timeout」。Worker Agent 本体は STS を呼ばず(deadline の AssumeFleetRoleForWorker で credential 取得)だが、job attachments の入力同期時に S3 GetObject の ExpectedBucketOwner 用アカウント ID を要求・credential に AccountId フィールドがないため botocore がフォールバックで sts.get_caller_identity() 呼び出し。閉域 VPC に STS エンドポイントがないためタイムアウト。対処は STS インターフェイス VPC エンドポイント(com.amazonaws.region.sts)を VPC に追加。

詳細

AWS Deadline Cloud CMF を閉域 VPC(インターネットゲートウェイ・NAT なし、AWS API はインターフェイス VPC エンドポイント PrivateLink 経由のみ)で運用時の問題。症状:Worker Agent は Fleet に IDLE で追加される(正常に見える)が、ジョブ実行時に入力ファイル同期で「Connect timeout on endpoint URL: https://sts.ap-northeast-1.amazonaws.com/」でタスク FAILED。原因の多層構造:(1) Worker Agent 本体は STS を呼ばない設計 ─ 起動時に deadline API AssumeFleetRoleForWorker で fleet worker role の一時 credential を deadline エンドポイント経由で受け取る。sts:AssumeRole を直接呼ばず、STS エンドポイント不要。ログは「[deadline:AssumeFleetRoleForWorker] (200) accessKeyId=ASIA…」。(2) job attachments(シーンファイル等入力を S3 経由で Worker 同期)は別経路で STS 呼び出し ─ S3 GetObject 時に ExpectedBucketOwner ヘッダのため AWS アカウント ID 必要。Worker Agent credential ファイルは Version/AccessKeyId/SecretAccessKey/SessionToken/Expiration 5 フィールドで AccountId を含まない。プロファイル設定にも aws_account_id がない。botocore がアカウント ID を None と判定し最終手段で sts.get_caller_identity() を呼び出し。連鎖フロー:job attachments が S3 GetObject の ExpectedBucketOwner 用にアカウント ID 要求 → credential/profile に AccountId なし → botocore が None 判定 → sts.get_caller_identity() フォールバック → 閉域 VPC に STS エンドポイントなし → TCP 接続タイムアウト → job attachments 例外捕捉し入力ダウンロード失敗 → タスク FAILED。対処:STS インターフェイス VPC エンドポイント(com.amazonaws..sts)を VPC 追加。これでフォールバック get_caller_identity() が VPC 内で解決。月額数ドル程度で最も素直。代替案:job attachments 経由でなく AMI 焼き込み・S3 直接ダウンロードで syncInputJobAttachments 自体をスキップ・プロファイルに aws_account_id 記載(ライブラリ挙動に踏み込むため非推奨)。