¿Existe una política S3 para limitar el acceso a solo ver / acceder a un depósito?

123

Tengo un depósito simple que se parece images.mysite.coma mi S3 y otros depósitos que contienen copias de seguridad, etc.

Quiero permitir que un usuario específico pueda acceder al images.mysite.combucket para cargar imágenes. Sin embargo, NO quiero que vea ninguno de los otros cubos; Ni siquiera que existan.

No podría hacer una política que haga esto; Cada vez que intento algo restrictivo, termina bloqueando la lista de cualquier cubo.

Alex
fuente
Estoy votando para cerrar esta pregunta como fuera de tema porque debería estar en Superusuarios
Tonny Madsen
Se podría generar una política aquí en: awspolicygen.s3.amazonaws.com/policygen.html
Suhail Gupta
1
¿Por qué no sólo compartir la dirección de la cuchara - https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/. De esta forma, evita que vean la lista completa y no cambia nada en su política actual.
Treecoder

Respuestas:

119

He estado intentando esto por un tiempo y finalmente encontré una solución que funciona. Debe usar diferentes "Recursos" dependiendo del tipo de acción que esté realizando. También incluí algunas acciones faltantes en la respuesta anterior (me gusta DeleteObject) y restringí algunas más (me gusta PutBucketAcl).

La siguiente política de IAM está funcionando para mí ahora:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": "arn:aws:s3:::itnighq",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion",
        "s3:GetObject",
        "s3:GetObjectAcl",
        "s3:GetObjectVersion",
        "s3:GetObjectVersionAcl",
        "s3:PutObject",
        "s3:PutObjectAcl",
        "s3:PutObjectVersionAcl"
      ],
      "Resource": "arn:aws:s3:::itnighq/*",
      "Condition": {}
    },
    {
      "Effect": "Allow",
      "Action": "s3:ListAllMyBuckets",
      "Resource": "*",
      "Condition": {}
    }
  ]
}

Las acciones relacionadas con un cubo y las relacionadas con los objetos deben tener arn diferentes.

rogercampos
fuente
9
Esta es una gran respuesta, gracias. Vale la pena señalar que la implicación del permiso s3: ListAllMyBuckets es que el destinatario de esta política puede ver todos sus depósitos (de raíz). No hay divulgación de datos directamente, pero puede haber sensibilidad / confusión en torno a los nombres de los depósitos. Es factible eliminar este permiso en particular y las cosas deberían funcionar (aunque "s3cmd ls", etc., no devolverá el depósito de destino).
Mike Repass
91
¡Esto no impide que el usuario vea otros nombres de depósito!
metdos
2
@metdos puede evitar que los usuarios vean otros nombres de depósito eliminando la última política.
Hendra Uzia
20
Para ver la lista de depósitos en la consola (y, por lo tanto, usar la consola para el acceso al depósito), debe otorgar ListAllMyBucketsy GetBucketLocationpara todos los depósitos S3 ( "arn:aws:s3:::*"funcionará en lugar "*"del recurso). Como se indica en esta publicación de blog de AWS "aparte, actualmente no puede filtrar selectivamente ciertos depósitos, por lo que los usuarios deben tener permiso para enumerar todos los depósitos para el acceso a la consola".
jwadsack
10
Este es un consejo horrible. Es peligroso y específicamente lo que el OP no quería. Vea las respuestas de Andreas Stankewitz y BFar para soluciones viables.
AndreKR
37

Nuestro caso de uso: proporcione espacio de copia de seguridad para los clientes de nuestra aplicación en la nube a la que los clientes puedan acceder directamente utilizando herramientas comunes de S3. Por supuesto, ningún cliente debería ver lo que tienen otros clientes.

Como explicó cloudberryman, "Puede enumerar todos los cubos o ninguno", por lo que tenemos que encontrar una solución. Antecedentes:

Se necesita otorgar derechos ListAllMyBuckets al usuario para que la consola AWS S3 o S3Fox se conecten sin un mensaje de error. Pero ListAllMyBuckets enumera todos los depósitos, independientemente de los recursos asignados (en realidad, solo arn: ... ::: * funciona). Eso es un error grave, si me preguntas. Por cierto. denegar ListBucket para todos los depósitos no impide que se enumeren, ya que ListBucket otorga derechos para enumerar el contenido del depósito.

Hay 3 posibilidades que consideré como alternativas. Elegí el último.

(1) utilice nombres de depósito crípticos, por ejemplo, GUID

Ventaja: fácil de configurar

Desventaja: difícil de gestionar, especialmente para el cliente. (imagine encontrar un GUID específico entre miles de otros). También muestra el número de cubos = número de clientes que utilizan el servicio de copia de seguridad.

(2) use un cubo con carpetas específicas del cliente

Así es como Amazon sugiere en sus ejemplos S3 / IAM proporcionar espacio para acceder solo para ciertos usuarios o grupos de usuarios. Consulte: Ejemplo de políticas de IAM de AWS

Ventaja: bastante fácil de configurar, va con ideas de AWS

Desventaja: obliga a hacer pública la existencia de todos los cubos, para que el cliente pueda encontrar su cubo "de origen". La contabilidad de AWS proporciona estadísticas del uso del depósito, pero no del uso de la carpeta, lo que dificulta el cálculo del costo por parte del cliente.

(3) no conceda el derecho de acceso a ListAllMyBuckets

Ventaja: obtienes lo que quieres: los clientes no pueden ver los cubos de otros clientes

Desventaja: el cliente no puede ver su propio cubo. S3Browser viene con un buen mensaje "no se puede hacer" y le pide que ingrese el nombre del depósito. S3Fox arroja un mensaje de error cuando se conecta a la raíz, pero permite la navegación directa al depósito del cliente si se conoce el nombre del depósito. La consola de Amazon S3 no funciona en absoluto.

Espero que esto haya ayudado a manejar S3 IAM cuando lo necesite.

Andreas Stankewitz
fuente
1
Además, para la Solución (1) si desea utilizar el alojamiento web con un depósito, el nombre del depósito debe coincidir con el nombre de dominio.
Andy Fusniak
31

No es posible proporcionar acceso a la consola S3 sin otorgar el ListAllMyBucketspermiso.

En mi caso (y quizás también en el tuyo, futuro lector), una alternativa aceptable es redirigir a los usuarios que inician sesión directamente al bucket que les gustaría que vieran.

Para lograr esto, agregue lo siguiente a su URL de inicio de sesión de IAM: /s3/?bucket=bucket-name

URL de inicio de sesión completa (reemplace your-alias y bucket-name ):

https://your-alias.signin.aws.amazon.com/console/s3/?bucket=bucket-name

Política de IAM (reemplace nombre de cubo )

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucket-name",
                "arn:aws:s3:::bucket-name/*"
            ]
        }
    ]
}

Para obtener más información sobre cómo crear permisos específicos de depósito para los usuarios, lea este blog: http://mikeferrier.com/2011/10/27/granting-access-to-a-single-s3-bucket-using-amazon-iam / /

BFar
fuente
1
Esto funciona bien Sería óptimo si los usuarios no pudieran explorar fuera de la vista de cubo ... Pero lo tomaré. Gracias @BFar.
Jamie Popkin
Esta es la respuesta UNA CORRECTA, todos los demás enumerarán cada cubo, que debe ocultarse según la solicitud original.
Steve Horvath
Exactamente lo que necesito. Gracias.
Di Zhang
20

Prueba esta política. También tenga en cuenta que no hay forma de permitir que el usuario enumere solo el bucket seleccionado. Puede enumerar todos los cubos o ninguno.

{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:GetObjectAcl",
                "s3:PutObjectAcl",
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:PutBucketAcl",
                "s3:GetBucketLocation"
            ],
            "Resource": "arn:aws:s3:::your_bucket_here/*",
            "Condition": {}
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*",
            "Condition": {}
        }
    ]
}
cloudberryman
fuente
2
¡Funciona muy bien! Tuve que hacer una acción de cambio s3:*para que funcione para mí. También lo hice "Resource": ["arn:aws:s3:::your_bucket_here", "arn:aws:s3:::your_bucket_here/*"], pero esto podría no ser necesario.
Michael Yagudaev
3
s3: * otorga acceso para hacer cualquier cosa, incluida la eliminación de un depósito. ¿Seguro que quieres eso?
Dave Gregory
10

Estoy interpretando esta pregunta como: "¿Puedo permitir el acceso a un depósito donde otros depósitos no serán accesibles y, por lo tanto, invisibles?". Porque mostrar el nombre de la cubeta a la que no se le otorgó acceso todavía equivale a una fuga de información.

Y la respuesta correcta es no. El permiso requerido es ListAllMyBuckets que permitirá al usuario ver TODOS los depósitos. Dejar de lado este permiso hará que la consola sea inutilizable.


fuente
6

Hay una excelente manera de permitir que los usuarios accedan a un depósito específico sin comprender el conocimiento de otros depósitos. Una política de grupo similar a la siguiente permitirá que los usuarios solo vean "bucket a". El único inconveniente es que el usuario solo podrá acceder al depósito si se conecta al punto final del depósito dado. Para el siguiente ejemplo, sería bucket-a.s3.amazonaws.com. Es posible que el depósito también deba tener "Usuarios autenticados" permitidos para que esto ocurra.

{
    "Statement": [
     {
         "Sid": "<EXAMPLE_SID>",
         "Action": [
           "s3:ListBucket",
           "s3:GetBucketLocation"
          ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::bucket-a"
         ]
     },
     {
      "Sid": "<EXAMPLE_SID>",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucket-a/*"
      ]
     }
   ]
}

Este método fue probado con Cyberduck en Mac OS / X y utilizando el paquete s3cmd

./s3cmd ls s3://bucket-a --access_key=ACCESS_KEY --secret_key=SECRET_KEY --bucket-locat
ion=ap-southeast-2
joevartuli
fuente
Todavía puedo ver la lista de todos los cubos. No funciona :(
Rishikesh Chandra
5

Confundido acerca de por qué no se marcó la respuesta?

Analicemos cada declaración de política de las soluciones anteriores:

Esta declaración de política de aplica al contenido de la cubeta, pero no el dinero en sí. Probablemente esto no sea lo que pidió la pregunta, porque no puede ver lo que hay en el cubo.

{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:GetObjectAcl",
"s3:PutObjectAcl",
"s3:ListBucket",
"s3:GetBucketAcl",
"s3:PutBucketAcl",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::your_bucket_here/*",
"Condition": {}
}

Esta política de dos declaraciones derivada de da acceso de solo lectura al depósito en ( arn:aws:s3:::your_bucket_here/) solo lectura , pero aún permite operaciones CRUD en el contenido del depósito ( arn:aws:s3:::your_bucket_here/*).

{
  "Effect": "Allow",
  "Action": [
    "s3:ListBucket",
    "s3:GetBucketLocation",
    "s3:ListBucketMultipartUploads"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here",
  "Condition": {}
},
{
  "Effect": "Allow",
  "Action": [
    "s3:AbortMultipartUpload",
    "s3:DeleteObject",
    "s3:DeleteObjectVersion",
    "s3:GetObject",
    "s3:GetObjectAcl",
    "s3:GetObjectVersion",
    "s3:GetObjectVersionAcl",
    "s3:PutObject",
    "s3:PutObjectAcl",
    "s3:PutObjectAclVersion"
  ],
  "Resource": "arn:aws:s3:::your_bucket_here/*",
  "Condition": {}
}

Sin embargo, la política incluye la siguiente declaración, que permite al usuario ver todos los depósitos en el punto final. Esta es probablemente no lo que la pregunta pidió.

{
"Effect": "Allow",
"Action": "s3:ListAllMyBuckets",
"Resource": "*",
"Condition": {}
}

Sin embargo, lo anterior es muy útil si utiliza un cliente que navega por una tienda S3. Si su cliente accede a la tienda y no al depósito directamente, entonces necesita acceso a la lista de depósitos en la raíz.

Donal Lafferty
fuente
3

Probablemente el caso de uso más simple:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::bucket-name"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::bucket-name/*"]
    }
  ]
}
jjanczyszyn
fuente
1
This policy contains the following error: The policy must contain a valid version string
Respuesta de
es correcto, corrigí mi respuesta -> <br/> aquí solo hay dos valores posibles: <br/> * 2012-10-17 * y 2008-10-17 . <br/> Puede encontrar más referencias aquí: <br/> docs.aws.amazon.com/IAM/latest/UserGuide/…
jjanczyszyn
¿Alguna idea sobre el (listing included)significado de cómo enumerar solo el cubo en el que el usuario puede ingresar? Hasta ahora (y de acuerdo con todas las otras respuestas), parece que AWS no te permitirá hacer eso.
MaximeBernard
3

Hay una manera fácil o una solución alternativa para hacerlo utilizando las organizaciones de AWS. La organización de AWS le permite tener múltiples cuentas de usuario. Su cuenta principal puede tener múltiples cuentas de AWS (Sub) y los servicios (s3 / EC2 / *) que se agreguen en las cuentas de AWS en las que solo esos recursos serán visibles.

Consulte https://aws.amazon.com/blogs/aws/aws-organizations-policy-based-management-for-multiple-aws-accounts/ https://aws.amazon.com/organizations/

Organización en la página de mi cuenta

Shaik Ismail
fuente
3

Encontré esta solución:
AWS FLOW:
FLUJO DE AWS

Política del cubo:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*", #Role ID
            "111111111111" #AccountID
          ]
        }
      }
    }
  ]
}

Política de IAM:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": [
        "arn:aws:s3:::MyExampleBucket",
        "arn:aws:s3:::MyExampleBucket/*"
      ],
      "Condition": {
        "StringNotLike": {
          "aws:userId": [
            "AROAEXAMPLEID:*",  #Role ID
            "AIDAEXAMPLEID",  #UserID
            "111111111111"  #AccountID
          ]
        }
      }
    }
  ]
}

aws iam get-user -–user-name NOMBRE DE USUARIO --profile = ExampleProfile

aws iam get-role --role-name ROLE-NAME --profile = EjemploPerfil

Fuente: https://aws.amazon.com/blogs/security/how-to-restrict-amazon-s3-bucket-access-to-a-specific-iam-role/

PD: ten cuidado con la política de cubos, puedes quedarte afuera sin permisos

Constantin Paigin
fuente
2

Como se ha discutido anteriormente, no es posible enumerar solo un cubo en la consola. Pero si el acceso del bucket de S3 está conectado a un IAM, IAM puede acceder directamente al bucket si la URL al bucket está disponible. La URL del cubo S3 será como:

https://s3.console.aws.amazon.com/s3/buckets/BucketName

Donde BucketName es el nombre del cubo IAM tiene acceso a

Ishan Tomar
fuente
1
Creo que esta es la única solución factible en 2018 también.
Saurabh
1

Logré que funcionara lo siguiente. Significa que la lista de otros depósitos recibió el mensaje de acceso denegado. Pero aún podía ver el depósito que quería si me conectaba con el nombre del depósito establecido como ruta.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::test"
    },
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::test"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::test/*"]
    }
  ]
}

Estaba usando Cyberduck para probar esta conexión.

codeplay
fuente
1

Si bien no es posible restringir la s3:ListAllMyBucketsacción a grupos específicos, en cuanto a la solución alternativa, puede enviarles la URL de la consola para grupos específicos, por ejemplo

  • https://s3.console.aws.amazon.com/s3/buckets/BUCKET_NAME/

Fuente: lista restringida de buckets S3 de la consola S3

Para hacerlo, deberá especificar el siguiente documento de política para un usuario o grupo dado:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketLocation",
                "s3:ListBucketMultipartUploads"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1",
                "arn:aws:s3:::my-bucket-2"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:AbortMultipartUpload",
                "s3:DeleteObject",
                "s3:DeleteObjectVersion",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:GetObjectVersion",
                "s3:GetObjectVersionAcl",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:PutObjectVersionAcl"
            ],
            "Resource": [
                "arn:aws:s3:::my-bucket-1/*",
                "arn:aws:s3:::my-bucket-2/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets"
            ],
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

Dónde my-bucket-1y dónde my-bucket-2están tus cubos para dar acceso de lectura y escritura.

Relacionado:

kenorb
fuente
1

Prueba esta política. El usuario no puede enumerar ningún depósito, tiene que usar el enlace directo al depósito permitido.

Por ejemplo: s3.console.aws.amazon.com/s3/buckets/bucketname/?region=us-east-1&tab=overview

{
  "Statement": [
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname"
      ]
    },
    {
      "Action": [
        "s3:PutObject",
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::bucketname*"
      ]
    },

  ],
  "Version": "2012-10-17"
}
Justicia
fuente
1

Similar a lo que otros describieron anteriormente:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:GetObject"
         ],
         "Resource":"arn:aws:s3:::awsexamplebucket/*"
      }
   ]
}

Aquí está sin embargo la pieza que falta. Si bien no es posible acceder al depósito a través de S3-> Home, es posible acceder solo al depósito deseado a través de un enlace directo.

https://s3.console.aws.amazon.com/s3/buckets/yourawsbucket/

Puedes encontrar más información en la siguiente publicación:

https://aws.amazon.com/premiumsupport/knowledge-center/s3-console-access-certain-bucket/

crandorf80s
fuente
0

La solución a continuación funcionó para mí. Quería una política para otorgar acceso a un usuario específico my_iam_user en un bucket específico my-s3-bucket .

Esta política permite a mi usuario hacer una lista, eliminar y obtener archivos en un bucket s3 específico.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListBucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket"
        },
        {
            "Sid": "AddDeleteFiles",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::123456789012:user/my_iam_user"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::my-s3-bucket/*"
        }
    ]
}
Carlos Coelho
fuente
0

Solo agrego una necesidad similar, resuelta por esto:

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:Get*",
            "s3:Put*",
            "s3:DeleteObject",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::my-bucket-name",
            "arn:aws:s3:::my-bucket-name/*"
        ]
    }
  ]
}
Xavinsky
fuente
0

Utilizo lo siguiente para ocultar el contenido del cubo a otros usuarios. Esto no solo ayuda a ocultar otros depósitos (no use ListAllMyBuckets), sino también carpetas en el mismo depósito, cuando crea un depósito, pero desea tener subcarpetas que le asignen los permisos adecuados al usuario / subcarpeta de IAM.

La siguiente política se aplica al Grupo IAM y todos los usuarios están en este Grupo. Debe tomar aws:useridy hacer una subcarpeta con el mismo nombre en el cubo.

Se puede tomar la ID de usuario: aws iam get-user --user-name "user_name_for_folder_access":

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name/${aws:userid}/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::bucket_name"
            ]
        }
    ]
}
Andrii Starikov
fuente
0

Una solución simple y agradable que se nos ocurrió es bloquear al usuario para que inicie sesión en el directorio raíz. Por lo tanto, deben iniciar sesión con la ruta remota establecida en la carpeta deseada.

 {
"Statement": [
    {
        "Effect": "Allow",
        "Action": "s3:*",
        "Resource": "arn:aws:s3:::folder-name*",
        "Condition": {}
    }
]
}
PROSPERAR
fuente
0

No, actualmente no es posible limitar a los usuarios para ver cubos selectivos en la raíz o en cualquier otro lugar. Tienes solo esas 3 opciones en este momento.

Elegí pedirle al cliente que use el nombre del depósito explícitamente.

foggy_glasses
fuente
-1

Esto funcionó perfecto para mí. El usuario puede cargar, descargar y obtener una lista de archivos, pero no podrá ver archivos de otro depósito.

 {    

"Statement": [    

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:GetObjectAcl",
        "s3:PutObjectAcl",
        "s3:ListBucket",
        "s3:GetBucketAcl",
        "s3:PutBucketAcl",
        "s3:GetBucketLocation"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",
    "Condition": {}
},
{
    "Effect": "Allow",
    "Action": "s3:ListAllMyBuckets",
    "Resource": "*",
    "Condition": {}
},
{
    "Effect": "Deny",
    "Action": [
        "s3:DeleteBucket",
        "s3:DeleteBucketPolicy",
        "s3:DeleteBucketWebsite",
        "s3:DeleteObject",
        "s3:DeleteObjectVersion"
    ],
    "Resource": "arn:aws:s3:::mybucketname/*",    

    "Condition": {}    

}
]
}      
s. Tait
fuente
-2

Agregue una Denycláusula para los depósitos a los que no desea acceder. Recuerde que aún pueden estar en la lista, pero no podrá acceder a los contenidos dentro de ellos.

{
    "Versión": "2012-10-17",
    "Declaración": [
        {
            "Efecto": "Permitir",
            "Acción": "s3: *",
            "Recurso": "*"
        },
        {
            "Efecto": "Denegar",
            "Acción": "s3: *",
            "Recurso": [
                "arn: aws: s3 ::: nombre-cubo",
                "arn: aws: s3 ::: nombre-cubo / *"
            ]
        }
    ]
}
codificador de árboles
fuente
1
Debe otorgar explícitamente acceso a los recursos. Cuando otorga acceso predeterminado a todos los recursos, puede omitir accidentalmente los recursos que desea mantener en privado. También otorgar acceso a todas las acciones de S3 significa que el usuario puede hacer públicos los recursos o configurar un alojamiento estático o hacer otras cosas dañinas.
Ondrej Galbavý