El servicio S3 de Opencayle permite trabajar con buckets compartidos entre varios usuarios, donde los usuarios que tienen acceso al mismo pueden trabajar de manera conjunta.
Para ello, el propietario del bucket tiene que inicialmente compartir el bucket y a continuación definir las políticas de acceso necesarias (en adelante ‘ACL’) para garantizar el correcto acceso a los datos del resto de usuarios
El software S3 Browser, en su versión comercial, permite compartir buckets entre usuarios, para ello, en la pestaña “Permissions”, opción “More” y finalmente seleccionando la opción “Add user by email/ID” e introduciendo el nombre del usuario al que se quiere añadir.
Es necesario marcar la casilla “Apply for all subfolders and files” para que las ACL de los nuevos ficheros se apliquen de manera automática.
Para compartir un bucket mediante línea de comandos será necesario que:
# s3cmd -c s3.cfg setacl --acl-grant=full_control:<NOMBRE_USUARIO> s3://<NOMBRE_BUCKET>
# s3cmd -c s3test.cfg put <RUTA_FICHERO_LOCAL> s3://<NOMBRE_BUCKET>/<RUTA_FICHERO_BUCKET>
# s3cmd -c s3test.cfg setacl --acl-grant=full_control:<NOMBRE_USUARIO> s3://<NOMBRE_BUCKET>/<RUTA_FICHERO_BUCKET>
Para compartir un bucket mediante línea de comandos será necesario que:
[s3]
aws_access_key_id = <TOKEN_ACCESO_AL_SERVICIO>
aws_secret_access_key = <TOKEN_ACCESO_AL_SERVICIO>
# aws --profile=s3 --endpoint=https://ss3.scayle.es:443 s3api put-bucket-acl --bucket <NOMBRE_BUCKET> --grant-full-control 'id="<IDUSUARIO_PROPIETARIO_BUCKET>",id="<IDUSUARIO2>"'
# aws --profile=s3 --endpoint=https://ss3.scayle.es:443 s3api put-object --bucket <NOMBRE_BUCKET> --key "<RUTA_FICHERO_BUCKET>" --body "<RUTA_FICHERO_LOCAL>" --grant-full-control 'id="<IDUSUARIO_PROPIETARIO_BUCKET>",id="<IDUSUARIO2>",id="<IDUSUARIO3>"'
{
"Owner": {
"DisplayName": "<IDUSUARIO_PROPIETARIO_BUCKET>",
"ID": "<IDUSUARIO_PROPIETARIO_BUCKET>"
},
"Grants": [
{
"Grantee": {
"DisplayName": "<IDUSUARIO_PROPIETARIO_BUCKET>",
"ID": "<IDUSUARIO_PROPIETARIO_BUCKET>",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "<IDUSUARIO2>",
"ID": "<IDUSUARIO2>",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
},
{
"Grantee": {
"DisplayName": "<IDUSUARIO3>",
"ID": "<IDUSUARIO3>",
"Type": "CanonicalUser"
},
"Permission": "FULL_CONTROL"
}
]
}
Finalmente se aplica esta ACL sobre cada fichero del bucket (incluidos los directorios) A continuación se muestra el ejemplo para un fichero:
# aws --profile=s3 --endpoint=https://ss3.scayle.es:443 s3api put-object-acl --bucket <NOMBRE_BUCKET> --key "<RUTA_FICHERO_BUCKET>" --access-control-policy file://acl.json