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

Защита доступа к бакетам Amazon S3 с помощью Cloudflare Zero Trust

В этом руководстве показано, как защитить доступ к бакетам Amazon S3 с помощью Cloudflare Zero Trust, чтобы данные в этих бакетах не были публично доступны в интернете. Вы можете совместить Cloudflare Access и AWS VPC endpoints. Клиенты плана Enterprise также могут использовать исходящие политики Cloudflare Gateway с выделенными исходящими IP-адресами.

Способ 1: через Cloudflare Access и VPC endpoints

flowchart TB
    cf1[/Cloudflare One Client or clientless users/]--Access policy-->cf2{{Cloudflare}}
    cf2--Cloudflare Tunnel-->vpc1

    subgraph VPC
    vpc1[EC2 VM]-->vpc2[VPC endpoint]
    end
    vpc2-->s3_1

    subgraph S3 service
    s3_1([S3 bucket])
    end

    i1[/Users outside </br> Zero Trust/]-. "S3 access denied" .->s3_1

Предварительные требования

1. Создайте конечную точку VPC в AWS

  1. В AWS dashboard, перейдите в Службы > Сети и доставка контента > VPC.
  2. В разделе Виртуальное частное облако, перейдите в Конечные точки.
  3. Выберите Создать конечную точку и назовите конечную точку.
  4. Выберите службы AWS в качестве категории службы.
  5. В Службы, найдите и выберите сервис S3 в том же регионе VPC. Например, для региона AWS Europe (London) - eu-west-2, соответствующий сервис S3 называется com.amazonaws.eu-west-2.s3 с типом Gateway.
  6. В VPC, выберите VPC, в котором развёрнута виртуальная машина EC2 с демоном Cloudflare Tunnel.
  7. В Таблицы маршрутизации, выберите таблицу маршрутизации, связанную с VPC.
  8. В Политика, выберите Полный доступ.
  9. Выберите Создать конечную точку.

После создания VPC endpoint в таблице маршрутов VPC появится новая запись, где целью указан ваш VPC endpoint. Формат записи: vpce-xxxxxxxxxxxxxxxxx.

2. Настройте политику бакета для доступа VPC

  1. Перейдите в Службы > Хранилище > S3.
  2. В Amazon S3 перейдите в Buckets > <your-S3-bucket> > Разрешения.
  3. Отключить Заблокировать весь публичный доступ.
  4. В Политика бакета, добавьте следующую политику:
{
	"Version": "2012-10-17",
	"Id": "VPCe",
	"Statement": [
		{
			"Sid": "VPCe",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:*",
			"Resource": [
				"arn:aws:s3:::<your-S3-bucket01>",
				"arn:aws:s3:::<your-S3-bucket01>/*"
			],
			"Condition": {
				"StringEquals": {
					"aws:SourceVpce": "<your-vpc-endpoint>"
				}
			}
		}
	]
}

Политика вашего бакета разрешит вашему VPC доступ к бакету S3.

3. Включите статический хостинг веб-сайта для бакета S3

  1. Вернитесь в Amazon S3, затем перейдите в Buckets > <your-S3-bucket01> > Свойства.
  2. В Хостинг статических веб-сайтов, выберите Изменить.
  3. Включить Хостинг статических веб-сайтов.
  4. Укажите документы Index и Error для бакета S3.
  5. Выберите Save changes.

Конечная точка веб-сайта бакета будет доступна по адресу http://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com. Из-за политики бакета эта конечная точка веб-сайта будет доступна только из VPC с настроенной конечной точкой VPC.

4. Добавьте опубликованное приложение в Cloudflare Tunnel

  1. В панели управления Cloudflare перейдите в Сеть > Tunnels.

    Перейдите в Tunnels ↗
  2. Выберите свой туннель, затем перейдите в Маршруты на вкладке.

  3. Выберите Добавить маршрут, затем выберите Опубликованное приложение.

  4. Введите поддомен, который ваша организация будет использовать для доступа к бакету S3. Например, s3-bucket.<your-domain>.com.

  5. В URL службы, введите http://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com.

  6. В Дополнительные настройки приложения > Настройки HTTP, введите HTTP Host Header как <your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com.

  7. Выберите Сохранить имя хоста.

Ваш Cloudflare Tunnel будет завершаться в AWS VPC, используя ваше публичное имя хоста.

5. Ограничьте доступ к S3 с помощью политики Access

  1. Перейдите в Контроль доступа > Приложения.
  2. Выберите Создать новое приложение.
  3. Выберите Самостоятельный хостинг и конфиденциальность.
  4. Выберите Добавьте общедоступное имя хоста и введите общедоступное имя хоста, используемое вашим Tunnel. Например, s3-bucket.<your-domain>.com.
  5. Добавить Политики доступа чтобы определить, какие пользователи и приложения могут получить доступ к вашему бакету. При необходимости можно создать токен службы политику, чтобы автоматически аутентифицировать доступ к вашему бакету S3.
  6. Выполните оставшиеся шаги по созданию самостоятельно размещённого приложения чтобы опубликовать приложение.

Пользователи и приложения, успешно прошедшие аутентификацию через Cloudflare Access, могут получить доступ к вашему бакету S3 по адресу https://s3-bucket.<your-domain>.com.

Способ 2: через политики Egress в Cloudflare Gateway

flowchart TB
    cf1[/Cloudflare One Client users/]--Egress policy-->cf2{{Cloudflare}}
    cf2--Egress with dedicated IP-->i1[Internet]
    i1-->s3_1

    subgraph S3 Service
    s3_1([S3 bucket])
    end

    i2[/Users outside </br> Zero Trust/]-. "IPs denied" .->s3_1

Предварительные требования

1. Настройте политику бакета, чтобы ограничить доступ к конкретному IP-адресу

  1. В AWS dashboard, перейдите в Службы > Хранилище > S3.
  2. Перейдите в Buckets > <your-S3-bucket02> > Разрешения.
  3. Отключить Заблокировать весь публичный доступ.
  4. В Политика бакета, добавьте следующую политику:
{
	"Version": "2012-10-17",
	"Id": "SourceIP",
	"Statement": [
		{
			"Sid": "SourceIP",
			"Effect": "Allow",
			"Principal": "*",
			"Action": "s3:*",
			"Resource": [
				"arn:aws:s3:::<your-S3-bucket02>",
				"arn:aws:s3:::<your-S3-bucket02>/*"
			],
			"Condition": {
				"IpAddress": {
					"aws:SourceIp": "<your-dedicated-ip>/32"
				}
			}
		}
	]
}

2. Включите статический хостинг веб-сайта для S3-бакета

  1. Вернитесь в свой бакет, затем перейдите в Свойства.
  2. В Хостинг статических веб-сайтов, выберите Изменить.
  3. Включить Хостинг статических веб-сайтов.
  4. Укажите документы Index и Error для бакета S3.
  5. Выберите Save changes.

Конечная точка веб-сайта бакета будет доступна по адресу http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com. Из-за политики бакета конечная точка веб-сайта будет доступна только для трафика, исходящего с указанного выделенного исходящего IP-адреса.

3. Настройте политику выделенного исходящего IP

  1. В Панель управления Cloudflare, перейдите в Zero Trust > Политики трафика > Политики Egress. Выберите Добавление политики.
  2. Создайте политику, которая определяет, какому проксируемому трафику Gateway следует назначить выделенный исходящий IP-адрес . Дополнительную информацию см. в Политики Egress.
  3. В Выберите исходящий IP-адрес, выберите Использовать выделенные исходящие IP-адреса Cloudflare. Выберите выделенный исходящий IP-адрес, указанный в политике бакета.
  4. Выберите Создать политику.

Трафик, проксируемый через Gateway с назначенным вами IP-адресом исходящего трафика, может обращаться к вашему S3 bucket по адресу http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com.