Este documento explica como veicular conteúdo estático seguro do Cloud Storage usando o Cloud Run e o Identity-Aware Proxy.
O Cloud Run permite hospedar um servidor da Web que disponibiliza conteúdo estático de um bucket privado do Cloud Storage. Adicionar o IAP ajuda a proteger o serviço do Cloud Run, evitando acesso não autorizado sem precisar recriar a imagem do contêiner quando o conteúdo muda.
A hospedagem de sites estáticos do Cloud Storage só veicula conteúdo público e exige
a concessão de acesso de leitura a allUsers. Se a organização restringir buckets públicos usando
políticas como prevenção de acesso público ou
compartilhamento restrito a domínio,
o recurso integrado de hospedagem de sites estáticos do Cloud Storage não estará disponível.
Em vez disso, mantenha o bucket particular, implante um servidor da Web NGINX no Cloud Run
com o bucket montado como um volume e use o IAP para controlar o acesso ao
serviço do Cloud Run.
Antes de começar
Para seguir as instruções neste documento, você precisa do seguinte:
- Um projeto do Google Cloud com o faturamento ativado. Acessar o console do Google Cloud
- Um bucket privado do Cloud Storage que contém seus arquivos estáticos (por exemplo,
index.html, CSS e imagens). Verifique se o bucket não é público. - A Google Cloud CLI instalada.
Conceder acesso ao bucket do Cloud Storage
O Cloud Run precisa de permissão para ler arquivos do seu bucket privado do Cloud Storage. É necessário conceder à identidade de serviço do Cloud Run o papel de Leitor de objetos do Storage (roles/storage.objectViewer) no bucket.
Recomendamos que você use uma conta de serviço gerenciado pelo usuário para seu serviço do Cloud Run em vez da conta de serviço padrão do Compute Engine.
Crie uma conta de serviço para usar como identidade de serviço:
gcloud iam service-accounts create RUN_SERVICE_ACCOUNT \ --description="Service account for Cloud Run serving Cloud Storage" \ --display-name="Cloud Run Cloud Storage Reader"Conceda à conta de serviço o papel de Leitor de objetos do Storage (
roles/storage.objectViewer) no bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member="serviceAccount:RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectViewer"
Implantar o serviço do Cloud Run
Implante o servidor da Web NGINX no Cloud Run e faça a montagem do bucket do Cloud Storage. É necessário usar o ambiente de execução de segunda geração para oferecer suporte a montagens de volume.
Para ativar o bucket, implante o serviço com flags de volume:
gcloud run deploy SERVICE_NAME \
--image=nginx \
--port=80 \
--execution-environment=gen2 \
--service-account=RUN_SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com \
--add-volume=name=static,type=cloud-storage,bucket=BUCKET_NAME,readonly=true \
--add-volume-mount=volume=static,mount-path=/usr/share/nginx/html \
--no-allow-unauthenticated
Substitua:
SERVICE_NAME: o nome do seu serviço do Cloud RunRUN_SERVICE_ACCOUNT: a conta de serviço que você criou na etapa anterior.PROJECT_ID: o ID do projeto do Google CloudBUCKET_NAME: o nome do bucket do Cloud Storage
O bucket é ativado em /usr/share/nginx/html, que é o diretório padrão em que o NGINX procura recursos estáticos. Isso significa que os arquivos no seu bucket são mapeados diretamente para o caminho raiz do serviço. Por exemplo, um arquivo armazenado em gs://BUCKET_NAME/index.html pode ser acessado em https://SERVICE_URL/index.html.
Para verificar a implantação, confira se o serviço bloqueia o acesso
não autenticado e retorna um status 403 Forbidden quando acessado sem credenciais:
curl -I SERVICE_URL
Outra opção é testar se o contêiner está renderizando corretamente arquivos do seu bucket privado do Cloud Storage antes de configurar o acesso da IAP. Para isso, execute o comando a seguir para enviar uma solicitação autenticada usando suas credenciais de desenvolvedor:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" SERVICE_URL
Substitua SERVICE_URL pelo URL do serviço do Cloud Run.
Ativar o IAP
Depois de implantar o serviço do Cloud Run, é possível ativar o IAP para protegê-lo.
Recomendamos que você ative o IAP diretamente no serviço do Cloud Run. Para instruções, consulte Configurar o IAP para o Cloud Run.
Como alternativa, se você usar um balanceador de carga HTTPS externo na frente do serviço do Cloud Run, ative o IAP no serviço de back-end. Para instruções, consulte Ativar o IAP em um serviço de back-end ou balanceador de carga.
Armazenamento em cache e desempenho
Quando você usa montagens de volume do Cloud Storage, cada arquivo lido pelo Cloud Run se traduz em uma chamada de API Storage do Cloud Storage. Para minimizar a latência e os custos de API, configure o armazenamento em cache no seu servidor da Web (por exemplo, usando diretivas de cache do NGINX) ou as opções de montagem do Cloud Storage FUSE.
Se você usar um balanceador de carga HTTPS externo, também poderá ativar o Cloud CDN no serviço de back-end. O IAP não é compatível com o Cloud CDN no mesmo serviço de back-end. Portanto, talvez seja necessário estruturar sua arquitetura de acordo com isso se você precisar dos dois.
Limitações
A leitura de arquivos de uma montagem de volume do Cloud Storage pode ser mais lenta do que o acesso a um sistema de arquivos local. Para mitigar a latência de leitura, configure o armazenamento em cache.
Outros casos de uso
Você também pode usar as montagens de volume do Cloud Storage em outros cenários:
- Funções orientadas a eventos: uma função lê arquivos enviados diretamente do sistema de arquivos.
- Aplicativos de IA generativa: um aplicativo carrega um banco de dados vetorial (como o Chroma) de um bucket do Cloud Storage usando leituras padrão do sistema de arquivos.
Alternativa: montagem de volumes NFS
Se os arquivos estiverem armazenados no Filestore ou em um servidor NFS autohospedado, monte volumes NFS no serviço do Cloud Run em vez de buckets do Cloud Storage. Para mais informações, consulte Como montar volumes NFS.