Si usas mac y S3, seguramente te será útil dar acceso a algunos usuarios a determinadas carpetas con Cyberduck.
Acceso a un bucket
Primero creamos la “policy” para el usuario desde IAM.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::MI_BUCKET",
"arn:aws:s3:::MI_BUCKET/*"
]
}
]
}
Después, creamos el usuario y le asignamos la policy anteriormente creada. Tenemos que crearle un acceso programático,apuntamos Access Key y Secret Access Key.
En Cyberduck, creamos una nueva conexión de tipo S3 y en el nombre del servidor ponemos
MY_BUCKET.s3.amazonaws.com
Ya tenemos acceso sólo a este bucket por parte del usuario.
Acceso sólo a carpetas determinadas dentro de un bucket
Para accesos de usuario a carpetas determinadas, ver este artículo.
Tengamos en cuenta que S3 no usa una estructura de directorio propiamente dicha sino que esta es plana. Restringir el acceso a determinadas “carpetas” se hace a través de “condiciones” en el nombre del recurso al que queremos acceder.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUserToSeeBucketListInTheConsole",
"Action": [
"s3:GetBucketLocation",
"s3:ListAllMyBuckets"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::*"
]
},
{
"Sid": "AllowRootAndHomeListingOfCompanyBucket",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::MY_BUCKET"
],
"Condition": {
"StringEquals": {
"s3:prefix": [
"",
"MY_DIR/"
],
"s3:delimiter": [
"/"
]
}
}
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::MY_BUCKET"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"MY_DIR/*"
]
}
}
},
{
"Sid": "AllowAllS3ActionsInUserFolder",
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::MY_BUCKET/MY_DIR/*"
]
}
]
}