INTEGRITY Документация

Службы VPC

VPC Services являются базовым строительным блоком Workers VPC. Они представляют собой конкретные ресурсы в вашей приватной сети, к которым Workers могут обращаться через Cloudflare Tunnel.

Вы можете использовать привязки для подключения к VPC Services из Workers. Каждый запрос к VPC Service, выполненный с помощью его fetch функция будет безопасно направлена к настроенному сервису в приватной сети.

VPC Services гарантируют, что запросы направляются только к нужному сервису, не раскрывая всю сеть, что защищает ваши рабочие нагрузки и предотвращает подделку запросов на стороне сервера (SSRF).

Участники с Connectivity Directory Bind роль позволяет привязываться к существующим VPC Services из Workers. Для создания VPC Services требуется Connectivity Directory Admin роль.

Настройка VPC Service

VPC Service включает в себя:

HTTP-сервисы

HTTP VPC Services позволяют Workers выполнять fetch() запросы к приватным конечным точкам HTTP/HTTPS.

Запросы шифруются на всём пути следования, пока не достигнут вашей сети через туннель, независимо от схемы, указанной в URL-адресе, переданном в fetch. Если http схема используется, между туннелем и сервисом устанавливается незашифрованное соединение.

https схема может использоваться для шифрованного соединения внутри вашей сети, между туннелем и вашим сервисом. Когда https схема указана, хост, переданный в fetch() операция используется как значение Server Name Indication (SNI).

По умолчанию VPC Services разрешают оба http и https схем. Вы можете указать значение только для одного из http_port или https_port чтобы принудительно использовать определённую схему.

Если Workers VPC не может установить соединение с вашей службой, fetch() выбросит исключение.

TCP-сервисы

TCP VPC Services позволяют подключаться к TCP-сервисам, таким как базы данных PostgreSQL и MySQL. Используйте tcp тип службы с --tcp-port чтобы открыть доступ к службе TCP.

При необходимости вы можете указать --app-protocol postgresql или mysql для указания протокола прикладного уровня. Эти метаданные используются другими продуктами Cloudflare, такими как Hyperdrive, чтобы находить TCP-сервисы по поддерживаемому протоколу передачи данных.

TCP VPC Services используются с Hyperdrive для подключения Workers к приватным базам данных. См. Подключение к частной базе данных через Workers VPC для получения полного руководства.

Поддерживаемые TLS-сертификаты

При использовании https схема, туннель проверяет TLS сертификат, предоставленный вашим исходным сервисом. Workers VPC доверяет следующим типам сертификатов:

Если исходный сервис предъявляет сертификат, выданный не публично доверенным CA и не Cloudflare Origin CA, TLS-рукопожатие завершится ошибкой и fetch() выбросит исключение.

Режим проверки сертификата TLS

Вы можете настроить, как соединение с вашей исходной службой проверяет TLS-сертификаты, задав --cert-verification-mode опция при создании или обновлении VPC Service. Это применимо как к типу службы HTTP, так и к TCP.

Режим Описание
verify_full Проверять полную цепочку сертификатов и имя хоста (по умолчанию)
verify_ca Проверять только цепочку сертификатов, пропуская проверку имени хоста
disabled Do not verify the server certificate

Примеры конфигурации

Эти конфигурации представляют собой ожидаемый контракт REST API для создания VPC Service, тип сервиса в общем каталоге подключений.

HTTP-сервис с IP-адресами

Ниже приведён пример HTTP VPC Service с использованием пользовательских портов HTTP и HTTPS, а также адресов IPv4 и IPv6.

{
	"type": "http",
	"name": "human-readable-name",

	// Port configuration (optional - defaults to 80/443)
	"http_port": 80,
	"https_port": 443,

	// Host configuration
	"host": {
		"ipv4": "10.0.0.1",
		"ipv6": "fe80::",
		"network": {
			"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
		},
	},
}

HTTP-сервис с hostname

Ниже приведён пример HTTP VPC Service с использованием имени хоста. При использовании имени хоста укажите resolver_network который опционально включает resolver_ips.

{
	"type": "http",
	"name": "human-readable-name",

	// Port configuration (optional - defaults to 80/443)
	"http_port": 80,
	"https_port": 443,

	// Hostname Host (with DNS resolver)
	"host": {
		"hostname": "example.com",
		"resolver_network": {
			"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
			"resolver_ips": ["10.0.0.1"], // Optional
		},
	},
}

TCP-сервис (например, PostgreSQL)

Ниже приведён пример TCP VPC Service для базы данных PostgreSQL.

{
	"type": "tcp",
	"name": "my-postgres-db",
	"tcp_port": 5432,
	"app_protocol": "postgresql", // Optional: "postgresql" or "mysql"

	"host": {
		"ipv4": "10.0.0.5",
		"network": {
			"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
		},
	},
}

Сервис с проверкой TLS-сертификата

В следующем примере создаётся TCP-сервис с verify_ca режим проверки сертификата.

{
	"type": "tcp",
	"name": "my-postgres-db",
	"tcp_port": 5432,
	"app_protocol": "postgresql",

	"host": {
		"ipv4": "10.0.0.5",
		"network": {
			"tunnel_id": "0191dce4-9ab4-7fce-b660-8e5dec5172da",
		},
	},

	"tls_settings": {
		"cert_verification_mode": "verify_ca",
	},
}

Настройка привязки Workers

После создания VPC Service вы можете привязать его к своему Worker:

{
	"$schema": "./node_modules/wrangler/config-schema.json",
	"name": "my-worker",
	"main": "src/index.js",
	"vpc_services": [
		{
			"binding": "PRIVATE_API",
			"service_id": "e6a0817c-79c5-40ca-9776-a1c019defe70",
			"remote": true // When true, utilizes [remote bindings](/workers/local-development/#remote-bindings) to allow access to the VPC Service during local development.
		}
	]
}
"$schema" = "./node_modules/wrangler/config-schema.json"
name = "my-worker"
main = "src/index.js"

[[vpc_services]]
binding = "PRIVATE_API"
service_id = "e6a0817c-79c5-40ca-9776-a1c019defe70"
remote = true

У вас может быть несколько привязок VPC service:

{
	"vpc_services": [
		{
			"binding": "PRIVATE_API",
			"service_id": "daf43e8c-a81a-4242-9912-4a2ebe4fdd79",
			"remote": true
		},
		{
			"binding": "PRIVATE_DATABASE",
			"service_id": "453b6067-1327-420d-89b3-2b6ad16e6551",
			"remote": true
		},
		{
			"binding": "INTERNAL_CACHE",
			"service_id": "6c39b574-237e-49f4-852a-cea5a93ed8f9",
			"remote": true
		}
	]
}
[[vpc_services]]
binding = "PRIVATE_API"
service_id = "daf43e8c-a81a-4242-9912-4a2ebe4fdd79"
remote = true

[[vpc_services]]
binding = "PRIVATE_DATABASE"
service_id = "453b6067-1327-420d-89b3-2b6ad16e6551"
remote = true

[[vpc_services]]
binding = "INTERNAL_CACHE"
service_id = "6c39b574-237e-49f4-852a-cea5a93ed8f9"
remote = true

Необходимые роли

Workers VPC использует следующие роли аккаунта:

Описание ролей см. в Роли.

Если ваши роли были недавно обновлены, а команды всё ещё завершаются с ошибкой, обновите аутентификацию Wrangler:

npx wrangler logout
npx wrangler login

Если вы аутентифицируетесь с помощью API-токена (CLOUDFLARE_API_TOKEN), убедитесь, что токен принадлежит пользователю с необходимыми ролями.

Следующие шаги