A política da organização fornece restrições predefinidas para o Cloud Storage. No entanto, se você quiser um controle mais granular e personalizável sobre os campos específicos restritos nas suas políticas da organização, crie também restrições personalizadas e use-as em uma política da organização.
Nesta página, descrevemos como definir restrições personalizadas para aplicar políticas a recursos do Cloud Storage.
Para testar uma nova restrição antes de ser aplicada no seu ambiente de produção, use o Simulador de políticas.
Herança de políticas
Por padrão, as políticas da organização são herdadas pelos descendentes dos recursos em que a política é aplicada. Por exemplo, se você aplicar uma política em uma organização, Google Cloud a política será aplicada a todos os projetos dessa organização. Para saber mais sobre esse comportamento e como alterá-lo, consulte Regras de avaliação de hierarquia.
Preços
O Serviço de políticas da organização, incluindo restrições predefinidas e personalizadas, é oferecido sem custos financeiros.
Limitações
As restrições personalizadas para recursos do Cloud Storage só podem ser configuradas usando o console do Google Cloud ou a CLI do Google Cloud.
As restrições personalizadas só podem ser aplicadas nos métodos
CREATE
ouUPDATE
dos recursos do Cloud Storage.As restrições personalizadas recém-aplicadas não se aplicam automaticamente aos recursos atuais. Os recursos atuais precisam ser atualizados para que a restrição seja aplicada.
Para encontrar recursos que precisarão ser atualizados, aplique uma política da organização de simulação.
As restrições personalizadas não podem ser usadas para restringir ACLs ou políticas do IAM em objetos ou buckets.
Recursos compatíveis com o Cloud Storage
Para o Cloud Storage, é possível definir restrições personalizadas no seguinte recurso:
- Buckets:
storage.googleapis.com/Bucket
Funções exigidas
Para informações sobre os papéis necessários para gerenciar políticas da organização com restrições personalizadas, consulte Papéis obrigatórios.
Além de gerenciar as políticas da organização, teste as restrições personalizadas criadas por você. Para testar restrições personalizadas, é recomendável usar o papel predefinido ou personalizado menos permissivo que contenha as permissões necessárias para testar a restrição específica. Consulte os papéis e permissões do Cloud Storage para saber quais são as permissões necessárias.
Configurar uma restrição personalizada
No console do Google Cloud, acesse a página Políticas da organização.
Selecione o Seletor de projetos na parte superior da página.
No Seletor de projetos, selecione o recurso em que você quer definir a política da organização.
Clique em
Restrição personalizada.No campo Nome de exibição, insira um nome legível para a restrição. Esse campo tem um comprimento máximo de 200 caracteres. Não use PII ou dados confidenciais em nomes de restrições, porque eles podem ser expostos em mensagens de erro.
Na caixa ID da restrição, insira o nome que você quer para a nova restrição personalizada. Uma restrição personalizada precisa começar com
custom.
e só pode incluir letras maiúsculas, minúsculas ou números, por exemplo,custom.enforceBucketVersioning
. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo,organizations/123456789/customConstraints/custom.
).No campo Descrição, insira uma descrição legível a ser exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2000 caracteres.
No campo Tipo de recurso, selecione o nome do recurso REST Google Cloud que contém o objeto e o campo que você quer restringir. Por exemplo,
storage.googleapis.com/Bucket
.Em Método de aplicação, selecione se a restrição será aplicada no método REST
CREATE
ouUPDATE
.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.versioning.enabled == true
. Esse campo tem um comprimento máximo de 1000 caracteres.Clique em Salvar.
Em Ação, selecione se você quer permitir ou negar o método avaliado quando a condição é atendida.
Clique em Criar restrição.
Quando você insere um valor em cada campo, a configuração YAML equivalente para essa restrição personalizada é exibida à direita.
Para criar uma restrição personalizada usando a Google Cloud CLI, crie um arquivo YAML para essa restrição:
name: organizations/ORGANIZATION_ID /customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION "
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION
Substitua:
ORGANIZATION_ID
: o ID da organização, como123456789
.CONSTRAINT_NAME
: o nome da sua nova restrição personalizada. Uma restrição personalizada precisa começar comcustom.
e só pode incluir letras maiúsculas, minúsculas ou números, por exemplo,custom.enforceBucketVersioning
. O tamanho máximo desse campo é de 70 caracteres, sem contar o prefixo (por exemplo,organizations/123456789/customConstraints/custom.
).RESOURCE_NAME
: o nome totalmente qualificado do recurso RESTGoogle Cloud que contém o objeto e o campo que você quer restringir. Por exemplo,storage.googleapis.com/Bucket
.METHOD1,METHOD2
: uma lista de métodos "RESTful" para aplicar a restrição. Pode serCREATE
ouCREATE
eUPDATE
.CONDITION
: uma condição CEL que se refere a um recurso de serviço compatível, por exemplo,"resource.versioning.enabled == true"
. Esse campo tem um comprimento máximo de 1.000 caracteres. Para detalhes sobre o uso da CEL, consulte Common Expression Language.ACTION
: a ação a ser realizada se ocondition
for atendido. Pode serALLOW
ouDENY
.DISPLAY_NAME
: um nome legível para a restrição. Esse campo tem um comprimento máximo de 200 caracteres.DESCRIPTION
: uma descrição legível da restrição a ser exibida como uma mensagem de erro quando a política for violada. Esse campo tem um comprimento máximo de 2000 caracteres.
Depois de criar o arquivo YAML para uma nova restrição personalizada, configure-a 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-constraintCONSTRAINT_PATH
CONSTRAINT_PATH
pelo caminho completo
do arquivo da restrição personalizada. Por exemplo, /home/user/customconstraint.yaml
.
Após a conclusão, as restrições personalizadas vão estar disponíveis como políticas da organização
na sua lista de Google Cloud políticas da organização.
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
ORGANIZATION_ID
pelo ID do recurso da organização.
Para mais informações, consulte
Como visualizar as políticas da organização.
Se a solicitação for bem-sucedida, a saída será semelhante a esta:
CUSTOM_CONSTRAINT ACTION_TYPE METHOD_TYPES RESOURCE_TYPES DISPLAY_NAME
custom.uniformBucketLevelAccess
DENY CREATE,UPDATE storage.googleapis.com/Bucket Enable object versioning
Para mais informações sobre como configurar e gerenciar restrições personalizadas, consulte Criar e gerenciar restrições personalizadas.
Aplicar uma restrição
Para aplicar uma restrição booleana, crie uma política da organização com referência a ela e aplique essa política da organização a um recurso Google Cloud .- 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 a restrição para acessar a página Detalhes da política dela.
- Para personalizar 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 editor principal.
- Clique em Adicionar uma regra.
- Na seção Aplicação, selecione se a aplicação dessa política da organização está ativada ou desativada.
- Opcional: para tornar a política da organização condicional em uma tag, clique em Adicionar condição. Se você adicionar uma regra condicional a uma política da organização, inclua pelo menos uma regra não condicional. Caso contrário, não será possível salvar a política. Para mais informações, consulte Como configurar uma política da organização com tags.
- Se essa for uma restrição personalizada, clique em Testar alterações para simular o efeito da política da organização. Para mais informações, consulte Testar alterações na política da organização com o Simulador de política.
- Para concluir e aplicar a política da organização, clique em Definir política. A política levará até 15 minutos para entrar em vigor.
Para criar uma política da organização que aplica uma restrição booleana, crie um arquivo YAML da política com referência à restrição:
name: projects/PROJECT_ID /policies/CONSTRAINT_NAME spec: rules: - enforce: true
Substitua:
-
PROJECT_ID
: o projeto em que você quer aplicar a restrição. -
CONSTRAINT_NAME
: o nome definido para a restrição personalizada. Por exemplo,
.custom.uniformBucketLevelAccess
Para aplicar a política da organização que contém a restrição, execute o seguinte comando:
gcloud org-policies set-policyPOLICY_PATH
Substitua POLICY_PATH
pelo caminho completo do arquivo YAML da política da organização. A política leva até 15 minutos para entrar em vigor.
As solicitações negadas por violar uma restrição personalizada falham com um
erro 412
: CUSTOM_ORGPOLICY_CONSTRAINT_FAILED
.
Exemplo: crie uma restrição que aplique chaves de criptografia gerenciadas pelo cliente em buckets
Crie um arquivo de restrição
enforceCMEK.yaml
com as seguintes informações:name: organizations/
ORGANIZATION_ID /customConstraints/custom.customerManagedEncryptionKeys resource_types: storage.googleapis.com/Bucket method_types: – CREATE – UPDATE condition: "has(resource.encryption.defaultKmsKeyName)" action_type: ALLOW display_name: Enforce Cloud KMS key description: When this constraint is enforced, newly created buckets and newly updated buckets must be encrypted with a Cloud KMS key. The Cloud KMS key on existing buckets can be updated but not deleted.Defina a restrição personalizada.
gcloud org-policies set-custom-constraint enforceCMEK.yaml
Crie um arquivo de política
enforceCMEK-policy.yaml
com a seguinte informação.name: projects/
PROJECT_ID /policies/custom.customerManagedEncryptionKeys spec: rules: – enforce: trueSubstitua
PROJECT_ID
pela ID do seu projeto.Neste exemplo, aplicamos essa restrição a envolvidos no projeto, mas também é possível defini-la no nível da organização ou da pasta.
Aplique a política.
gcloud org-policies set-policy enforceCMEK-policy.yaml
Exemplos de restrições personalizadas para casos de uso comuns
As seções a seguir fornecem a sintaxe de algumas restrições personalizadas que podem ser úteis para você:
Caso de uso | Sintaxe |
---|---|
As políticas de retenção de buckets precisam ter um período que esteja dentro do durações especificadas | name: organizations/ |
Os buckets precisam ter o controle de versões de objetos ativado | name: organizations/ |
Os buckets precisam ser nomeados usando uma expressão regular específica | name: organizations/ |
Buckets não podem estar com o bloqueio de bucket ativado | name: organizations/ |
Buckets não podem ter o bloqueio de retenção de objetos ativado | name: organizations/ |
Buckets localizados nas multirregiões US ou EU
precisa ter um período de armazenamento de 86.400 segundos |
name: organizations/ |
Buckets precisam ter rótulos1 | name: organizations/ |
Os buckets precisam estar localizados em um local birregional. | name: organizations/ |
Buckets não podem usar classes de armazenamento legadas | name: organizations/ |
A filtragem de IPs de bucket precisa restringir as solicitações de toda a Internet pública | name: organizations/ |
1 Especificar uma chave de rótulo do bucket que não existe retorna um erro |
Campos de expressão para condições
A tabela a seguir contém os campos de expressão que podem ser usados para criar condições. As condições são escritas no Common Expression Language (CEL). O valor desses campos de expressão diferenciam maiúsculas de minúsculas.
Para descrições dos campos de expressão a seguir e quais valores é possível especificar, consulte a representação do recurso buckets para a API JSON.
Campo de expressão | Tipo de valor |
---|---|
billing.requesterPays |
bool |
cors |
list |
cors.maxAgeSeconds |
int |
cors.method |
list |
cors.origin |
list |
cors.responseHeader |
list |
customPlacementConfig.dataLocations 1 |
list |
defaultEventBasedHold |
bool |
encryption.defaultKmsKeyName |
string |
iamConfiguration.publicAccessPrevention |
string |
iamConfiguration.uniformBucketLevelAccess.enabled |
bool |
labels |
map |
lifecycle.rule |
list |
lifecycle.rule.action.storageClass 1 |
string |
lifecycle.rule.action.type |
string |
lifecycle.rule.condition.age |
int |
lifecycle.rule.condition.createdBefore |
string |
lifecycle.rule.condition.customTimeBefore |
string |
lifecycle.rule.condition.daysSinceCustomTime |
int |
lifecycle.rule.condition.daysSinceNoncurrentTime |
int |
lifecycle.rule.condition.isLive |
bool |
lifecycle.rule.condition.matchesPrefix |
list |
lifecycle.rule.condition.matchesStorageClass |
list |
lifecycle.rule.condition.matchesSuffix |
list |
lifecycle.rule.condition.noncurrentTimeBefore |
string |
lifecycle.rule.condition.numNewerVersions |
int |
location 1 |
string |
locationType |
string |
logging.logBucket |
string |
logging.logObjectPrefix |
string |
ipFilter.mode |
string |
ipFilter.publicNetworkSource |
object |
ipFilter.publicNetworkSource.allowedIpCidrRanges |
list |
ipFilter.vpcNetworkSources |
list |
ipFilter.vpcNetworkSources.network |
string |
ipFilter.vpcNetworkSources.allowedIpCidrRanges |
list |
objectRetention.mode |
string |
name |
string |
projectNumber 2 |
string |
retentionPolicy.isLocked |
bool |
retentionPolicy.retentionPeriod |
int |
rpo |
string |
softDeletePolicy.retentionDurationSeconds |
int |
storageClass 1 |
string |
versioning.enabled |
bool |
website.mainPageSuffix |
string |
website.notFoundPage |
string |
1 O valor desse campo precisa ser escrito em letras maiúsculas.
2 O uso desse campo foi descontinuado.
Considerações
Os rótulos de bucket não são recomendados para uso em condições de restrição personalizadas. Em vez disso, use tags, que só podem ser definidas por indivíduos com os papéis do IAM necessários e são mais rigorosamente controladas do que os rótulos.