← Cloudflare One / cloudflare-one / tutorials
Защита доступа к бакетам 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
Предварительные требования
- бакет S3, защищаемый Cloudflare Zero Trust
- VPC AWS с одной виртуальной машиной (ВМ) EC2, на которой размещается Демон Cloudflare Tunnel
- бакет S3 и AWS VPC, настроенные в одном регион AWS ↗
1. Создайте конечную точку VPC в AWS
- В AWS dashboard ↗, перейдите в Службы > Сети и доставка контента > VPC.
- В разделе Виртуальное частное облако, перейдите в Конечные точки.
- Выберите Создать конечную точку и назовите конечную точку.
- Выберите службы AWS в качестве категории службы.
- В Службы, найдите и выберите сервис S3 в том же регионе VPC. Например, для региона AWS Europe (London) - eu-west-2, соответствующий сервис S3 называется
com.amazonaws.eu-west-2.s3с типом Gateway. - В VPC, выберите VPC, в котором развёрнута виртуальная машина EC2 с демоном Cloudflare Tunnel.
- В Таблицы маршрутизации, выберите таблицу маршрутизации, связанную с VPC.
- В Политика, выберите Полный доступ.
- Выберите Создать конечную точку.
После создания VPC endpoint в таблице маршрутов VPC появится новая запись, где целью указан ваш VPC endpoint. Формат записи: vpce-xxxxxxxxxxxxxxxxx.
2. Настройте политику бакета для доступа VPC
- Перейдите в Службы > Хранилище > S3.
- В Amazon S3 перейдите в Buckets > <your-S3-bucket> > Разрешения.
- Отключить Заблокировать весь публичный доступ.
- В Политика бакета, добавьте следующую политику:
{
"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
- Вернитесь в Amazon S3, затем перейдите в Buckets > <your-S3-bucket01> > Свойства.
- В Хостинг статических веб-сайтов, выберите Изменить.
- Включить Хостинг статических веб-сайтов.
- Укажите документы Index и Error для бакета S3.
- Выберите Save changes.
Конечная точка веб-сайта бакета будет доступна по адресу http://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com. Из-за политики бакета эта конечная точка веб-сайта будет доступна только из VPC с настроенной конечной точкой VPC.
4. Добавьте опубликованное приложение в Cloudflare Tunnel
-
В панели управления Cloudflare перейдите в Сеть > Tunnels.
Перейдите в Tunnels ↗ -
Выберите свой туннель, затем перейдите в Маршруты на вкладке.
-
Выберите Добавить маршрут, затем выберите Опубликованное приложение.
-
Введите поддомен, который ваша организация будет использовать для доступа к бакету S3. Например,
s3-bucket.<your-domain>.com. -
В URL службы, введите
http://<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com. -
В Дополнительные настройки приложения > Настройки HTTP, введите HTTP Host Header как
<your-S3-bucket01>.s3-website.<aws-region>.amazonaws.com. -
Выберите Сохранить имя хоста.
Ваш Cloudflare Tunnel будет завершаться в AWS VPC, используя ваше публичное имя хоста.
5. Ограничьте доступ к S3 с помощью политики Access
- Перейдите в Контроль доступа > Приложения.
- Выберите Создать новое приложение.
- Выберите Самостоятельный хостинг и конфиденциальность.
- Выберите Добавьте общедоступное имя хоста и введите общедоступное имя хоста, используемое вашим Tunnel. Например,
s3-bucket.<your-domain>.com. - Добавить Политики доступа чтобы определить, какие пользователи и приложения могут получить доступ к вашему бакету. При необходимости можно создать токен службы политику, чтобы автоматически аутентифицировать доступ к вашему бакету S3.
- Выполните оставшиеся шаги по созданию самостоятельно размещённого приложения чтобы опубликовать приложение.
Пользователи и приложения, успешно прошедшие аутентификацию через 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
Предварительные требования
- Аккаунт Cloudflare Zero Trust с выделенные исходящие IP-адреса
- бакет S3, защищаемый Cloudflare Zero Trust
1. Настройте политику бакета, чтобы ограничить доступ к конкретному IP-адресу
- В AWS dashboard ↗, перейдите в Службы > Хранилище > S3.
- Перейдите в Buckets > <your-S3-bucket02> > Разрешения.
- Отключить Заблокировать весь публичный доступ.
- В Политика бакета, добавьте следующую политику:
{
"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-бакета
- Вернитесь в свой бакет, затем перейдите в Свойства.
- В Хостинг статических веб-сайтов, выберите Изменить.
- Включить Хостинг статических веб-сайтов.
- Укажите документы Index и Error для бакета S3.
- Выберите Save changes.
Конечная точка веб-сайта бакета будет доступна по адресу http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com. Из-за политики бакета конечная точка веб-сайта будет доступна только для трафика, исходящего с указанного выделенного исходящего IP-адреса.
3. Настройте политику выделенного исходящего IP
- В Панель управления Cloudflare ↗, перейдите в Zero Trust > Политики трафика > Политики Egress. Выберите Добавление политики.
- Создайте политику, которая определяет, какому проксируемому трафику Gateway следует назначить выделенный исходящий IP-адрес . Дополнительную информацию см. в Политики Egress.
- В Выберите исходящий IP-адрес, выберите Использовать выделенные исходящие IP-адреса Cloudflare. Выберите выделенный исходящий IP-адрес, указанный в политике бакета.
- Выберите Создать политику.
Трафик, проксируемый через Gateway с назначенным вами IP-адресом исходящего трафика, может обращаться к вашему S3 bucket по адресу http://<your-S3-bucket02>.s3-website.<aws-region>.amazonaws.com.