Uso compartido del servicio (buckets compartidos)

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

Uso del servicio con la herramienta S3Browser

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.
image1.png

Uso del servicio por comandos (herramienta de s3cmd)

Para compartir un bucket mediante línea de comandos será necesario que:

  • El usuario comparta inicialmente el bucket.
  • A la hora de añadir un nuevo objeto, este contenga el ACL necesaria para que sea accesible para todos los usuarios del bucket.
    En el caso de la herramienta por línea de comandos “s3cmd”, esto se puede llevar a cabo de la siguiente manera:
  • Para compartir un bucket:
# s3cmd -c s3.cfg setacl --acl-grant=full_control:<NOMBRE_USUARIO> s3://<NOMBRE_BUCKET>
  • Para subir objetos con el ACL correcta para todos los usuarios será necesario subir el objeto y a continuación aplicar de nueva el ACL para ese objeto:
    # 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> 

    Uso del servicio por comandos (herramienta de aws)

Para compartir un bucket mediante línea de comandos será necesario que:

  • El usuario comparte inicialmente el bucket
  • A la hora de añadir un nuevo objeto, este contenga el ACL necesaria para que sea accesible para todos los usuarios del bucket (incluido el usuario propietario del bucket).
    En el caso de la herramienta por línea de comandos “aws”, esto se puede llevar a cabo de la siguiente manera:
  • Definir las credenciales necesarias en el fichero “.aws/credentials”:
    [s3]
    aws_access_key_id = <TOKEN_ACCESO_AL_SERVICIO>
    aws_secret_access_key = <TOKEN_ACCESO_AL_SERVICIO>
  • Para compartir un bucket:
    # 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>"'
  • Para subir objetos con el ACL correcta para todos los usuarios será necesario subir el objeto con el ACL para ese objeto:
    # 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>"'
  • Si se comparte un bucket que ya tenía datos con otro usuario, el comando aws permite modificar las ACL de los objetos que ya existían, para ello es necesario definir un fichero (“acl.json”) con la siguiente estructura, en la que el primer usuario debe ser el propietario del bucket y los siguientes serán los usuarios a los que se les quiere dar acceso:
    {
    "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