Ativar o IAP para buckets do Cloud Storage

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 veicula conteúdo estático de um bucket privado do Cloud Storage. A adição do IAP ajuda a proteger o serviço do Cloud Run, impedindo o acesso não autorizado e evitando a necessidade de recriar a imagem do contêiner quando o conteúdo muda.

A hospedagem de sites estáticos do Cloud Storage veicula apenas 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 por domínio, o recurso de hospedagem de sites estáticos do Cloud Storage integrado não estará disponível. Em vez disso, mantenha o bucket privado, implante um servidor da Web NGINX no Cloud Run com o bucket ativado como um volume e use o IAP para controlar o acesso ao serviço do Cloud Run.

Antes de começar

Para concluir as instruções neste documento, você precisa do seguinte:

  • Um Google Cloud projeto com faturamento ativado. Acessar o Google Cloud console
  • 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 bucket privado do Cloud Storage. Você precisa 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 o serviço do Cloud Run em vez da conta de serviço padrão do Compute Engine.

  1. Crie uma conta de serviço para usar como a 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"
    
  2. 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 ative o bucket do Cloud Storage. Você precisa usar o ambiente de execução de segunda geração para oferecer suporte a ativações 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 serviço do Cloud Run
  • RUN_SERVICE_ACCOUNT: a conta de serviço que você criou na etapa anterior
  • PROJECT_ID: seu Google Cloud ID do projeto
  • BUCKET_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 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

Como alternativa, você pode testar se o contêiner está renderizando arquivos corretamente do bucket privado do Cloud Storage antes de configurar o acesso do IAP. Para fazer isso, execute o comando a seguir para enviar uma solicitação autenticada usando as credenciais do 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, você pode 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, poderá ativar 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

Ao usar montagens de volume do Cloud Storage, cada arquivo lido pelo Cloud Run é convertido em uma chamada de API Storage. Para minimizar a latência e os custos da API, configure o armazenamento em cache no servidor da Web (por exemplo, usando diretivas de armazenamento em cache do NGINX) ou configure as opções de ativação do Cloud Storage FUSE.

Se você usar um balanceador de carga HTTPS externo, também poderá ativar 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 a necessidade de ambos.

Limitações

A leitura de arquivos de uma ativação de volume do Cloud Storage pode ser mais lenta do que o acesso a um sistema de arquivos local. Para reduzir a latência de leitura, configure o armazenamento em cache.

Outros casos de uso

Você também pode usar ativações de volume do Cloud Storage para 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: ativar volumes NFS

Se os arquivos estiverem armazenados no Filestore ou em um servidor NFS auto-hospedado, você poderá ativar volumes NFS no serviço do Cloud Run em vez de buckets do Cloud Storage. Para mais informações, consulte Ativar volumes NFS.