Amazon Web Services ブログ

VPC 内のプライベートサービスに AWS DevOps Agent をセキュアに接続する方法

AWS DevOps Agent は、24時間365日稼働する運用チームメンバーです。インシデントの解決・予防、アプリケーションの信頼性やパフォーマンスの最適化、オンデマンドの SRE タスクなどを、AWS・マルチクラウド・オンプレミスを問わず担います。既存のオブザーバビリティツールと連携してテレメトリ・コード・デプロイデータを横断的に分析し、平均修復時間(MTTR)の短縮とオペレーショナルエクセレンスの実現を支援します。

多くの組織では、カスタムの Model Context Protocol(MCP) ツールや各種インテグレーションで AWS DevOps Agent を拡張し、プライベートパッケージレジストリ、セルフホスト型オブザーバビリティ基盤、社内ドキュメント API、GitHub Enterprise や GitLab といったソース管理システムなど、内部リソースへのアクセスを実現しています。しかし、こうしたサービスの多くはパブリックインターネットに接続していない Amazon Virtual Private Cloud(Amazon VPC) 内で稼働しており、そのままでは AWS DevOps Agent からアクセスできません。

AWS DevOps Agent のプライベート接続を使えば、Agent Space と VPC 内(または社内ネットワーク内)のサービスを、パブリックインターネットに公開せずセキュアにつなげられます。MCP サーバー、セルフホスト型の Grafana や Splunk、ソース管理システムなど、プライベートエンドポイントへのアクセスが必要なあらゆるインテグレーションに対応しています。

本記事では、プライベート接続の仕組みとセキュリティ上の特徴を解説したうえで、AWS マネジメントコンソールAWS CLI を使ったセットアップ手順を紹介します。

プライベート接続の仕組み

プライベート接続は、AWS DevOps Agent と VPC 内の対象リソースの間にセキュアなネットワーク経路を確立する機能です。内部では Amazon VPC Lattice を利用しています。VPC Lattice は、VPC・アカウント・コンピュートタイプをまたいだアプリケーション間通信を、ネットワークインフラの管理なしに接続・保護・監視できるサービスです。

プライベート接続を作成すると、次の処理が行われます。

  1. 対象サービスと通信できる VPC、サブネット、および必要に応じてセキュリティグループを指定する。
  2. AWS DevOps Agent がサービスマネージドのリソースゲートウェイを作成し、指定サブネットに Elastic Network Interface(ENI)を配置する。
  3. リソースゲートウェイ経由で、対象サービスの IP アドレスまたは DNS 名へプライベートにトラフィックを転送する。

リソースゲートウェイは AWS DevOps Agent が完全に管理しており、アカウント上では読み取り専用リソースとして表示されます。利用者側での設定やメンテナンスは不要です。VPC 内に作成されるのは、指定サブネット内の ENI だけです。ENI はプライベートトラフィックの入口として機能し、インターネットからのインバウンド接続は受け付けません。トラフィック制御は、利用者自身のセキュリティグループで行えます。

セキュリティ

プライベート接続には、複数のセキュリティレイヤーが組み込まれています。

  • パブリックインターネットへの公開なし — AWS DevOps Agent と対象サービス間の通信はすべて AWS ネットワーク内で完結します。パブリック IP やインターネットゲートウェイは不要です。
  • サービス制御のリソースゲートウェイ — リソースゲートウェイはアカウント内で読み取り専用であり、AWS DevOps Agent だけが利用できます。他のサービスやプリンシパルがトラフィックを送信することはできません。AWS CloudTrail ログにすべての VPC Lattice API 呼び出しが記録されるため、監査も容易です。
  • セキュリティグループによる制御 — ENI のアウトバウンドトラフィックは、利用者が所有・管理するセキュリティグループで制御します。DevOps Agent からの通信は、リソースゲートウェイ ENI に関連付けたセキュリティグループのアウトバウンドルールと、対象サービス側のインバウンドルールの両方に従います。
  • 最小権限のサービスにリンクされたロール — AWS DevOps Agent はサービスにリンクされたロールでリソースゲートウェイを管理します。このロールの操作対象は AWSAIDevOpsManaged タグが付いたリソースに限定されており、アカウント内の他のリソースには影響しません。
  • DNS サポート — サービスを DNS 名で参照できます。なお、DNS 名はパブリックに名前解決できる必要があります。

リソース設定を独自に管理する場合は、サービスコントロールポリシー(SCP)で VPC Lattice のアクションが許可されていることを確認してください。

アーキテクチャ

次の図は、プライベート接続のネットワーク経路を示しています。

Figure 1: AWS DevOps Agent プライベート接続

  1. AWS DevOps Agent が対象サービスへリクエストを送信する。
  2. リクエストはサービスマネージドのリソースゲートウェイを経由する。
  3. VPC 内の ENI がトラフィックを受け取り、対象サービスの IP アドレスまたは DNS 名へ転送する。
  4. セキュリティグループが ENI を通過するトラフィックを制御する。
  5. 対象サービスから見ると、リクエストの送信元は VPC 内の ENI のプライベート IP アドレスになる。

前提条件

プライベート接続を作成する前に、以下の準備が整っていることを確認してください。

  • アクティブな Agent Space — アカウントに Agent Space が必要です。まだ作成していない場合は、AWS DevOps Agent の開始方法を参照してください。
  • プライベートに到達可能な対象サービス — MCP サーバーやオブザーバビリティ基盤などの対象サービスに、リソースゲートウェイをデプロイする VPC からプライベート IP アドレスまたは DNS 名で接続できる必要があります。同一 VPC、ピアリング先の VPC、オンプレミスのいずれでも構いませんが、リソースゲートウェイのサブネットからルーティングできることが条件です。対象サービスは、接続作成時に指定する TCP ポートでリッスンしている必要があります。
  • VPC 内のサブネット — リソースゲートウェイ ENI を配置するアベイラビリティーゾーンごとに 1 つのサブネットを選びます。高可用性を確保するため、複数のアベイラビリティーゾーンにまたがるサブネットの選択を推奨します。各サブネットから対象サービスへ通信できることが前提です。
  • (オプション)セキュリティグループ — 特定のルールでトラフィックを制御したい場合は、ENI にアタッチするセキュリティグループ ID を最大 5 つ用意します。省略した場合は、VPC のデフォルトセキュリティグループが適用されます。

プライベート接続はアカウントレベルのリソースです。一度作成すれば、同じホストにアクセスする複数のインテグレーションや Agent Space で使い回せます。

プライベート接続の作成

AWS マネジメントコンソールまたは AWS CLI で作成できます。

AWS コンソールの場合

ステップ 1: AWS DevOps Agent コンソールを開き、ナビゲーションペインで Capability providers を選択します。

Figure 2: DevOps Agent Capability Providers

ステップ 2: Private connections を選択します。

Figure 3: DevOps Agent プライベート接続

ステップ 3: Create a new connection を選択します。

Figure 4: DevOps Agent – 新しい接続の作成

ステップ 4: プライベート接続の各項目を設定します。

接続の詳細:

  • Name — わかりやすい接続名を入力

リソースの場所:

  • VPC where your resource is located — 対象リソースが配置されている VPC、またはアクセス可能な VPC を選択
  • Subnets — マネージドリソースゲートウェイ ENI を配置するサブネット(アベイラビリティーゾーンごとに 1 つ)
  • IP address type — IPv4、IPv6、またはデュアルスタック

Figure 5: DevOps Agent – プライベート接続の設定

アクセス制御:

  • Security groups — DevOps Agent がプライベートリソースへアクセスする際に使うセキュリティグループを選択
  • (オプション)TCP port ranges — 接続に使用するポート範囲を制限(未指定の場合は全ポート許可)

サービスターゲットの詳細:

  • Host address — 対象リソースの DNS 名または IP アドレス。選択した VPC から到達できる必要があります。DNS 名の場合はパブリックに名前解決できることが条件です。
  • (オプション)Certificate public key — 対象サービスへのセキュア接続に使う証明書の公開鍵

Figure 6: DevOps Agent – プライベート接続の設定(続き)

Create Connection を選択します。

ステータスが Create in progress に変わり、最大 10 分ほどで完了します。Completed になればネットワーク経路の準備は完了です。

Figure 7: プライベート接続の作成成功

Create failed になった場合は、以下を確認してください。

  • 指定サブネットに空き IP アドレスがあるか
  • VPC Lattice のサービスクォータに達していないか
  • サービスにリンクされたロールのリソース作成を妨げる IAM ポリシーがないか

AWS CLI の場合

以下のコマンドでプライベート接続を作成します。各値は環境に合わせて置き換えてください。

aws devops-agent create-private-connection \
    --name my-test-private-connection \
    --mode '{
        "serviceManaged": {
            "hostAddress": "mymcpserver.test.skipv5.net",
            "resourceGatewayConfig": {
                "create": {
                    "vpcId": "vpc-00ef99bef2632b9ac",
                    "subnetIds": [
                        "subnet-034f636837473de13",
                        "subnet-00bdfb9edf7cc1ca7"
                    ],
                    "securityGroupIds": [
                        "sg-082788aaec0517905"
                    ]
                }
            }
        }
    }'

レスポンス例:

{
    "name": "my-test-private-connection",
    "status": "CREATE_IN_PROGRESS",
    "resourceGatewayId": "rgw-0f7415325b107a945",
    "hostAddress": "mymcpserver.test.skipv5.net",
    "vpcId": "vpc-00ef99bef2632b9ac"
}

ステータスを確認するには describe-private-connection を使います。

aws devops-agent describe-private-connection \ 
--name my-test-private-connection 

Completed になれば利用可能です。

接続の確認

プライベート接続が Completed になったら、実際に対象サービスへ到達できるか確認しましょう。

  1. AWS DevOps Agent コンソールで Agent Space を開く。
  2. 新しいチャットセッションを開始する。
  3. プライベート接続を利用するインテグレーション経由でコマンドを実行する。たとえば、MCP ツールが社内ナレッジベースに接続している場合、そのナレッジベースの情報が必要な質問をエージェントにしてみる。
  4. エージェントがプライベートサービスの情報を返すことを確認する。

うまくいかない場合は、以下を点検してください。

  • セキュリティグループルール — ENI にアタッチしたセキュリティグループが、対象サービスのリッスンポートへのアウトバウンドを許可しているか。また、対象サービス側のセキュリティグループが ENI からのインバウンドを許可しているか。
  • サブネットの疎通性 — 選択したサブネットから対象サービスへルーティングできるか。別サブネットで稼働している場合は、ルートテーブルの設定も確認する。
  • サービスの稼働状況 — 対象サービスが起動しており、想定ポートで接続を受け付けているか。

例: セルフホスト型 Grafana インスタンスへの接続

プライベート接続のよくあるユースケースが、セルフホスト型 Grafana への接続です。メトリクス・ログ・トレースの可視化のために、パブリックエンドポイントを持たない VPC 内で Grafana を運用しているチームも多いでしょう。組み込みの Grafana インテグレーションとプライベート接続を組み合わせれば、ダッシュボードやアラート、データソースへの読み取り専用アクセスをエージェントに付与できます。オンコールエンジニアがインシデント対応で頼りにしているのと同じオブザーバビリティデータを、エージェントも活用できるようになります。

AWS DevOps Agent には、公式オープンソースの Grafana MCP サーバーをホストする専用 Grafana インテグレーションが用意されています。MCP サーバーのインフラを自前で構築・運用する必要はありません。Grafana Cloud、Grafana Enterprise、セルフホスト型 Grafana OSS(v9.1 以降)に対応しています。

パブリックにアクセスできないセルフホスト型インスタンスの場合は、Grafana インテグレーションにプライベート接続を組み合わせることで、プライベートネットワーク経由のアクセスが可能になります。

ステップ 1: Grafana サービスアカウントを作成する

Grafana インスタンスで Viewer ロールのサービスアカウントを作成します。これにより、ダッシュボード・アラートルール・データソースへの読み取り専用アクセスが付与されます。アクセストークンを生成し、次のステップ用に控えておいてください。

ステップ 2: Grafana インスタンスへのプライベート接続を作成する

Grafana インスタンスはプライベートサブネットで稼働しているため、まずプライベート接続を作成します。

AWS コンソールの場合:

本記事の「プライベート接続の作成」セクションの手順に沿い、Grafana インスタンスのアドレスをホストアドレスに指定します。

AWS CLI の場合:

aws devops-agent create-private-connection \
    --name grafana-connection \
    --mode '{
        "serviceManaged": {
            "hostAddress": "grafana.internal.example.com",
            "resourceGatewayConfig": {
                "create": {
                    "vpcId": "vpc-0123456789abcdef0",
                    "subnetIds": [
                        "subnet-0123456789abcdef0",
                        "subnet-0123456789abcdef1"
                    ],
                    "portRanges": ["443"]
                }
            }
        }
    }'

ステータスが Completed になってから次へ進みます。

ステップ 3: Agent Space に Grafana インテグレーションを追加する

Grafana サービスを登録し、Agent Space に関連付けます。

AWS コンソールの場合:

  1. AWS DevOps Agent コンソールで Agent Space を開く。
  2. Integrations セクションの Add integration を選択する。
  3. Grafana タイルを選択する。
  4. Grafana インスタンスの URL(例: https://grafana.internal.example.com)を入力する。
  5. ステップ 1 で生成したアクセストークンを貼り付ける。
  6. Save を選択する。

AWS CLI の場合:

まず、Grafana サービスを登録します。

aws devops-agent register-service \
    --service mcpservergrafana \
    --private-connection-name grafana-connection \
    --service-details '{
        "mcpservergrafana": {
            "name": "grafana",
            "endpoint": "https://grafana.internal.example.com",
            "authorizationConfig": {
                "bearerToken": {
                    "tokenName": "grafana-sa-token",
                    "tokenValue": "<SERVICE_ACCOUNT_TOKEN>"
                }
            }
        }
    }' \
    --region us-east-1

返却された serviceId を控え、Agent Space に関連付けます。

aws devops-agent associate-service \
    --agent-space-id <AGENT_SPACE_ID> \
    --service-id <SERVICE_ID> \
    --configuration '{
        "mcpservergrafana": {
            "endpoint": "https://grafana.internal.example.com"
        }
    }' \
    --region us-east-1

レスポンスには、ステップ 4 のアラート通知設定に使える Webhook 情報が含まれます。エージェントは、ステップ 2 で作成したプライベート接続を通じ、ホストアドレスの一致をもとに Grafana インスタンスへトラフィックを転送します。

動作を確認するには、Agent Space のチャットで「最近の Grafana アラートをまとめて」と尋ねてみてください。ダッシュボードのアラートデータが返ってくれば、プライベート接続と Grafana インテグレーションの両方が正しく機能しています。

ステップ 4: Grafana Webhook 通知を有効にする(オプション)

Grafana のアラート発火時に AWS DevOps Agent が自動で調査を開始できるようにするには、Grafana インスタンスに Webhook コンタクトポイントを設定します。Webhook の送信先を Agent Space の Webhook URL に指定し、インテグレーション設定の認証シークレットを設定してください。アラートが発火すると Grafana からエージェントに通知が届き、Agent Space 内の他のリソースと合わせて Grafana のデータを使った調査が自動的に始まります。

Grafana インテグレーションの詳細や、AWS Managed Grafana(AMG) との連携方法については、AWS DevOps Agent Grafana インテグレーションのドキュメントを参照してください。

DNS 解決とホストルーティングの仕組み

プライベート接続の作成時に指定するホストアドレス(例: my-alb.us-east-1.elb.amazonaws.com)は、VPC Lattice が対象へのトラフィック転送先を決めるために名前解決する DNS 名です。プライベート IP に解決される場合でも、パブリックに名前解決できる必要があります。

一方、サービスインテグレーション登録時に指定するエンドポイント URL(例: https://my-grafana.internal.corp)は、TLS 接続の Host ヘッダーと SNI(Server Name Indication)に使われるもので、DNS 解決には使われません。

この仕組みにより、同じプライベート接続(たとえば同一の ALB)に対して、異なるエンドポイントホスト名を持つ複数のサービスインテグレーションを関連付けられます。ALB 側ではホストベースのルーティングルールを使い、リクエストを適切なターゲットグループに振り分けることが可能です。

具体的には、ALB の DNS 名をホストアドレスとする単一のプライベート接続を作成し、Grafana 用と MCP サーバー用のインテグレーションをそれぞれ別のエンドポイント URL で登録します。ALB は同じプライベート接続経由で両方のリクエストを受け取り、Host ヘッダーに基づいて正しいバックエンドへ振り分けます。

既存の VPC Lattice リソースを使った高度なセットアップ

すでに Amazon VPC Lattice を導入済みで、リソース設定を独自に管理している組織では、セルフマネージドモードでプライベート接続を作成できます。AWS DevOps Agent にリソースゲートウェイを作成させる代わりに、対象サービスを指す既存リソース設定の ARN を指定します。

このアプローチが適しているのは、次のようなケースです。

  • リソースゲートウェイとリソース設定のライフサイクルを自分で管理したい
  • 複数の AWS アカウントやサービス間でリソース設定を共有したい
  • VPC Lattice のアクセスログで詳細なトラフィック監視を行いたい
  • ハブアンドスポーク型のネットワークアーキテクチャを採用している
  • リソースやサービスへのアクセスにゼロトラストのきめ細かな制御が必要

AWS コンソールでは、Create a new connection から Use existing resource configuration を選び(下図参照)、ドロップダウンで既存のリソース設定を指定します。

Figure 8: 既存の VPC Lattice リソースを使った高度な設定

AWS CLI の場合:

aws devops-agent create-private-connection \
    --name my-advanced-connection \
    --mode '{
        "selfManaged": {
            "resourceConfigurationId": "rcfg-0123456789abcdef0"
        }
    }'

VPC Lattice のリソースゲートウェイやリソース設定の詳細は、Amazon VPC Lattice ユーザーガイドを参照してください。

クリーンアップ

使わなくなったプライベート接続は削除して、不要な課金を防ぎましょう。

AWS コンソールの場合:

  1. AWS DevOps Agent コンソールを開く。
  2. ナビゲーションペインで Capability providersPrivate connections を選択する。
  3. 削除したいプライベート接続を選ぶ。
  4. Delete を選択する。
  5. 削除を確定する。

AWS CLI の場合:

aws devops-agent delete-private-connection \
    --name my-test-private-connection

ステータスが DELETE_IN_PROGRESS になり、マネージドリソースゲートウェイと ENI が VPC から削除されます。完了後、該当の接続は一覧に表示されなくなります。

まとめ

AWS DevOps Agent のプライベート接続は、Agent Space と VPC 内のサービスをセキュアかつマネージドに接続する仕組みです。Amazon VPC Lattice を活用し、すべての通信をパブリックインターネットから隔離しながら、既存のセキュリティ制御をそのまま維持できます。ネットワークアクセスの制御は、利用者自身のセキュリティグループに委ねられています。

さっそく AWS DevOps Agent コンソールを開いて、最初のプライベート接続を作成してみてください。詳しくは、AWS DevOps Agent ユーザーガイドのプライベート接続をご覧ください。

著者について

Alex Huides

Alexandra Huides

AWS ネットワーキングサービスプロダクトチームのプリンシパルネットワーキングスペシャリスト SA。スケーラブルでレジリエントな AWS 環境のネットワーク設計を支援。AWS のパブリックスピーカーとして IPv6 導入の推進にも取り組む。趣味はセーリング(特にカタマラン)、旅行、ランニング、読書。

Tipu Qureshi

Tipu Qureshi

AWS Agentic AI のシニアプリンシパルテクノロジスト。運用の卓越性とインシデント対応自動化が専門。レジリエントで観測性の高いクラウドアプリケーションと自律運用システムの設計を支援。

Jordan Merrick

Jordan Merrick

AWS Agentic AI のシニアソフトウェアエンジニア。オブザーバビリティとアイデンティティ領域を担当し、セキュアでスケーラブルなエージェントシステムを構築。

Mohak Kohli

Mohak Kohli

Amazon Web Services のソフトウェア開発エンジニア。VPC Lattice と PrivateLink を中心に幅広い領域で開発に従事。

本ブログは 2026 年 4 月 1 日に公開された Securely connect AWS DevOps Agent to private services in your VPCs の日本語訳です。翻訳はソリューションアーキテクトの堀が行いました。