En esta página, se describe cómo controlar el acceso a depósitos y objetos con Listas de control de acceso (LCA). Las LCA son un mecanismo que puedes usar para determinar quién tiene acceso a tus buckets y objetos y qué nivel de acceso tienen.
Para obtener información sobre otras formas de controlar el acceso a los buckets y objetos, consulta la Descripción general del control de acceso.
Antes de comenzar
¿Deberías usar LCA?
En la mayoría de los casos, la administración de identidades y accesos (IAM) es el método recomendado para controlar el acceso a tus recursos, ya que proporciona control de acceso de nivel empresarial en todo Google Cloud y permite que los permisos asignados a recursos superiores, como proyectos, se hereden mediante recursos secundarios, como buckets y objetos. Consulta Usa permisos de IAM a fin de obtener guías para trabajar con IAM en Cloud Storage.
Es más probable que debas usar las LCA si necesitas personalizar el acceso a objetos individuales dentro de un bucket, porque los permisos de IAM se aplican a todos los objetos dentro de un bucket. Sin embargo, deberías usar IAM para cualquier acceso que sea común a todos los objetos de un bucket, ya que reduce la cantidad de tareas de administración detallada que debes llevar a cabo.
¿Necesitas establecer una LCA?
Según el permiso que quieres que tenga un bucket o un objeto, quizás no necesites establecer una LCA. Los bucket s y objetos se crean con LCA predeterminadas que quizás ya contengan el permiso que quieres que tenga el objeto o bucket.
Usa la guía siguiente para decidir si necesitas establecer una LCA.
En depósitos:
Console
Los buckets nuevos se crean con la LCA project-private
predefinida.
Si es necesario un permiso diferente para tu bucket, establece una LCA.
gsutil
Los buckets nuevos se agregan como project-private
. Si es necesario un permiso diferente para tu bucket, establece una LCA.
API de JSON
De forma predeterminada, los nuevos buckets se agregan como project-private
. Si es necesario un permiso diferente para tu bucket, establece una LCA.
API de XML
Los buckets nuevos se agregan como project-private
. Si tu bucket necesita un permiso diferente, establece una LCA.
Como se muestra arriba, cada depósito tiene una LCA de objeto predeterminada que se aplica a todos los objetos subidos en ese depósito que no tienen una LCA predefinida o (si usas la API de JSON) una LCA especificada en la solicitud. Obtén más información en LCA de objeto predeterminado.
En objetos:
Console
Los objetos subidos tienen la misma LCA que el objeto del depósito y el usuario que carga se agrega como propietario de la LCA. Si tu objeto necesita un permiso diferente, establece una LCA.
gsutil
Los objetos nuevos se agregan con la LCA de objeto predeterminada al bucket. Cuando copias un objeto ya almacenado en la nube, puedes anular este comportamiento con la opción -p
.
API de JSON
Por configuración predeterminada, los objetos nuevos se agregan con la LCA de objeto predeterminada del bucket.
API de XML
Los objetos nuevos se agregan con la LCA de objeto predeterminada al bucket.
¿Qué interfaz deberías usar?
En los siguientes ejemplos, se muestra cómo configurar el control de acceso con Google Cloud Console, la herramienta de línea de comandos de gsutil, las bibliotecas cliente de Cloud Storage y las API de XML y JSON. Consulta los siguientes lineamientos para elegir cuál utilizar:
Si es la primera vez que usas el control de acceso y solo deseas modificar las LCA de objetos individuales, utiliza Cloud Console.
Si eres nuevo en el control de acceso y solo deseas modificar las LCA para buckets y objetos, usa gsutil.
Si tienes experiencia con una de las bibliotecas cliente de Cloud Storage, úsala para administrar tus LCA.
Si especificas LCA con una API, debes tener experiencia previa en la generación de solicitudes HTTP. Puedes usar tu herramienta o aplicación favorita para enviar solicitudes HTTP. En los ejemplos, usamos la herramienta cURL. Visita OAuth 2.0 Playground para obtener tokens de autorización que puedes usar en los ejemplos de cURL.
Establece las LCA
La herramienta o API que usas para establecer y obtener las LCA determina la sintaxis de LCA que usas. Las sintaxis de LCA tienen aspectos diferentes, pero contienen la misma información de LCA: entradas que otorgan permisos a alcances.
Console
En Cloud Console, ve al navegador de Cloud Storage.
Ir al navegador de Cloud StorageNavega hasta el objeto cuya LCA deseas modificar.
Selecciona Editar permisos en el menú más acciones (
) asociado al objeto.
Deberías ver un diálogo de permiso con el siguiente aspecto:
En esta captura de pantalla, se muestra una LCA con cuatro entradas:
- En la primera entrada, todos los propietarios de un proyecto específico (uno cuyo número de proyecto es 867489140601) reciben el acceso y permiso de “Propietario” para este objeto.
- En la segunda entrada, todos los editores de un proyecto específico (uno cuyo número de proyecto es 867489140601) también reciben el acceso y permiso de “Propietario” para este objeto.
- En la tercera entrada, todos los lectores de un proyecto específico (uno cuyo número de proyecto es 867489140601) reciben el acceso o permiso de “Lector” para este objeto.
- En la cuarta entrada, el usuario que subió el objeto recibe el acceso o permiso de “Propietario” para el objeto. Los usuarios que cargan objetos siempre son considerados “Propietarios” y no pueden quitarse este permiso.
Haz clic en Add item (Agregar elemento).
Elige el tipo de Entity (Entidad) a la que quieres darle permiso.
Entidad especifica el tipo de entidad que obtiene el permiso (por ejemplo, un usuario o un grupo). Consulta los Alcances de control de acceso a fin de obtener una lista de los valores admitidos para Entidad.
Ingresa un valor en Name (Nombre).
Nombre identifica a un usuario, grupo o algún otro tipo de entidad específica. Consulta los Alcances de control de acceso a fin de obtener una lista de los valores admitidos para Nombre.
Juntos, Entidad y Nombre definen a quién se le aplica el permiso.
Elige un valor en Access (Acceso).
Acceso define el permiso que quieres establecer en el objeto. Consulta los Permisos de control de acceso a fin de obtener una lista de los valores admitidos para Acceso.
Haz clic en Guardar.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa gsutil acl
para especificar las LCA:
Para especificar otorgamientos individuales, ingresa la siguiente información:
gsutil acl ch -u USER_EMAIL:PERMISSION gs://BUCKET_NAME
Para especificar LCA estándares, ingresa esta información:
gsutil acl set CANNED_ACL_NAME gs://BUCKET_NAME
Para especificar LCA en el formato de JSON, ingresa esta información:
gsutil acl set JSON_FILE gs://BUCKET_NAME
donde
JSON_FILE
contiene las LCA especificadas en formato de JSON.
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
En el ejemplo siguiente, se agrega una LCA a un bucket:
En el siguiente ejemplo, se agrega una LCA a un objeto:
API de JSON
Cuando creas un bucket, puedes especificar la propiedad acl[]
en una solicitud de inserción. Para un bucket existente, especifica la propiedad acl[]
en una solicitud de parche o de actualización.
Cuando creas un objeto, puedes especificar la propiedad acl[]
en el cuerpo de la solicitud o el parámetro de consulta predefinedAcl
en una solicitud de inserción. Para un objeto existente, especifica la propiedad acl[]
o el parámetro de consulta predefinedAcl
en una solicitud de parche o de actualización.
Para ver las definiciones de las propiedades de la LCA del bucket y del objeto, consulta los respectivos recursos BucketAccessControls
y ObjectAccessControls
.
El siguiente ejemplo, se muestran entradas diferentes de LCA de bucket.
"acl": [ { "kind": "storage#bucketAccessControl", "id": "example-bucket/project-owners-123412341234", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-owners-123412341234", "bucket": "example-bucket", "entity": "project-owners-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "owners" }, "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/project-editors-123412341234", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-editors-123412341234", "bucket": "example-bucket", "entity": "project-editors-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "editors" }, "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/project-viewers-123412341234", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/project-viewers-123412341234", "bucket": "example-bucket", "entity": "project-viewers-123412341234", "role": "READER", "projectTeam": { "projectNumber": "123412341234", "team": "viewers" }, "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/group-gs-announce@googlegroups.com", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/group-gs-announce@googlegroups.com", "bucket": "example-bucket", "entity": "group-gs-announce@googlegroups.com", "role": "READER", "email": "gs-announce@googlegroups.com", "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/user-jane@gmail.com", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/user-jane@gmail.com", "bucket": "example-bucket", "entity": "user-jane@gmail.com", "role": "READER", "email": "jane@gmail.com", "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/allUsers", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allUsers", "bucket": "example-bucket", "entity": "allUsers", "role": "READER", "etag": "CDk=" }, { "kind": "storage#bucketAccessControl", "id": "example-bucket/allAuthenticatedUsers", "selfLink": "https://www.googleapis.com/storage/v1/b/example-bucket/acl/allAuthenticatedUsers", "bucket": "example-bucket", "entity": "allAuthenticatedUsers", "role": "READER", "etag": "CDk=" } ]
API de XML
En la API de XML, trabajas con LCA en formato XML. Debes adjuntar un documento XML al cuerpo de las solicitudes para cambiar las LCA del bucket y del objeto. Se muestra un documento XML cuando obtienes las LCA del bucket y del objeto. El documento XML contiene entradas de LCA del objeto o bucket individual.
Después de crear un bucket con una solicitud de bucket
PUT
, usa una segunda solicitud de bucket PUT con el parámetro?acl
para cambiar la LCA.Después de subir un objeto con una solicitud de objeto
PUT
, cambia la LCA con otra solicitud PUT con el parámetro?acl
o el encabezado de solicitudx-googl-acl
.
Usa la siguiente sintaxis de LCA para la API de XML.
Elemento | Descripción |
---|---|
AccessControlList |
Contenedor para elementos Entries y Owner |
Owner |
Contenedor para elementos DisplayName y ID Este elemento no es necesario para los objetos, ya que un objeto siempre es propiedad el usuario que lo subió. Este elemento se usa cuando empleas la sintaxis de la LCA de Amazon S3 en una situación de migración. Amazon Simple Storage Service y Amazon S3 son marcas registradas de Amazon.com, Inc. o sus afiliados en Estados Unidos y otros países. |
ID |
ID de Google Cloud Storage del propietario del bucket. |
DisplayName |
No implementado por el momento. El valor es siempre una string vacía. |
Entries |
Contenedor para cero o más elementos Entry |
Entry |
Contenedor para elementos Scope y Permission . Un Entry debe contener solo un Scope y un elemento Permission . |
Scope |
Contenedor para un elemento ID , EmailAddress o Domain con el que se define el alcance de la LCA. Este elemento debe tener un atributo type que contenga uno de los siguientes valores: UserByID , UserByEmail , GroupByID , GroupByEmail , GroupByDomain , AllUsers o AllAuthenticatedUsers . |
ID |
Un identificador para el beneficiario cuando con el ID se especifica la entrada de permiso. |
EmailAddress |
El identificador de correo electrónico para el beneficiario cuando la entrada de permiso la especifica el correo electrónico. |
Domain |
El identificador de dominio para el beneficiario cuando con el dominio se especifica la entrada de permiso. |
Name |
Elemento opcional que se puede especificar o que se puede agregar de forma automática si el alcance es UserByEmail o GroupByEmail . |
Permission |
El permiso otorgado READ , WRITE o FULL_CONTROL . |
Cuando trabajas con LCA, usa la API de XML de la siguiente manera:
- Solo puedes usar el formato XML que se describió antes.
No puedes establecer alcances duplicados.
Puedes tener muchas entradas en tu XML de la LCA, pero no puedes tener entradas con alcances duplicados. Por ejemplo, no puedes tener dos entradas con el mismo elemento de alcance de
jane@example.com
.
En el siguiente ejemplo, se muestran diferentes entradas de LCA de bucket:
<?xml version="1.0" encoding="UTF-8"?> <AccessControlList> <Owner> <ID>00b4903a9721...</ID> </Owner> <Entries> <Entry> <Scope type="GroupById"> <ID>00b4903a9722...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="GroupById"> <ID>00b4903a9723...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="GroupById"> <ID>00b4903a9724...</ID> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="GroupByDomain"> <Domain>example.com</Domain> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="GroupByEmail"> <EmailAddress>gs-announce@googlegroups.com</EmailAddress> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> <Name>jane</Name> </Scope> <Permission>READ</Permission> </Entry> <Entry> <Scope type="AllUsers"/> <Permission>READ</Permission> </Entry> <Entry> <Scope type="AllAuthenticatedUsers"/> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
Establece el elemento Nombre en el XML de la LCA
Cuando recuperas una LCA de un objeto o bucket, podrías observar un elemento <Name>
adicional adjunto a algunas de tus entradas. Por ejemplo, quizás veas una entrada con el siguiente aspecto:
<Entry> <Scope type="UserByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> <Name>Jane</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry>
Estos elementos opcionales <Name>
se propagan en las siguientes dos circunstancias:
Cuando las LCA de objeto o bucket incluyen
<Name>
como elementoCuando estableces las LCA, puedes elegir incluir el elemento
<Name>
con tus entradas de LCA. Puedes proporcionar cualquier valor en el elemento<Name>
; Cloud Storage recuerda estos valores hasta que se quita o reemplaza la LCA. Este método puede ser útil si usas identificadores que no son fáciles de identificar, como los ID de Google Cloud Storage.Cuando un alcance
UserByEmail
oGroupByEmail
contiene un perfil público de Google.Si usas uno de estos alcances, pero no proporcionas un elemento
<Name>
, Cloud Storage verifica si el usuario o Grupo de Google asociado con la dirección de correo electrónico tiene un perfil público de Google con un nombre público. Si es así, con Cloud Storage se propaga de forma automática el elemento<Name>
con el nombre público.
Aplica una LCA predefinida
En vez de especificar la LCA en su totalidad de a una entrada a la vez como se muestra arriba, puedes usar una LCA predefinida. Esta se aplicará de forma automática a un número de entradas personalizadas en una situación específica. Puedes aplicar una LCA predefinida a un bucket o un objeto con gsutil, la API de JSON o la API de XML.
En objetos nuevos
Para aplicar una LCA predefinida a un objeto mientras se sube, haz lo siguiente:
Console
No puedes aplicar una LCA predefinida con Cloud Console. En su lugar, usa gsutil.
gsutil
Use la opción -a
con el comando gsutil cp
para aplicar la LCA predefinida:
gsutil cp -a PREDEFINED_ACL OBJECT gs://BUCKET_NAME
Por ejemplo, para aplicar la LCA predefinida bucket-owner-read
cuando se sube un objeto paris.jpg
a un bucket example-travel-maps
, haz lo siguiente:
gsutil cp -a bucket-owner-read paris.jpg gs://example-travel-maps
API de JSON
Usa el parámetro predefinedAcl
de string de consulta en una solicitud de inserción para aplicar la LCA predefinida.
Por ejemplo, para aplicar la LCA predefinida bucketOwnerRead
cuando se sube un objeto paris.jpg
a un bucket example-travel-maps
, haz lo siguiente:
curl -X POST --data-binary @paris.jpg -H "Content-Type: image/jpeg"
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
"https://storage.googleapis.com/upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead"
La solicitud se ve como el siguiente ejemplo:
POST /upload/storage/v1/b/example-travel-maps/o?name=paris.jpg&predefinedAcl=bucketOwnerRead HTTP/1.1 Host: www.googleapis.com Content-Type: image/jpeg Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg Content-Length: 12345 Date: Fri, 10 Oct 2014 00:02:38 GMT
API de XML
Usa el encabezado x-goog-acl
en una solicitud Put de objeto para aplicar la LCA predefinida.
Por ejemplo, para aplicar la LCA predefinida bucket-owner-read
cuando se sube un objeto paris.jpg
a un bucket example-travel-maps
, haz lo siguiente:
curl -X PUT --upload-file paris.jpg -H "x-goog-acl: bucket-owner-read"
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg
La solicitud se ve como el siguiente ejemplo:
PUT /paris.jpg HTTP/1.1 Host: example-travel-maps.storage.googleapis.com Date: Thu, 09 Oct 2014 23:06:08 GMT Content-Length: 12345 Content-Type: image/jpg x-goog-acl: bucket-owner-read Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg 12345 bytes in entity body
En objetos o depósitos existentes
También puedes aplicar una LCA predefinida en un objeto o bucket existente, que es útil si deseas cambiar de una LCA predefinida a otra, o si deseas actualizar una LCA personalizada a una predefinida.
Console
No puedes aplicar una LCA predefinida con Cloud Console. En su lugar, usa gsutil.
gsutil
Use el comando gsutil acl set
para aplicar la LCA predefinida:
gsutil acl set PREDEFINED_ACL gs://BUCKET_NAME/OBJECT_NAME
Por ejemplo, para aplicar la LCA predefinida private
al objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
gsutil acl set private gs://example-travel-maps/paris.jpg
API de JSON
Usa el parámetro de string de consulta predefinedAcl
y especifica una propiedad vacía acl
en una solicitud de parche para aplicar la LCA predefinida.
Por ejemplo, para aplicar la LCA predefinida private
al objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
curl -X PATCH --data '{"acl": []}' -H "Content-Type: application/json"
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private
La solicitud se ve como el siguiente ejemplo:
PATCH /storage/v1/b/example-travel-maps/o/paris.jpg?predefinedAcl=private HTTP/1.1 Host: www.googleapis.com Content-Type: application/json Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg Content-Length: 11 Date: Fri, 10 Oct 2014 18:57:59 GMT
API de XML
Usa el encabezado x-goog-acl
con el parámetro de string de consulta acl
en una solicitud Put de objeto, pero no incluyas un documento XML en ella.
Por ejemplo, para aplicar la LCA predefinida private
al objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
curl -X PUT -H "Content-Length: 0"
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
-H "x-goog-acl: private" https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
La solicitud se ve como el siguiente ejemplo:
PUT /paris.jpg?acl HTTP/1.1 Host: example-travel-maps.storage.googleapis.com Date: Thu, 09 Oct 2014 23:14:59 GMT Content-Length: 0 x-goog-acl: private Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg empty entity body
Establece LCA de objeto predeterminada
Para evitar establecer LCA cada vez que creas un objeto nuevo, puedes determinar una LCA de objeto predeterminada en un bucket. Una vez que haces esto, se le aplicará la LCA predeterminada a cada objeto nuevo agregado a ese bucket que no tenga una aplicada de forma explícita. Por ejemplo, quizás desees especificar que solo un determinado grupo de usuarios tenga acceso a la mayoría de los objetos en un bucket determinado. Puedes cambiar la LCA de objeto predeterminada y, luego, agregar objetos al bucket. A estos objetos agregados se les aplica de forma automática la LCA de objeto predeterminada que especificaste; sin embargo, puedes proporcionar diferentes LCA a objetos específicos, en cuyo caso no se les aplicará la LCA predeterminada.
Para ver y cambiar la LCA de objeto predeterminada de un bucket, haz lo siguiente:
Console
No puedes establecer LCA de objeto predeterminadas con Cloud Console. En su lugar, usa gsutil.
gsutil
Usa
gsutil defacl
para recuperar la LCA de objeto predeterminada:gsutil defacl get gs://BUCKET_NAME
Usa
gsutil defacl ch
ogsutil defacl set
para modificar la LCA de objeto predeterminada.Por ejemplo, con el siguiente comando, se agrega
jane@gmail.com
a la LCA de objeto predeterminada de un bucketexample-travel-maps
:gsutil defacl ch -u jane@gmail.com:READER gs://example-travel-maps
También puedes especificar la LCA de objeto predeterminada desde un archivo. Para obtener más información, consulta la ayuda de
gsutil defacl
.
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
En el siguiente ejemplo, se imprime la LCA del objeto predeterminado de un bucket:
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
En el siguiente ejemplo, se agrega una LCA de objeto predeterminada a un bucket:
En la siguiente tabla, se borra una LCA de objeto predeterminada de un bucket:
API de JSON
Recupera la LCA de objeto predeterminada con una solicitud GET. Por ejemplo:
curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?projection=fullUsa una solicitud de parche para reemplazar la LCA de objeto predeterminada. Por ejemplo, con la siguiente solicitud, se reemplaza la LCA de objeto predeterminada por la LCA especificada en
defacls.json
para un bucketexample-travel-maps
:curl -X PATCH --data @defacls.json -H "Content-Type: application/json" -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/storage/v1/b/example-travel-mapsEl siguiente es un ejemplo de
defacls.json
:{ "defaultObjectAcl": [ { "email": "jane@gmail.com", "entity": "user-jane@gmail.com", "role": "READER" } ] }
API de XML
Recupera la LCA de objeto predeterminada con una solicitud
GET
con el alcance acotado a tu bucket y el parámetro?defaultObjectAcl
. Por ejemplo:curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/BUCKET_NAME?defaultObjectAclUsa una solicitud
PUT
con el alcance acotado a tu bucket y el parámetro?defaultObjectAcl
para reemplazar la LCA de objeto predeterminada por la LCA especificada enacls.xml
. Por ejemplo:curl -X PUT --data-binary @acls.xml -H "Authorization: Bearer OAUTH2_TOKEN"
http://storage.googleapis.com/BUCKET_NAME?defaultObjectAclUn ejemplo de
acls.xml
:<AccessControlList> <Entries> <Entry> <Permission>
FULL_CONTROL
</Permission> <Scope type="GroupByEmail"> <EmailAddress>travel-companions@googlegroups.com</EmailAddress> </Scope> </Entry> </Entries> </AccessControlList>
La sintaxis de las LCA se describen en Establece LCA. También puedes especificar una LCA predefinida como la LCA de objeto predeterminada.
Para establecer la LCA de objeto predeterminada de un bucket como una LCA predefinida, haz lo siguiente:
Console
No puedes establecer LCA de objeto predeterminadas con Cloud Console. En su lugar, usa gsutil.
gsutil
Usa el comando gsutil defacl
con el nombre de la LCA predefinida.
Por ejemplo, para establecer la LCA de objeto predeterminada como project-private
en el bucket example-travel-maps
, haz lo siguiente:
gsutil defacl set project-private gs://example-travel-maps
API de JSON
Usa una solicitud PUT y el parámetro predefinedAcl
.
Un ejemplo es el siguiente:
curl -X PUT -H "Content-Length: 0" -H "Authorization: Bearer OAUTH2_TOKEN"
https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?predefinedAcl=private
API de XML
Usa una solicitud PUT
con el alcance acotado a tu bucket, el parámetro ?defaultObjectAcl
y el encabezado x-goog-acl
.
Un ejemplo es el siguiente:
curl -X PUT -H "x-goog-acl: project-private" -H "Content-Length: 0" -H "Authorization: Bearer OAUTH2_TOKEN"
http://storage.googleapis.com/BUCKET_NAME?defaultObjectAcl
LCA de objeto predeterminadas para un bucket recién creado
A continuación, se muestran las LCA de objeto predeterminadas para un bucket recién creado. Compáralas con las LCA de objeto predeterminadas de tu bucket para ver si las LCA de objeto predeterminadas se modificaron.
Console
No puedes trabajar con LCA de objeto predeterminadas en Cloud Console. En su lugar, usa gsutil.
gsutil
En el ejemplo siguiente, el ID del proyecto es “123412341234”; el tuyo será diferente.
[ { "entity": "project-owners-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "owners" }, "role": "OWNER" }, { "entity": "project-editors-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "editors" }, "role": "OWNER" }, { "entity": "project-viewers-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "viewers" }, "role": "READER" } ]
API de JSON
En el ejemplo siguiente, el ID del proyecto es “123412341234”; el tuyo será diferente.
defaultObjectAcl": [ { "kind": "storage#objectAccessControl", "entity": "project-owners-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "owners" } }, { "kind": "storage#objectAccessControl", "entity": "project-editors-123412341234", "role": "OWNER", "projectTeam": { "projectNumber": "123412341234", "team": "editors" } }, { "kind": "storage#objectAccessControl", "entity": "project-viewers-123412341234", "role": "READER", "projectTeam": { "projectNumber": "123412341234", "team": "viewers" } } ]
API de XML
En el siguiente ejemplo, los ID de función del proyecto comienzan con “00b4903a97…”; tus ID de proyecto serán diferentes.
<?xml version='1.0' encoding='UTF-8'?> <AccessControlList> <Entries> <Entry> <Scope type='GroupById'> <ID>00b4903a9721...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type='GroupById'> <ID>00b4903a9722...</ID> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type='GroupById'> <ID>00b4903a9723...</ID> </Scope> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
Ten en cuenta que la LCA de objeto predeterminada para un bucket recién creado es equivalente a la LCA projectPrivate
predefinida.
Recupera las LCA
Para obtener la LCA de un objeto o bucket existente, haz lo siguiente:
Console
En Cloud Console, ve al navegador de Cloud Storage.
Ir al navegador de Cloud StorageNavega al objeto cuya LCA deseas ver.
Elige Editar permisos en el menú desplegable del objeto.
Deberías ver un diálogo con los permisos del objeto.
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Usa gsutil acl get
para mostrar la LCA de un objeto.
Por ejemplo, para mostrar la LCA del objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
gsutil acl get gs://example-travel-maps/paris.jpg
Respuesta de ejemplo:
[ { "entity": "project-owners-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "owners" }, "role": "OWNER" }, { "entity": "project-editors-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "editors" }, "role": "OWNER" }, { "entity": "project-viewers-123412341234", "projectTeam": { "projectNumber": "123412341234", "team": "viewers" }, "role": "READER" }, { "email": "gs-announce@googlegroups.com", "entity": "group-gs-announce@googlegroups.com", "role": "READER" }, { "email": "jane@gmail.com", "entity": "user-jane@gmail.com", "role": "READER" }, { "entity": "allUsers", "role": "READER" }, { "entity": "allAuthenticatedUsers", "role": "READER" } ]
Para mostrar la LCA de un depósito, haz lo siguiente:
gsutil acl get gs://BUCKET_NAME
Cuando gsutil muestra las LCA de los depósitos y objetos con gsutil acl get
, tienen el mismo formato JSON que puedes usar para establecer las LCA. Las LCA en formato JSON usan los nombres de propiedad de la API de JSON, como entity
y role
.
Consulta la sintaxis de la API de JSON para obtener más información sobre cómo interpretar el resultado o ejecutar gsutil help acls
.
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
En el ejemplo siguiente, se obtiene una LCA de bucket:
En el siguiente ejemplo, se obtiene una LCA de objeto:
API de JSON
Asegúrate de tener permiso
OWNER
en el objeto o bucket.Recupera la LCA de un objeto o bucket con una solicitud
GET
.La LCA de objeto se muestra en el formato JSON adjunta al cuerpo de la respuesta.
Por ejemplo, para mostrar la LCA del objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg?projection=full
Deberías ver una respuesta similar a esta:
{ "kind": "storage#object", "id": "example-travel-maps/paris.jpg/1412805837131000", "selfLink": "https://www.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg", "name": "paris.jpg", "bucket": "example-travel-maps", ... "acl": [ { ... "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, ... }, { ... "entity": "user-jane@gmail.com", "role": "OWNER", "email": "jane@gmail.com", ... }, { ... "entity": "group-gs-announce@googlegroups.com", "role": "READER", "email": "gs-announce@googlegroups.com", ... } ], "owner": { "entity": "user-jane@gmail.com" }, ... }
También puedes usar el método GET
de recurso objectAccessControls
para mostrar entradas individuales de la LCA de un objeto.
API de XML
Asegúrate de tener permiso
FULL_CONTROL
en el objeto o bucket.Recupera la LCA del objeto o bucket con el parámetro de string de consulta
acl
en una solicitud GET de objeto.
Las LCA se describen en XML, adjuntas al cuerpo de la respuesta.
Por ejemplo, para mostrar la LCA del objeto paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
curl -X GET -H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
Deberías ver una respuesta similar a esta:
<?xml version="1.0" encoding="UTF-8"?> <AccessControlList> <Owner> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> <Name>Owner Name</Name> </Owner> <Entries> <Entry> <Scope type="UserById"> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> <Name>Name</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> <Name>Jane</Name> </Scope> <Permission>FULL_CONTROL</Permission> </Entry> <Entry> <Scope type="GroupByEmail"> <EmailAddress>gs-announce@googlegroups.com</EmailAddress> </Scope> <Permission>READ</Permission> </Entry> </Entries> </AccessControlList>
También puedes usar el método JSON GET
del recurso ObjectAccessControls
para mostrar una entrada específica de la LCA.
Cambia las LCA
Para cambiar la LCA de un objeto o bucket existente, haz lo siguiente:
Console
En Cloud Console, ve al navegador de Cloud Storage.
Ir al navegador de Cloud StorageNavega al objeto cuya LCA deseas modificar.
Elige Editar permisos en el menú desplegable del objeto.
Deberías ver un diálogo con los permisos del objeto.
En el siguiente ejemplo, se muestra cómo otorgar el permiso OWNER
al usuario jane@gmail.com
y el permiso READER
a los miembros del grupo gs-announce
para el objeto paris.jpg
:
Consulta Solución de problemas para obtener información detallada sobre las operaciones fallidas en el navegador de Cloud Storage.
gsutil
Define las LCA en un archivo.
Pasa el archivo de LCA a
gsutil acl set
y especifica el objeto para activar las LCA.
Por ejemplo, para aplicar las LCA desde el archivo acls.txt
de un objeto llamado paris.jpg
en el bucket example-travel-maps
, haz lo siguiente:
gsutil acl set acl.txt gs://example-travel-maps/paris.jpg
El contenido de acl.txt
se muestra a continuación. Estas LCA otorgan a los propietarios del proyecto 867489160491
y al usuario jane@gmail.com
el permiso OWNER
para el objeto paris.jpg
, y otorgan a los miembros del grupo gs-announce
el permiso READER
:
[ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, }, { "entity": "user-jane@gmail.com", "email": "jane@gmail.com", "role": "OWNER" }, { "entity": "group-gs-announce@googlegroups.com", "email": "gs-announce@googlegroups.com", "role": "READER" } ]
También puedes establecer la misma LCA para este objeto con otorgamientos individuales.
Por ejemplo, para otorgar el acceso READER
al usuario jane@gmail.com
, usa lo siguiente:
gsutil acl ch -u jane@gmail.com:READ gs://example-travel-maps/paris.jpg.
Muestras de código
C++
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C++.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
C#
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para C#.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
Go
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Go.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
Java
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Java.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
Node.js
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Node.js.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
PHP
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para PHP.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
Python
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Python.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
Ruby
Si deseas obtener más información, consulta la documentación de referencia de la API de Cloud Storage para Ruby.
En el ejemplo siguiente, se quita la LCA de un bucket:
En el siguiente ejemplo, se quita la LCA de un objeto:
API de JSON
Define las LCA en un archivo de JSON.
Envía una solicitud de parche con el archivo JSON y especifica el objeto en el que establecerás las LCA.
Por ejemplo, con el siguiente comando cURL, se aplica una carga útil de JSON del documento acls.json
a un objeto llamado paris.jpg
en el bucket example-travel-maps
:
curl -X PATCH --data @acls.json -H "Content-Type: application/json"
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/storage/v1/b/example-travel-maps/o/paris.jpg
Si con la LCA se otorga a los propietarios del proyecto 867489160491
y al usuario jane@gmail.com
el permiso OWNER
, además de otorgar a los miembros del grupo gs-announce
el permiso READER
, la solicitud se parecerá al siguiente ejemplo:
PATCH /storage/v1/b/example-travel-maps/o/paris.jpg HTTP/1.1 Host: www.googleapis.com Content-Type: application/json Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg Content-Length: 597 Date: Wed, 08 Oct 2014 22:37:58 GMT { "acl": [ { "entity": "project-owners-867489160491", "role": "OWNER", "projectTeam": { "projectNumber": "867489160491", "team": "owners" }, { "entity": "user-jane@gmail.com", "role": "OWNER", "email": "jane@gmail.com" }, { "entity": "group-gs-announce@googlegroups.com", "role": "READER", "email": "gs-announce@googlegroups.com" } ] }
API de XML
Define las LCA en un documento XML.
Envía una solicitud
PUT Object
con el parámetro de string de consultaacl
y el documento XML correspondiente.
Con el siguiente comando cURL, se aplica una carga útil de XML desde el documento acls.xml
hasta un objeto llamado paris.jpg
en el bucket example-travel-maps
:
curl -X PUT --data-binary @acls.xml
-H "Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg"
https://storage.googleapis.com/example-travel-maps/paris.jpg?acl
Si la LCA otorga al usuario jane@gmail.com
el permiso FULL_CONTROL
y a los miembros del grupo gs-announce
el permiso READ
, la solicitud se parecerá al siguiente ejemplo:
PUT /paris.jpg?acl HTTP/1.1 Host: example-travel-maps.storage.googleapis.com Date: Sat, 20 Feb 2010 08:31:08 GMT Content-Length: 589 Content-Type=application/xml Authorization: Bearer ya29.AHES6ZRVmB7fkLtd1XTmq6mo0S1wqZZi3-Lh_s-6Uw7p8vtgSwg <?xml version='1.0' encoding='utf-8'?> <AccessControlList> <Owner> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> </Owner> <Entries> <Entry> <Permission>FULL_CONTROL
</Permission> <Scope type="UserById"> <ID>84fac329bceSAMPLE777d5d22b8SAMPLE77d85ac2SAMPLE2dfcf7c4adf34da46</ID> </Scope> </Entry> <Entry> <Scope type="UserByEmail"> <EmailAddress>jane@gmail.com</EmailAddress> <Name>Jane</Name> </Scope> <Permission>FULL_CONTROL
</Permission> </Entry> <Entry> <Scope type="GroupByEmail"> <EmailAddress>gs-announce@googlegroups.com</EmailAddress> </Scope> <Permission>READ
</Permission> </Entry> </Entries> </AccessControlList>
Próximos pasos
- Obtén más información sobre las Listas de control de acceso (LCA).
- Para aprender a simplificar el control de acceso, consulta Usa el acceso uniforme a nivel de bucket .