Ограничение доступа к ведомости S3 для VPC
Я пытаюсь применить следующую политику, чтобы ограничить доступ my_bucket
к определенному VPC.
- Когда я пытаюсь применить это как политику ведра, я получаю
Policy has an invalid condition key - ec2:Vpc
. Как это исправить?
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Deny",
"Principal": {
"AWS": "*"
},
"Action":"*",
"Resource":"arn:aws:s3:::my_bucket/*",
"Condition":{
"StringNotEquals":{
"ec2:Vpc":"arn:aws:ec2:region:account:vpc/vpc-ccccccc"
}
}
}
]
}
Ответы
Ответ 1
Я просто получил это, чтобы работать. Я должен был сделать две вещи. 1) Создайте политику ведра в ведро S3, 2) создайте "конечную точку VPC"
Моя политика корзины S3 выглядит так (конечно, введите имя вашего ведра и идентификатор VPC):
{
"Version": "2012-10-17",
"Id": "Policy1234567890123",
"Statement": [
{
"Sid": "Stmt1234567890123",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::my_bucket/*",
"Condition": {
"StringEquals": {
"aws:sourceVpc": "vpc-12345678"
}
}
}
]
}
В ведро S3 также есть некоторые разрешения за пределами политики ведра, чтобы разрешить доступ с консоли AWS. Выполнение вышеуказанного не давало доступа. Чтобы получить доступ, мне также пришлось перейти в AWS Console → VPC → Endpoints, а затем создать конечную точку. Я привязал вновь созданную конечную точку к единственной политике маршрутизации, которую имеет учетная запись на данный момент (к которой привязаны все подсетей), и я использовал политику по умолчанию
{
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Resource": "*",
"Principal": "*"
}
]
}
Как только я создал конечную точку, я смог прочитать из ведра S3 из любого экземпляра EC2 в своем VPC, просто используя wget
с правильным URL. Я все еще могу получить доступ к ведру с консоли AWS. Но если я попытаюсь получить доступ к URL-адресу из-за пределов VPC, я получаю запрет 403. Таким образом, доступ к ведро S3 ограничен одним VPC, как и то, что вы ищете.
Это, по-видимому, новая функция. Для получения дополнительной информации см. Эту запись в блоге AWS.
Ответ 2
Две вещи, которые меня укусили, и которые могут быть полезны для добавления к Эдди приятного ответа:
Во-первых, вы не сможете просмотреть свой ковш (или даже изменить его политику после установки политики выше) в консоли S3 AWS, если вы также не предоставите разрешениям пользователей AWS управлять ведром. Чтобы сделать это, найдите свой номер учетной записи AWS (отображается в верхнем правом здесь) и добавьте это выражение в операторы политики bucket список:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_NUMBER:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::ess.raw.scan1",
"arn:aws:s3:::ess.raw.scan1/*"
]
},
Во-вторых, если у вас есть несколько VPC, скажите vpc-XXXXXX и vpc-YYYYYY, чтобы предоставить доступ, утверждение в ответе Эдди должно быть изменено на что-то вроде следующего (обратите внимание на "Разрешить" "StringEquals" и список значений sourceVpc:
...
"Effect": "Allow",
...
"Condition": {
"StringEquals": {
"aws:sourceVpc": [
"vpc-XXXXXXXX",
"vpc-YYYYYYYY"
]
}
Ответ 3
Нет, вы не можете этого сделать.
Здесь другой человек спрашивает то же самое: https://forums.aws.amazon.com/thread.jspa?threadID=102387
Некоторые из них стали чрезмерно творческими с проблемой, пытаясь решить ее с помощью сетей: https://pete.wtf/2012/05/01/how-to-setup-aws-s3-access-from-specific-ips/
Я предпочитаю более простой маршрут, S3 позволяет подписать URL-адреса для решения этой самой проблемы, но внутри вашего VPC вы, возможно, захотите не думать о подписании - или вы просто не могли подписываться, например, вы могли бы использовать wget и т.д. Поэтому я написал эту небольшую микросервис по этой причине: https://github.com/rmmeans/S3-Private-Downloader
Надеюсь, что это поможет!
ОБНОВЛЕНО:
AWS теперь имеет функцию для конечных точек VPC: https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/, вы должны использовать это, а не то, что я ранее предлагал.