ユーザーは、デバイスに RDP クライアントや Cloudflare One Client をインストールせずに、RDP サーバーへ接続できます。ブラウザーベースの RDP は Cloudflare Tunnel を使い、RDP サーバーから Cloudflare のグローバルネットワークへ、送信専用の安全な接続を作ります。セットアップでは、RDP サーバー(またはプライベートネットワーク内の別ホスト)で cloudflared デーモンを動かし、公開ホスト名経由で RDP トラフィックをルーティングします。
ユーザーが ブラウザーから RDP サーバーに到達する 方法は 2 つあります。
- App Launcher(推奨): ユーザーは Cloudflare Access の認証情報で Access App Launcher にログインし、ブラウザー内から Windows マシンへの RDP 接続を開始できます。Windows マシンへの認証には、あらかじめ設定した Windows のユーザー名とパスワードを使います。Cloudflare は Windows サーバー上の認証情報を管理しません。
- 直接 URL: ユーザーは
https://<app-domain>/rdp/<vnet-id>/<target-ip>/<port>で Windows サーバーへ直接移動することもできます。vnet-idは Cloudflare Tunnel ルートに割り当てた 仮想ネットワーク です。認証の流れは App Launcher と同じです。先に Cloudflare Access にログインし、次に Windows の認証情報で Windows マシンに認証します。
ブラウザーベースの RDP は Cloudflare One Client と併用でき、サーバーへの接続方法を複数用意できます。各接続方法の設定では、同じ Cloudflare Tunnel を再利用できます。
- Cloudflare 上の有効なドメイン。
- ドメインが フルセットアップ または 部分(
CNAME)セットアップ であること。 - 対応する Windows オペレーティングシステム で動いている RDP サーバー。
- RDP サーバーの セキュリティレイヤー が TLS を許可していること(Negotiate または SSL。レガシーの RDP オプションは不可)。
-
Cloudflare ダッシュボードで Networking > Tunnels を開きます。
Tunnels を開く ↗ -
新しいトンネルを作成する か、既存の
cloudflaredトンネルを編集します。
-
Cloudflare ダッシュボードで Networking > Routes を開きます。
Routes を開く ↗ -
Create route > Tunnel CIDR を選択します。作成したトンネルを選び、サーバーの IP または CIDR アドレスを入力します(通常はプライベート IP ですが、パブリック IP も使えます)。Create route を選択します。
target は、ユーザーが Cloudflare 経由で接続するインフラ内の単一リソース(サーバー、Kubernetes クラスター、データベース、コンテナなど)を表します。
RDP アクセスが必要な Windows マシンごとに target を作成します。 新しい target を作成する手順は次のとおりです。
- Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Targets を開きます。
- Add a target を選択します。
- Target hostname に、target のわかりやすい名前を入力します。サーバーのホスト名(例:
production-server)の使用を推奨します。target のホスト名は一意である必要はなく、複数の target で再利用できます。ホスト名は Access アプリケーションが保護する target を定義するために使い、DNS の名前解決には使いません。ホスト名の形式制限
- 大文字小文字を区別しない
- 253 文字以内
- 英数字、
-、.のみ(スペース不可) - 先頭と末尾は英数字
- IP addresses に、対象リソースの IPv4 または IPv6 アドレスを入力します。ドロップダウンは、完全な IP アドレスを入力するまで表示されません。
- ドロップダウンで、リソースがある IP アドレスと 仮想ネットワーク を選びます。この IP アドレスと仮想ネットワークの組み合わせは、この target に割り当てられ、設計上ほかの target では再利用できません。
- Add target を選択します。
Infrastructure Access Targets エンドポイントへ POST リクエストを送ります。
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/infrastructure/targets" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"hostname": "infra-access-target",
"ip": {
"ipv4": {
"ip_addr": "187.26.29.249",
"virtual_network_id": "c77b744e-acc8-428f-9257-6878c046ed55"
},
"ipv6": {
"ip_addr": "64c0:64e8:f0b4:8dbf:7104:72b0:ec8f:f5e0",
"virtual_network_id": "c77b744e-acc8-428f-9257-6878c046ed55"
}
}
}'-
cloudflare_api_token↗ に次の権限を追加します。Zero Trust Write
-
cloudflare_zero_trust_infrastructure_access_target↗ リソースを設定します。resource "cloudflare_zero_trust_infrastructure_access_target" "infra-ssh-target" { account_id = var.cloudflare_account_id hostname = "infra-access-target" ip = { ipv4 = { ip_addr = "187.26.29.249" virtual_network_id = "c77b744e-acc8-428f-9257-6878c046ed55" } ipv6 = { ip_addr = "64c0:64e8:f0b4:8dbf:7104:72b0:ec8f:f5e0" virtual_network_id = "c77b744e-acc8-428f-9257-6878c046ed55" } } }
次に、target を保護する Access アプリケーションを作成します。
ブラウザーから RDP の target(つまり Windows マシン)を使えるようにするには、ユーザーが接続するドメインとサブドメインの Cloudflare DNS レコード が必要です。このドメインは、Access アプリケーション経由でユーザーが利用できる任意の target へのアクセスに使います(手順 4 を参照)。
たとえば、ユーザーを rdp.example.com 上の target に接続したい場合は、rdp.example.com の DNS レコードを作成 します。A、AAAA、CNAME のいずれかを作成できます。
A レコード
次の DNS レコードは、公開サブドメイン(rdp)を Class E アドレス空間 ↗ の IPv4 アドレスへ向けます。
- Type: A
- Name:
rdp - IPv4 address:
240.0.0.0 - Proxy status: On
AAAA レコード
次の DNS レコードは、公開サブドメイン(rdp)を IPv6 の 破棄アドレス範囲 ↗ へ向けます。
- Type: AAAA
- Name:
rdp - IPv6 address:
100:: - Proxy status: On
CNAME レコード
次の CNAME レコードは、公開サブドメイン(rdp)を完全修飾ドメイン名へ向けます。
- Type: CNAME
- Name:
rdp - Target:
www.rdp.example.com - Proxy status: On
CNAME の Target フィールドは、手順 2 で設定した RDP の target とは無関係です。
DNS レコードは、稼働中の宛先 IP やホスト名を指す必要はありません。有効なレコードであれば十分です。正しい RDP target へのルーティングは、Cloudflare の RDP プロキシが行います。
-
Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Applications を開きます。
-
Create new application を選択します。
-
Self-hosted and private を選択します。
-
Add public hostname を選択します。
-
Domain のドロップダウンで、アプリケーションを表すドメインを選びます。ドメインは、Cloudflare アカウント内の有効なゾーンに属している必要があります。同じルートパスを共有するアプリケーションの複数部分を保護するには、ワイルドカード を使えます。
あるいは、Cloudflare for SaaS のカスタムホスト名 を使う場合は、Switch to custom input を選び、カスタムホスト名を入力します。
-
Allow access through browser-based RDP, SSH, or VNC sessions をオンにし、ドロップダウンから RDP を選びます。
-
Target criteria で、RDP サーバーを定義する target ホスト名 を選びます。アプリケーション定義は、選んだ target ホスト名を共有するすべての target に適用され、今後追加する target も含みます。
-
Port に、サーバーの RDP 待受ポート ↗ を入力します。多くの場合はポート
3389です。 -
(任意)複数のポートで RDP を動かしている場合は、Add new target criteria を選択し、同じ target ホスト名を別のポート番号で再設定します。
-
Access policies で、既存のポリシーを追加するか、新しいポリシーを作成して、アプリケーションに接続できるユーザーを制御します。Access アプリケーションはデフォルトで拒否です。ユーザーは Allow ポリシーに一致してからアクセスが許可されます。
-
(任意)Access ポリシーで 接続設定 を構成し、ユーザーのローカルマシンとブラウザーベースの RDP セッションのあいだのクリップボード操作とファイル転送を制限します。
-
ユーザーの認証方法を設定します。
アプリケーションで有効にする ID プロバイダー を選びます。
(推奨)単一の IdP だけを許可する場合は、Apply instant authentication をオンにします。エンドユーザーには Cloudflare Access のログインページ は表示されません。代わりに、Cloudflare はユーザーを SSO ログインへ直接リダイレクトします。
- Authenticate with Cloudflare One Client はブラウザーベースの RDP では非対応のため、オフのままにしてください。
-
Session Duration で、ユーザーの アプリケーショントークン の有効期限を選びます。
Cloudflare は、アプリケーションへのすべての HTTP リクエストで、有効なアプリケーショントークンがあるかを確認します。ユーザーのアプリケーショントークン(およびグローバルトークン)の期限が切れている場合は、IdP での再認証を求めます。詳細は セッション管理 を参照してください。
-
(任意)Additional settings タブを開き、アプリケーションの体験をカスタマイズします。
-
App Launcher customization: App Launcher では、ブラウザーベースの RDP でアクセスできる Windows サーバーを確認できます。Show application in App Launcher はオンのままにすることを推奨します。App Launcher がないと、ユーザーは各 target の直接 URL を知る必要があります。
-
Custom block pages: アプリケーションへのアクセスを拒否されたときに、ユーザーへ表示する内容を選びます。
- Cloudflare default: ログインページ を再読み込みし、Cloudflare Access のロゴの下にブロックメッセージを表示します。既定のメッセージは
That account does not have accessです。カスタムメッセージを入力することもできます。 - Redirect URL: 指定した Web サイトへリダイレクトします。
- Custom page template: Cloudflare One でホストする カスタムブロックページ を表示します。
- Cloudflare default: ログインページ を再読み込みし、Cloudflare Access のロゴの下にブロックメッセージを表示します。既定のメッセージは
- クロスオリジンリソース共有(CORS)の設定
- Cookie settings
- 401 Response for Service Auth policies: 正しい サービストークン なしでユーザー(またはマシン)がアプリケーションへリクエストした場合に、
401レスポンスコードを返します。
-
-
Create を選択します。
デフォルトでは、Cloudflare はすべての Gateway ネットワークポリシー を評価したあとで Access アプリケーションポリシーを評価します。特定の Gateway ポリシーの前または後に Access アプリケーションを評価するには、次の手順を行います。
Cloudflare ダッシュボード ↗ で Zero Trust > Traffic policies > Firewall policies を開きます。Network で、次の設定の Network ポリシーを作成 します。
セレクター 演算子 値 アクション Access Infrastructure Target is Present Allow - Enforce Cloudflare One Client session duration がオフであることを確認してください。オンだと、ユーザーは RDP target へのアクセスをブロックされます。
ダッシュボードまたは API で、ポリシーの 優先順位 を更新します。
この Gateway ポリシーは、RDP と SSH を含む、Access for Infrastructure のすべての target に適用されます。
RDP で Windows マシンに接続する手順は次のとおりです。
-
ブラウザーを開き、App Launcher の URL へ移動します。
https://<your-team-name>.cloudflareaccess.com<your-team-name>を Zero Trust の チーム名 に置き換えます。 -
表示に従って ID プロバイダーにログインします。
認証が完了すると、App Launcher は利用を許可されたアプリケーションのタイルを表示します。ブラウザーベースの RDP で利用できる Windows サーバー(target)もタイルとして表示されます。1 つの target に複数の Access アプリケーションから到達できる場合、Access アプリケーションごとにタイルがあります。
-
接続する target を選びます。
App Launcher のタイルは
https://<app-domain>/rdp/<vnet-id>/<target-ip>/<port>形式の URL を開きます。この URL へ直接移動することもできます。 -
接続するポートを選びます。ポート選択画面は、Access アプリケーションが複数ポート(例: ポート
3389とポート65321)の RDP トラフィックを許可している場合にだけ表示されます。 -
(任意)ブラウザーの設定で、Access アプリケーションにクリップボードへのアクセスを許可します。クリップボードアクセスは、管理者が設定した ポリシー制限 の対象です。
-
Windows のユーザー名とパスワードを入力します。ユーザー名の形式は ユーザー識別子の形式 を参照してください。
これでリモートの Windows デスクトップにアクセスできます。
接続設定は、ユーザーのローカルマシンとブラウザーベースの RDP セッションのあいだのデータ転送を制限します。テキスト(コピー&ペースト)とファイル転送を制御できます。テキスト制御はクリップボードの内容を管理します。ファイル制御 ベータ はファイルのアップロードとダウンロードを管理します。これらの制御はポリシーごとに設定できるため、ユーザーグループごとに異なる権限を付与できます。
新しいポリシーでは、テキスト制御とファイル制御はデフォルトで拒否されます。各操作を明示的に許可する必要があります。既存のアプリケーションは、後方互換のためテキストクリップボードへのフルアクセスを維持します。ファイル制御は、明示的に有効にしない限り拒否されます。
テキスト制御とファイル制御は、同じ方向オプションを使います。
| 設定 | 説明 |
|---|---|
| Client to remote RDP session allowed | ローカルクライアントからブラウザーベースの RDP セッションへデータを転送できます。 |
| Remote RDP session to client allowed | ブラウザーベースの RDP セッションからローカルクライアントへデータを転送できます。 |
| Both directions allowed | 双方向でデータを転送できます。 |
| Disable copying/pasting | ブラウザーベースの RDP セッションとローカルクライアントのあいだでデータを転送できません。 |
たとえば、テキストのコピー&ペーストは双方向を許可し、ファイル転送はアップロードのみに制限できます。
制限されたクリップボード操作を試みると、クリップボードの内容は、その操作が許可されていない旨のメッセージに置き換わります。ファイル転送が制限されている場合、アップロード方法は無効になり、コントロールパネルにダウンロードボタンは表示されません。
- Cloudflare ダッシュボード ↗ で Zero Trust > Access controls > Applications を開きます。
- ブラウザーベースの RDP アプリケーションを見つけ、Configure を選択します。
- Policies タブを選択します。
- 新しいポリシーを作成するか、既存のポリシーを選んで編集します。
- Connection context を展開します。
- Connection settings で、次を設定します。
- Text controls — テキストのコピー&ペーストの方向設定を選びます。
- File controls — ファイルのアップロードとダウンロードの方向設定を選びます。
- Save policy を選択します。
RDP アプリケーションの Access ポリシーを作成または更新 するとき、各方向で許可する形式を設定します。テキストクリップボードには text、ファイル転送には file を使います。次のポリシーは、テキストクリップボードを双方向で許可し、ファイルはアップロード(ローカルからリモート)のみ許可します。
Required API token permissions
At least one of the following token permissions is required:Access: Apps and Policies Write
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/policies" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Allow engineers with clipboard and upload",
"decision": "allow",
"include": [
{
"email_domain": {
"domain": "example.com"
}
}
],
"connection_rules": {
"rdp": {
"allowed_clipboard_local_to_remote_formats": [
"text",
"file"
],
"allowed_clipboard_remote_to_local_formats": [
"text"
]
}
}
}'cloudflare_zero_trust_access_policy ↗ リソースの connection_rules 属性を使い、各方向で許可する形式を設定します。テキストクリップボードには text、ファイル転送には file を使います。次のポリシーは、テキストクリップボードを双方向で許可し、ファイルはアップロード(ローカルからリモート)のみ許可します。
resource "cloudflare_zero_trust_access_policy" "rdp-policy" {
account_id = var.cloudflare_account_id
name = "Allow engineers with clipboard and upload"
decision = "allow"
include = [
{
email_domain = {
domain = "example.com"
}
}
]
connection_rules = {
rdp = {
allowed_clipboard_local_to_remote_formats = ["text", "file"]
allowed_clipboard_remote_to_local_formats = ["text"]
}
}
}転送を管理するには、RDP セッション左側の歯車アイコンを選択します。このアイコンは左端に沿ってドラッグして位置を変えられます。
ファイル転送には次の制限があります。
- 最大ファイルサイズ: 1 ファイルあたり 2 GB(アップロードとダウンロード)
- 1 回のアップロードあたりの最大ファイル数: 1,000 ファイル
ローカルマシンからリモートの Windows セッションへファイルを転送するには、ブラウザーウィンドウへファイルをドラッグするか、コントロールパネルを使います。ドラッグ&ドロップは個別のファイルとフォルダー(サブフォルダーを含み、合計 1,000 エントリまで)に対応します。コントロールパネルのファイルピッカーは個別ファイルのみ選べます。ファイルはリモートデスクトップのアクティブな要素に配置されます。たとえば File Explorer でフォルダーを開いている場合、そのフォルダーに配置されます。
リモートの Windows セッションからローカルマシンへファイルを転送する手順は次のとおりです。
- リモートの Windows セッションで、ダウンロードするファイルをコピーします。ファイルを右クリックして Copy を選ぶか、ファイルを選んで Ctrl+C を押します。
- コントロールパネルのアイコンが小さく跳ね、ファイルが利用可能になったことを示します。コントロールパネルを開いてファイルを確認します。
- 次のいずれかを選びます。
- Download: ファイルをローカルマシンへダウンロードします。
- Download zip: 複数ファイルを zip フォルダーとしてローカルマシンへまとめてダウンロードします。
- Print: PDF ファイルをネットワーク上のローカルプリンターへ 印刷 します。
クリップボードパネルから、PDF ファイルをローカルプリンターへ印刷できます。1 ファイルを印刷するには、PDF の横の印刷アイコンを選びます。複数ファイルを一度に印刷するには、リモートマシンのクリップボードへファイルをまとめてコピーし、クリップボードパネルで Print all PDFs を選びます。ファイルは 1 つの PDF に結合され、1 つの印刷ジョブとしてブラウザーへ送られます。
- 転送履歴は、RDP セッション終了時に破棄されます。
- リモートの Windows サーバーは、RDP クリップボード仮想チャネル経由のファイル転送に対応している必要があります。Windows Server 2012 以降はデフォルトで対応しています。
- リモートサーバーがファイル転送に対応していない場合でも、テキストクリップボードは通常どおり動作します。
ブラウザーベースの RDP は、次のオペレーティングシステムで動く Windows マシンへの接続に対応しています。
- Windows 11 Pro
- Windows 11 Enterprise
- Windows 10 Pro
- Windows 10 Enterprise
- Windows Server 2025
- Windows Server 2022
- Windows Server 2019
- Windows Server 2016
| ブラウザー | 互換性 |
|---|---|
| Google Chrome | ✅ |
| Mozilla Firefox | ✅ |
| Safari | ✅ |
| Microsoft Edge (Chromium-based) | ✅ |
| その他の Chromium 系ブラウザー(Opera、Brave) | ✅ |
| Internet Explorer 11 以前 | ❌ |
キーストロークが記録されない Microsoft の過去の問題を避けるため、Powershell 7 以降を実行してください。
ブラウザーベースの RDP は、次のログイン認証情報で Windows マシンへの接続に対応しています。
SAM 形式のユーザー識別子は、スペースの有無に対応しています。
例:
DOMAIN\usernameDOMAIN\username with spaces.\username.\username with spacesusernameusername with spaces
文字数制限
DOMAIN\username のようにドメインを指定する識別子は、ドメイン最大 20 文字、ユーザー名最大 15 文字です。
.\username のようにドメインのない識別子は、デフォルトドメインを使います。ユーザー名は最大 20 文字です。
UPN 形式のユーザー識別子は、スペース付き、引用符の有無に対応しています。
例:
"username with spaces"@domain.orgusername with [email protected][email protected]
Microsoft Entra ID ドメインに紐づくユーザー識別子は、ユーザー名を AzureAD\[email protected] または AzureAD\user として入力する必要があります。AzureAD\ プレフィックスは大文字小文字を区別しません。
Microsoft Entra ID に紐づくユーザー名を使う場合、ログインの流れは次のように異なります。
- 上記いずれかの形式でユーザー名を入力します。
- ユーザー名を入力するとパスワード欄が消え、RDP 接続が開始されます。
- その後、RDP サーバーがパスワードを求め、アクセスを許可します。
Access のセルフホストアプリケーションを使う場合、ほとんどの Cloudflare 製品はアプリケーションと互換性があります。
ただし、次の製品はサポートされていません。
ゾーン全体ではなく特定のアプリケーションだけ Zaraz を無効にするには、アプリケーションのドメインにスコープした Configuration Rule を使います。
Google tag gateway はゾーン単位で設定され、特定のホスト名にスコープできません。ホスト名で Access binding cookie を使うには、ゾーン全体で Google tag gateway を無効にします。
- TLS 証明書の検証: Cloudflare は TLS で RDP target に接続しますが、オリジンの TLS 証明書は検証しません。
- デバイス認証の ID: ブラウザーベースの RDP トラフィックは Cloudflare One Client を経由しないため、ユーザーは Cloudflare One Client のセッション ID で認証できません。
- RDP 経由の音声: ユーザーはマイクとスピーカーでリモートマシンとやり取りできません。
- クリップボードのサイズ制限: ローカルマシンとブラウザーベースの RDP セッションのあいだでコピーするデータは、500 KB を超えてはなりません。
- クリップボードのデータ種類: テキストクリップボード制御はテキストデータのみ対応します。画像のクリップボード転送には対応していません。
- ファイル転送の提供状況: ファイル転送はベータです。対応機能と制限は ファイルを転送する を参照してください。
- ローカルプリンターへの印刷: ブラウザーベースの RDP セッションからのローカル印刷は、ファイル転送コントロールパネル 経由の PDF ファイルのみ対応します。
- Entra 参加アカウントの Network Level Authentication: ブラウザーベースの RDP は、Entra 参加アカウントの Network Level Authentication (NLA) ↗ に必要な PKU2U 認証に対応していません。Entra 参加アカウントへ接続するには、リモートの Windows マシンで NLA の強制を無効にしてください。Settings > System > Remote Desktop から NLA を無効にするか、ローカルグループポリシーエディターで Require user authentication for remote connections by using Network Level Authentication を無効にできます。NLA を無効にするときは NLA 自体だけをオフにしてください。セキュリティレイヤーをレガシーの RDP オプションに切り替えないでください。ブラウザーベースの RDP は引き続き TLS を必要とします(RDP セキュリティレイヤーは TLS を許可する必要がある の制限を参照)。
- RDP セキュリティレイヤーは TLS を許可する必要がある: ブラウザーベースの RDP は TLS でリモートマシンに接続するため、マシンの RDP セキュリティレイヤーは少なくとも Negotiate(または SSL)である必要があります。サーバーがレガシーの RDP セキュリティレイヤーを使う設定だと、接続は失敗します。ローカルグループポリシーエディターで Require use of specific security layer for remote (RDP) connections を Negotiate または SSL に設定できます。
- クリップボードのブラウザー互換性: ローカルとリモートマシン間のクリップボード自動共有は、Chromium 系ブラウザー(Google Chrome、Microsoft Edge、Opera、Brave)でのみデフォルトで利用できます。Firefox でこの機能を有効にする手順は次のとおりです。
- ブラウザーのアドレスバーに
about:configと入力し、Enter を押します。 - 警告が表示された場合は承諾します。
dom.events.testing.asyncClipboardを検索し、trueに設定します。dom.events.asyncClipboard.clipboardItemを検索し、trueに設定します。dom.events.asyncClipboard.readTextを検索し、trueに設定します。
- ブラウザーのアドレスバーに