A assinatura V4 é um processo que pode usar para gerar assinaturas para autenticação em pedidos da API XML do Cloud Storage. Esta página descreve como usar a CLI Google Cloud e as bibliotecas cliente do Cloud Storage para criar URLs assinados, usando credenciais de contas de serviço. Os URLs assinados dão acesso de leitura ou escrita por tempo limitado a um recurso específico do Cloud Storage. Se quiser criar o seu próprio programa para criar URLs assinados, leia o artigo Assinatura V4 com o seu próprio programa.
Antes de começar
Antes de realizar as tarefas nesta página, conclua os seguintes passos:
Enable the Service Account Credentials API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles.Crie uma conta de serviço. Se já tiver uma conta de serviço que quer usar para assinar URLs, pode ignorar este passo.
Conceda à conta de serviço autorização suficiente para que possa executar o pedido que o URL assinado vai fazer. Por exemplo, se o URL assinado permitir que um utilizador leia os dados de objetos, a conta de serviço tem de ter autorização para ler os dados de objetos.
Para as tarefas descritas neste guia, peça ao seu administrador para conceder uma das seguintes funções de IAM à conta de serviço:
Utilizador de objetos de armazenamento (
roles/storage.objectUser
): use esta função para criar URLs assinados para carregar e transferir objetos. Esta função também é necessária se o URL assinado puder substituir um objeto existente.Visualizador de objetos de armazenamento (
roles/storage.objectViewer
): use esta função se quiser apenas criar URLs assinados para transferir objetos.Criador de objetos de armazenamento (
roles/storage.objectCreator
): use esta função se quiser apenas criar URLs assinados para carregar objetos e o objeto carregado não substituir um objeto existente no contentor.
Estas funções predefinidas contêm as autorizações necessárias para criar URLs assinados que transferem e carregam objetos. Para ver as autorizações exatas necessárias, expanda a secção Autorizações necessárias:
Autorizações necessárias
storage.objects.get
(não é necessário se só quiser carregar objetos)storage.objects.create
(não é necessário se quiser apenas transferir objetos)storage.objects.delete
(não é necessário se não precisar de substituir objetos durante o carregamento)
Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas. Para ver que funções estão associadas a que autorizações, consulte as funções de IAM para o Cloud Storage.
Ter autorização suficiente para assinar blobs com a conta de serviço. Peça ao seu administrador para conceder a função de criador de tokens de conta de serviço (
roles/iam.serviceAccountTokenCreator
).Se usar credenciais de utilizador para autenticação, deve ser o principal ao qual esta função foi atribuída, e esta função deve ser concedida na conta de serviço que vai ser usada para criar os URLs assinados.
Se usar uma conta de serviço associada a uma instância de computação para autenticação, a conta de serviço tem de ser o principal para esta função para se fazer passar por si própria, e esta função deve ser concedida no projeto que contém a conta de serviço.
Esta função predefinida contém a autorização necessária para assinar blobs com uma conta de serviço. Para ver a autorização exata necessária, expanda a secção Autorizações necessárias:
Autorizações necessárias
iam.serviceAccounts.signBlob
Também pode conseguir esta autorização com funções personalizadas ou outras funções predefinidas. Para ver que funções estão associadas a que autorizações, consulte as funções de IAM para o Cloud Storage.
Para obter instruções sobre como conceder funções em projetos, consulte o artigo Gerir o acesso a projetos.
Crie um URL assinado para transferir um objeto
Para criar um URL assinado que possa obter um objeto de um contentor, conclua os seguintes passos:
Linha de comandos
Use o comando
gcloud storage sign-url
. Por exemplo, o comando seguinte cria um URL assinado que permite aos utilizadores transferir um objeto durante 10 minutos:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --duration=10m
Onde:
BUCKET_NAME
é o nome do contentor onde o objeto está localizado. Por exemplo,example-bucket
.OBJECT_NAME
é o nome do objeto a transferir. Por exemplo,cat.jpeg
.SERVICE_ACCOUNT_EMAIL
é o endereço de email de uma conta de serviço cuja chave fará a assinatura. Por exemplo,signed-url-account@my-project.s3ns.iam.gserviceaccount.com
.
Se for bem-sucedido, a resposta deve ter o seguinte aspeto:
--- expiration: '2023-07-14 23:19:35' http_verb: GET resource: gs://example-bucket/cat.jpeg signed_url: https://storage.s3nsapis.fr/example-bucket/cat.jpeg? x-goog-signature=11ae9c61ca84dd0bec319f7d52a38029e5873caa2eeced0568 ef96076258cfc1a925a9683cc907d210036b61af9e06a13bf4a15b15fab3916669b e2f4c9f66ea6be822bec5858af519a6da705415b5768721197be213103fa09b8a18 8a143be77a24351517ff208a2c62cfebb78040daf1f953907080bd98f9462739d11 1355b1d9bcf54705b862f37392c031fde0d52add1a4d3bbb98a22e8b7023f6a1623 2e0a2dd56e524d410624d28663e557fafaf4ba0a04290a1066f894713857b429258 d14f056066c7622baf114c124e645688e19b4df3c4a7925f580693c93fa9c1dae7f dff0edff7259c72f3f0eadc5a9f9f556c83c9c8dc02ee3af8d20ab634bad&x-goog -algorithm=GOOG4-RSA-SHA256&x-goog-credential=signed-url-account%40 my-project.s3ns.iam.gserviceaccount.com%2F20230714%2Fus%2Fstorage%2Fgoog 4_request&x-goog-date=20230714T221935Z&x-goog-expires=600&x-goog-si gnedheaders=host
Este URL pode ser usado por qualquer pessoa para aceder ao recurso associado (neste caso,
cat.jpeg
) durante o período designado (neste caso, 10 minutos).
Bibliotecas cliente
C++
Para mais informações, consulte a documentação de referência da API C++ do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
C#
Para mais informações, consulte a documentação de referência da API C# do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Go
Para mais informações, consulte a documentação de referência da API Go do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Java
Para mais informações, consulte a documentação de referência da API Java do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Node.js
Para mais informações, consulte a documentação de referência da API Node.js do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
PHP
Para mais informações, consulte a documentação de referência da API PHP do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Python
Para mais informações, consulte a documentação de referência da API Python do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Ruby
Para mais informações, consulte a documentação de referência da API Ruby do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Crie um URL assinado para carregar um objeto
Para criar um URL assinado que possa carregar um objeto para um contentor, conclua os seguintes passos:
Linha de comandos
Use o comando
gcloud storage sign-url
. Por exemplo, o comando seguinte cria um URL assinado que permite aos utilizadores carregar um ficheiro durante uma hora:gcloud storage sign-url gs://BUCKET_NAME/OBJECT_NAME --impersonate-service-account=SERVICE_ACCOUNT_EMAIL --http-verb=PUT --duration=1h --headers=content-type=CONTENT_TYPE
BUCKET_NAME
é o nome do contentor onde o objeto está a ser carregado. Por exemplo,example-bucket
.OBJECT_NAME
é o nome a atribuir ao objeto carregado. Por exemplo,cat.png
.SERVICE_ACCOUNT_EMAIL
é o endereço de email de uma conta de serviço cuja chave fará a assinatura. Por exemplo,signed-url-account@my-project.s3ns.iam.gserviceaccount.com
.CONTENT_TYPE
é o tipo de conteúdo do objeto carregado. Por exemplo,image/png
.
Se for bem-sucedido, a resposta deve ter o seguinte aspeto:
--- expiration: '2023-07-14 23:35:47' http_verb: PUT resource: gs://example-bucket/cat.png signed_url: https://storage.s3nsapis.fr/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=signed-url-a ccount%40my-project.s3ns.iam.gserviceaccount.com%2F20230714%2Fus%2Fstor age%2Fgoog4_request&x-goog-date=20230714T223547Z&x-goog-expires=36 00&x-goog-signedheaders=content-type%3Bhost
Este URL pode ser usado por qualquer pessoa para carregar um recurso (neste caso,
cat.png
) para o contentor do Cloud Storage especificado durante o período designado (neste caso, 1 hora).
Bibliotecas cliente
C++
Para mais informações, consulte a documentação de referência da API C++ do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
C#
Para mais informações, consulte a documentação de referência da API C# do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Go
Para mais informações, consulte a documentação de referência da API Go do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Java
Para mais informações, consulte a documentação de referência da API Java do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Node.js
Para mais informações, consulte a documentação de referência da API Node.js do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
PHP
Para mais informações, consulte a documentação de referência da API PHP do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Python
Para mais informações, consulte a documentação de referência da API Python do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
Ruby
Para mais informações, consulte a documentação de referência da API Ruby do Cloud Storage.
Para se autenticar no Cloud Storage, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para bibliotecas de cliente.
Antes de executar exemplos de código, defina a variável GOOGLE_CLOUD_UNIVERSE_DOMAIN
environment
como s3nsapis.fr
.
O que se segue?
- Saiba como assinar URLs com o seu próprio programa.
- Saiba mais sobre os URLs assinados.
- Saiba como carregar um objeto com a API XML.
- Saiba mais acerca do carregamento de objetos.