Nesta página, mostramos como usar as restrições personalizadas do serviço de políticas da organização do Google Cloud para restringir operações específicas nos seguintes recursos do Cloud Storage for Firebase:
firebasestorage.googleapis.com/DefaultBucket
Para saber mais sobre políticas da organização, consulte Políticas personalizadas da organização.
Sobre políticas da organização e restrições
O serviço de políticas da organização do Google Cloud oferece controle centralizado e programático sobre os recursos da sua organização. Como administrador de políticas da organização, você pode definir uma política da organização, que é um conjunto de limites chamado restrições que se aplicam aos recursos do Google Cloud e aos descendentes desses recursos na hierarquia de recursos do Google Cloud. É possível aplicar políticas da organização no nível da organização, da pasta ou do projeto.
A política da organização oferece restrições gerenciadas e integradas para vários serviços do Google Cloud. No entanto, para ter controle mais granular e personalizável sobre os campos específicos restritos nas políticas da organização, também é possível criar restrições personalizadas e usá-las nessas políticas.
Herança de políticas
Por padrão, as políticas da organização são herdadas pelos elementos que descendem dos recursos em que elas são aplicadas. Por exemplo, se você aplicar uma política a uma pasta, o Google Cloud vai aplicá-la a todos os projetos dessa pasta. Para saber mais sobre esse comportamento e como alterá-lo, consulte Regras de avaliação de hierarquia.
Além disso, como o Cloud Storage for Firebase armazena arquivos em buckets Cloud Storage, todas as políticas da organização ou restrições personalizadas aplicadas aos recursos do Cloud Storage também se aplicam aos buckets do Cloud Storage for Firebase.
Vantagens
- Segurança e governança: aplique o controle organizacional centralizado sobre o provisionamento de buckets do Cloud Storage para garantir a conformidade com as proteções de residência de dados e gerenciamento de custos.
- Controle de atributos detalhado: restrinja a criação de buckets padrão com base
em atributos de recursos específicos, como
storageClassoulocation.
Limitações
As limitações a seguir se aplicam ao usar políticas personalizadas da organização com Cloud Storage for Firebase:
- Sem aplicação retroativa: as restrições personalizadas recém-aplicadas não se aplicam aos recursos atuais. Os buckets padrão atuais não são avaliados, a menos que sejam atualizados. Para identificar recursos que podem violar uma restrição, teste as políticas usando o modo de teste.
- Restrições de controle de acesso: as restrições personalizadas não podem restringir listas de controle de acesso (ACLs) ou políticas do IAM em buckets.
Antes de começar
No console do Firebase, selecione ou crie um projeto do Firebase.
Verifique se o projeto faz parte de uma organização e se você sabe o ID da organização.
Para configurar e aplicar restrições personalizadas usando a linha de comando, instale a CLI do Google Cloud (
gcloud). As políticas personalizadas da organização não podem ser gerenciadas usando a CLI do Firebase.
Funções exigidas
Para receber as permissões necessárias para gerenciar as políticas personalizadas da organização, peça ao administrador para conceder a você o papel do IAM de Administrador de políticas da organização (roles/orgpolicy.policyAdmin) na organização.
Recursos compatíveis com Cloud Storage for Firebase
A tabela a seguir lista os recursos do Cloud Storage for Firebase que podem ser referenciados em restrições personalizadas. Também é possível consultar os recursos compatíveis com o Cloud Storage, já que as restrições personalizadas nesses recursos também se aplicam aos buckets do Cloud Storage for Firebase.
| Recurso | Campos aceitos |
|---|---|
firebasestorage.googleapis.com/DefaultBucket |
|
Configurar uma restrição personalizada
Uma restrição personalizada é definida em um arquivo YAML pelos recursos, métodos, condições e ações compatíveis com o serviço em que você está aplicando a política da organização. As condições das restrições personalizadas são definidas usando a Common Expression Language (CEL). Para saber como criar condições em restrições personalizadas usando a CEL, consulte a seção CEL em Como criar e gerenciar restrições personalizadas.
Console
Para criar uma restrição personalizada, faça o seguinte:
- No console do Google Cloud, acesse a página Políticas da organização.
- No seletor de projetos, selecione o projeto em que você quer definir a política da organização.
- Clique em Restrição personalizada.
- Na caixa Nome de exibição, insira um nome legível por humanos para a restrição. Esse nome é usado em mensagens de erro e pode ser usado para identificação e depuração. Não use informações de identificação pessoal (PII) ou dados sensíveis em nomes de exibição, porque esse nome pode ser exposto em mensagens de erro. Esse campo pode conter até 200 caracteres.
- Na caixa ID da restrição, insira o ID que você quer para a nova restrição personalizada. Uma restrição personalizada só pode conter letras (incluindo maiúsculas e minúsculas) ou números, por exemplo,
custom.restrictStorageClass. Esse campo pode conter até 70 caracteres, sem contar o prefixo (custom.), por exemplo,organizations/123456789/customConstraints/custom.restrictStorageClass. Não inclua PII ou dados sensíveis no ID da restrição, porque eles podem ser expostos em mensagens de erro. - Na caixa Descrição, insira uma descrição legível por humanos da restrição. Essa descrição é usada como uma mensagem de erro quando a política é violada. Inclua detalhes sobre o motivo da violação da política e como resolvê-la. Não inclua PII ou dados sensíveis na descrição, porque eles podem ser expostos em mensagens de erro. Esse campo pode conter até 2.000 caracteres.
- Na caixa Tipo de recurso, selecione o nome do recurso REST que contém o objeto e o campo que você quer restringir. Por exemplo,
firebasestorage.googleapis.com/DefaultBucket. A maioria dos tipos de recursos aceita até 20 restrições personalizadas. Se você tentar criar mais restrições personalizadas, a operação vai falhar. - Em Método de aplicação, selecione se quer aplicar a restrição em um método REST
CREATEou em ambos os métodosCREATEeUPDATE. Observação: oDefaultBucketsó é compatível comCREATE. - Para definir uma condição, clique em Editar condição.
- No painel Adicionar condição, crie uma condição de CEL que se refira a um recurso de serviço compatível, por exemplo,
resource.storageClass == 'STANDARD'. Esse campo pode conter até 1.000 caracteres. Para detalhes sobre o uso da CEL, consulte Common Expression Language. - Clique em Salvar.
- No painel Adicionar condição, crie uma condição de CEL que se refira a um recurso de serviço compatível, por exemplo,
- Em Ação, selecione se você quer permitir ou negar o método avaliado quando a condição é atendida.
A ação de negação significa que a operação para criar ou atualizar o recurso será bloqueada se a condição for avaliada como verdadeira.
A ação de permissão significa que a operação para criar ou atualizar o recurso só é permitida se a condição for avaliada como verdadeira. Todos os outros casos, exceto os listados explicitamente na condição, estão bloqueados.
- Clique em Criar restrição.
gcloud
- Para criar uma restrição personalizada, crie um arquivo YAML com o seguinte formato:
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.
- Depois de criar o arquivo YAML para uma nova restrição personalizada, faça a configuração necessária para disponibilizá-la para as políticas da organização. Para configurar uma restrição personalizada, use o comando
gcloud org-policies set-custom-constraint:gcloud org-policies set-custom-constraint CONSTRAINT_PATH
Substitua
CONSTRAINT_PATHpelo caminho completo do arquivo da restrição personalizada. Por exemplo,/home/user/customconstraint.yaml. - Para verificar se a restrição personalizada existe, use o comando
gcloud org-policies list-custom-constraints:gcloud org-policies list-custom-constraints --organization=ORGANIZATION_ID
Aplicar uma política personalizada da organização
Para aplicar uma restrição, crie uma política da organização que faça referência a ela e aplique essa política a um recurso do Google Cloud.
Console
- No console do Google Cloud, acesse a página Políticas da organização.
- No seletor de projetos, selecione o projeto em que você quer definir a política da organização.
- Na lista da página Políticas da organização, selecione uma restrição para acessar a página Detalhes da política associada.
- Para configurar a política da organização nesse recurso, clique em Gerenciar política.
- Na página Editar política, selecione Substituir a política do recurso pai.
- Clique em Adicionar regra.
- Na seção Aplicação, selecione se essa política da organização será aplicada ou não.
- Para aplicar a política da organização no modo de teste, clique em Definir política de simulação. Para mais informações, consulte Testar políticas da organização.
- Depois de verificar se a política da organização no modo de teste funciona como esperado, defina a política ativa clicando em Definir política.
gcloud
- Para criar uma política da organização com regras booleanas, crie um arquivo YAML para a política que faça referência à restrição:
name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: true dryRunSpec: rules: - enforce: true
- Para aplicar a política da organização no modo de teste, execute o seguinte comando com a flag
dryRunSpec:gcloud org-policies set-policy POLICY_PATH --update-mask=dryRunSpec
- Depois de verificar se a política da organização no modo de teste funciona como esperado, defina a política ativa com o comando
org-policies set-policye a flagspec:gcloud org-policies set-policy POLICY_PATH --update-mask=spec
Testar a política personalizada da organização
O exemplo a seguir cria uma restrição e uma política personalizadas que exigem que todos os
buckets padrão recém-criados evitem usar a classe de armazenamento STANDARD. Para testar a política, tente realizar uma ação que ela precisa impedir.
Criar a restrição
Salve o seguinte arquivo como
constraint-restrict-storage-class.yaml:name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class.Substitua
ORGANIZATION_IDpelo ID da organização.Aplique a restrição:
gcloud org-policies set-custom-constraint ~/constraint-restrict-storage-class.yamlVerifique se a restrição existe:
gcloud org-policies list-custom-constraints --organization=ORGANIZATION_IDO resultado será o seguinte:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME custom.restrictStorageClass DENY CREATE firebasestorage.googleapis.com/DefaultBucket Restrict Standard Storage Class ...
Criar a política
Salve o seguinte arquivo como
policy-restrict-storage-class.yaml:name: projects/PROJECT_ID/policies/custom.restrictStorageClass spec: rules: - enforce: trueSubstitua
PROJECT_IDpelo ID do projeto.Aplique a política:
gcloud org-policies set-policy ~/policy-restrict-storage-class.yamlVerifique se a política existe:
gcloud org-policies list --project=PROJECT_IDO resultado será assim:
CONSTRAINT LIST_POLICY BOOLEAN_POLICY ETAG custom.restrictStorageClass - SET CIqktscGELiZn6cC-
Depois de aplicar a política, aguarde cerca de dois minutos para que o Google Cloud comece a aplicar a política.
Testar a política
Tente criar um bucket padrão usando a API REST Cloud Storage for Firebase
sem especificar uma classe de armazenamento (que assume como padrão STANDARD):
PROJECT_ID="PROJECT_ID"
TOKEN=$(gcloud auth print-access-token)
curl -X POST "https://firebasestorage.googleapis.com/v1beta/projects/${PROJECT_ID}/defaultBucket" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{"location": "US-EAST1"}'
A solicitação falha com um erro semelhante ao seguinte:
FAILED_PRECONDITION: Operation denied by org policy: ["customConstraints/custom.restrictStorageClass": "Deny creating buckets with STANDARD storage class."].
- '@type': type.googleapis.com/google.rpc.ErrorInfo
domain: iam.googleapis.com
metadata:
customConstraints: customConstraints/custom.restrictStorageClass
reason: CUSTOM_ORG_POLICY_VIOLATION
Exemplos de políticas personalizadas da organização para casos de uso comuns
Confira na tabela a sintaxe de algumas restrições personalizadas comuns.
| Descrição | Sintaxe da restrição |
|---|---|
| Restringir a criação de buckets padrão com a classe de armazenamento Standard Storage |
name: organizations/ORGANIZATION_ID/customConstraints/custom.restrictStorageClass resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.storageClass == 'STANDARD'" actionType: DENY displayName: Restrict Standard Storage Class description: Deny creating buckets with STANDARD storage class. |
| Exigir que os buckets padrão sejam criados em um local específico |
name: organizations/ORGANIZATION_ID/customConstraints/custom.requireDefaultBucketLocation resourceTypes: - firebasestorage.googleapis.com/DefaultBucket methodTypes: - CREATE condition: "resource.location != 'US-EAST1'" actionType: DENY displayName: Require US-EAST1 Location description: Deny creating default buckets outside the US-EAST1 location. |
A seguir
- Saiba mais sobre o Serviço de Políticas da Organização.
- Saiba mais sobre como criar e gerenciar políticas da organização.
- Confira a lista completa de restrições de política da organização gerenciadas.