amazon web services - precios - Restricción del acceso del depósito S3 a una VPC
precio vpc aws (3)
Estoy tratando de aplicar la siguiente política para restringir el acceso de my_bucket
a una VPC en particular.
- Cuando trato de aplicar esto como una política de depósito, recibo una
Policy has an invalid condition key - ec2:Vpc
. ¿Cómo puedo corregir esto?
{
"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"
}
}
}
]
}
Acabo de hacer que esto funcione. Tuve que hacer dos cosas. 1) Cree la política de depósito en el depósito de S3, 2) cree un "Punto final de VPC"
Mi política de depósito S3 tiene este aspecto (por supuesto, incluya su nombre de depósito y su identificador 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"
}
}
}
]
}
El depósito S3 también tiene algunos permisos fuera de la política de depósito para permitir el acceso desde la Consola AWS. Haciendo lo anterior no se dio acceso. Para obtener acceso, también tuve que ir a AWS Console -> VPC -> Endpoints, y luego crear un endpoint. Adjunté el punto final recién creado a la única política de enrutamiento que tiene la cuenta en este momento (que tiene todas las subredes adjuntas) y utilicé la política predeterminada de
{
"Statement": [
{
"Action": "*",
"Effect": "Allow",
"Resource": "*",
"Principal": "*"
}
]
}
Una vez que creé el punto final, pude leer desde el grupo S3 desde cualquier instancia de EC2 en mi VPC simplemente usando wget
con la URL correcta. Todavía puedo acceder al grupo desde la consola de AWS. Pero si intento acceder a la URL desde fuera de la VPC, tengo 403 prohibidos. Por lo tanto, el acceso al grupo de S3 está restringido a un solo VPC, al igual que lo que está buscando.
Aparentemente esta es una nueva característica. Consulte esta entrada del blog de AWS para obtener más información.
Dos cosas que me mordieron y que podrían ser útiles para agregar a la buena respuesta de Eddie son:
Primero, no podrá ver su grupo (o incluso modificar su política una vez que haya establecido la política anterior) en la consola S3 AWS a menos que también otorgue a sus usuarios de AWS permisos para manipular el grupo. Para hacerlo, encuentre su número de cuenta de AWS (que se muestra en la parte superior derecha here ), y agregue esta declaración a la lista de declaraciones de la política de depósito:
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::YOUR_AWS_ACCOUNT_NUMBER:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::my_bucket",
"arn:aws:s3:::my_bucket/*"
]
},
Segundo, si tiene más de una VPC, diga vpc-XXXXXX y vpc-YYYYYY para dar acceso a, la declaración en la respuesta de Eddie debe ser ajustada a algo como lo siguiente (note "Permitir" "StringEquals" y la lista de sourceVpc valores:
...
"Effect": "Allow",
...
"Condition": {
"StringEquals": {
"aws:sourceVpc": [
"vpc-XXXXXXXX",
"vpc-YYYYYYYY"
]
}
No, no puedes hacer eso.
Aquí hay otra persona que pregunta lo mismo: https://forums.aws.amazon.com/thread.jspa?threadID=102387
Algunos se han vuelto demasiado creativos con el problema al tratar de resolverlo con la red: https://pete.wtf/2012/05/01/how-to-setup-aws-s3-access-from-specific-ips/
Prefiero una ruta más simple, S3 le permite firmar urls para resolver este problema, pero dentro de su VPC puede que no tenga que pensar en firmar, o simplemente no podría firmar, por ejemplo, podría estar usando wget. , etc. Así que escribí este pequeño microservicio por ese mismo motivo: https://github.com/rmmeans/S3-Private-Downloader
¡Espero que ayude!
ACTUALIZADO:
AWS ahora tiene una característica para los puntos finales de VPC: https://aws.amazon.com/blogs/aws/new-vpc-endpoint-for-amazon-s3/ , debe usar eso y no lo que sugerí anteriormente.