A assinatura V4 é um processo que pode ser usado para gerar assinaturas para autenticação em solicitações de API XML do Cloud Storage. Nesta página, descrevemos como usar o Google Cloud CLI e as bibliotecas de cliente do Cloud Storage para criar URLs assinados usando credenciais da conta de serviço. Os URLs assinados fornecem acesso de leitura ou gravação por tempo limitado a um recurso específico do Cloud Storage. Se quiser criar seu próprio programa para criar URLs assinados, leia Assinatura V4 com seu próprio programa.
Funções exigidas
Para ter as permissões necessárias à criação de um URL assinado para fazer o download e upload de objetos, peça ao administrador para conceder os seguintes papéis:
Usuário do objeto do Storage (
roles/storage.objectUser
): esse papel é necessário para fazer o download, upload e substituir objetos. Esse papel precisa ser concedido à conta de serviço cuja chave será usada para assinar o URL.Se você só quiser fazer o download de objetos, peça ao administrador para conceder à conta de serviço o papel Leitor de objetos do Storage (
roles/storage.objectViewer
) em vez do papel de Usuário do objeto do Storage.Se você quiser fazer upload apenas de objetos (sem substituir), peça ao administrador para conceder à conta de serviço o papel Criador de objetos do Storage (
roles/storage.objectCreator
), em vez do papel de Usuário de objetos do Storage.
Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator
): esse papel é necessário para gerar credenciais de curta duração para uma conta de serviço quando um arquivo de chave privada não é fornecido localmente. Esse papel precisa ser concedido ao principal que vai criar o URL assinado.Se você usar credenciais de usuário para autenticação, sua identidade do usuário precisará ter esse papel e você precisará modificar os comandos para representar a conta de serviço usada para assinar o URL.
Se você usar uma conta de serviço anexada a uma instância da computação para autenticação, a conta de serviço precisará ter esse papel para se representar e será necessário modificar os comandos para representar a conta de serviço usada para assinar o URL.
Se você usar um arquivo de chave privada para autenticação, esse papel não será necessário.
Esses papéis predefinidos contêm as permissões necessárias para que uma conta de serviço faça o download e o upload de objetos usando URLs assinados. Para conferir as permissões exatas, abra a seção Permissões necessárias:
Permissões necessárias
storage.objects.get
storage.objects.create
(não é obrigatório se você quiser fazer o download de objetos)storage.objects.delete
(não será necessário se você não precisar substituir objetos ao fazer upload)iam.serviceAccounts.signBlob
(não é obrigatório se você planeja fornecer uma chave de conta de serviço localmente para criar a assinatura, o que não exige a chamada do métodosignBlob
)
Essas permissões também podem ser concedidas com papéis personalizados ou outros papéis predefinidos. Para conferir quais papéis estão associados a quais permissões, consulte Papéis do IAM para o Cloud Storage.
Para instruções sobre como conceder papéis a projetos, consulte Gerenciar o acesso aos projetos.
Criar um URL assinado para fazer o download de um objeto
Para criar um URL assinado que consiga um objeto de um bucket, conclua as etapas a seguir:
Linha de comando
Gere uma nova chave privada ou use uma atual de uma conta de serviço. A chave precisa estar no formato JSON.
Para mais informações sobre chaves privadas e contas de serviço, consulte Contas de serviço.
Use o comando
gcloud storage sign-url
. Por exemplo, o comando a seguir cria um URL assinado que permite aos usuários fazer o download de um objeto por dez minutos:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --duration=10m
Em que:
BUCKET_NAME
é o nome do bucket em que o objeto está. Por exemplo,example-bucket
.OBJECT_NAME
é o nome do objeto para o download. Por exemplo,cat.jpeg
.KEY_FILE
é o caminho para o arquivo que contém a chave privada da conta de serviço. Por exemplo,Desktop/private-key.json
.
Se bem-sucedida, a resposta será assim:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.googleapis.com/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=example%40example-pro ject.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog4_requ est&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-signedhe aders=host
Esse URL pode ser usado por qualquer pessoa para acessar o recurso associado (neste caso,
cat.jpeg
) pelo período designado (neste caso, dez minutos).
Bibliotecas de cliente
C++
Para mais informações, consulte a documentação de referência da API Cloud Storage C++.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para mais informações, consulte a documentação de referência da API Cloud Storage C#.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para mais informações, consulte a documentação de referência da API Cloud Storage Go.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para mais informações, consulte a documentação de referência da API Cloud Storage Java.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para mais informações, consulte a documentação de referência da API Cloud Storage Node.js.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para mais informações, consulte a documentação de referência da API Cloud Storage PHP.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para mais informações, consulte a documentação de referência da API Cloud Storage Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para mais informações, consulte a documentação de referência da API Cloud Storage Ruby.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Criar um URL assinado para fazer upload de um objeto
Para criar um URL assinado que possa fazer upload de um objeto para um bucket, conclua as etapas a seguir:
Linha de comando
Gere uma nova chave privada ou use uma atual de uma conta de serviço. A chave pode estar no formato JSON ou PKCS12.
Para mais informações sobre chaves privadas e contas de serviço, consulte Contas de serviço.
Use o comando
gcloud storage sign-url
. Por exemplo, o seguinte comando cria um URL assinado que permite aos usuários fazer upload de um arquivo por uma hora:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --private-key-file=KEY_FILE --http-verb=PUT --duration=1h --headers=Content-Type=CONTENT_TYPE
BUCKET_NAME
é o nome do bucket para o qual o objeto está sendo enviado. Por exemplo,example-bucket
.OBJECT_NAME
é o nome a ser atribuído ao objeto enviado. Por exemplo,cat.png
.KEY_FILE
é o caminho para o arquivo que contém a chave privada da conta de serviço. Por exemplo,Desktop/private-key.json
.CONTENT_TYPE
é o tipo de conteúdo do objeto enviado. Por exemplo,image/png
.
Se bem-sucedida, a resposta será assim:
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.googleapis.com/example-bucket/cat.png? x-goog-signature=2f670a686102963e0574f3c1a3b4d29ee4aa406c1528d42d2 30195d17fef73834b254314de7d7990afd48538a84b66f20010e7ecd90a900490e 6119b7e56a912f71c8d64285c40e86f31b8fec51cf8c7a61ded81de3cedac9c1ca b92474b7371740fdac20b2d8d092b15396f79443bbde954a4174ed11aef6c2cf5f a4d72a84ff60fd6003ed0a505b0e40b6207ddbaec2a15778f715c3ec7537a1b14f b6661b2abaa5736f1670a412ca7e2555c830591f0595c01ff95af7f2206abe2e27 41948c16d4bd4c7cbb25f41277ece59236c06e00ca6c63ae2eb3efc22c216bb24c e1b8b3801d07fd3a7ed3f2df3db6e59c6fc3cc76a002335dd936efd0237cf584e3 6&x-goog-algorithm=GOOG4-RSA-SHA256&x-goog-credential=example%40ex ample-project.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2F goog4_request&x-goog-date=20230714T223547Z&x-goog-expires=3600&x-g oog-signedheaders=Content-Type%3Bhost
Este URL pode ser usado por qualquer pessoa para fazer upload de um recurso (neste caso,
cat.png
) no bucket do Cloud Storage especificado pelo período designado (neste caso, uma hora).
Bibliotecas de cliente
C++
Para mais informações, consulte a documentação de referência da API Cloud Storage C++.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
C#
Para mais informações, consulte a documentação de referência da API Cloud Storage C#.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Go
Para mais informações, consulte a documentação de referência da API Cloud Storage Go.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Java
Para mais informações, consulte a documentação de referência da API Cloud Storage Java.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Node.js
Para mais informações, consulte a documentação de referência da API Cloud Storage Node.js.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
PHP
Para mais informações, consulte a documentação de referência da API Cloud Storage PHP.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Python
Para mais informações, consulte a documentação de referência da API Cloud Storage Python.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
Ruby
Para mais informações, consulte a documentação de referência da API Cloud Storage Ruby.
Para autenticar no Cloud Storage, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
A seguir
- Saiba como assinar URLs com seu próprio programa.
- Saiba mais sobre URLs assinado .
- Saiba mais sobre como fazer o upload de um objeto com a API XML.
- Saiba mais sobre o upload de objetos.