Faça a gestão de recursos do Cloud Storage através de restrições personalizadas

A política da organização oferece restrições predefinidas para o Cloud Storage. No entanto, se quiser um controlo mais detalhado e personalizável sobre os campos específicos que estão restritos nas políticas da sua organização, também pode criar restrições personalizadas e usar essas restrições personalizadas numa política da organização.

Esta página descreve como definir restrições personalizadas para aplicar políticas aos recursos do Cloud Storage.

Herança de políticas

Por predefinição, as políticas da organização são herdadas pelos descendentes dos recursos nos quais aplica a política. Por exemplo, se aplicar uma política a uma organização, Trusted Cloud aplica a política a todos os projetos na organização. Para saber mais acerca deste comportamento e como o alterar, consulte as Regras de avaliação da hierarquia.

Preços

O serviço de políticas da organização, incluindo restrições predefinidas e personalizadas, é oferecido sem custo financeiro.

Limitações

  • As restrições personalizadas para recursos do Cloud Storage só podem ser configuradas através da Trusted Cloud consola ou da Google Cloud CLI.

  • As restrições personalizadas só podem ser aplicadas nos métodos CREATE ou UPDATE para recursos do Cloud Storage.

  • As restrições personalizadas recentemente aplicadas não se aplicam automaticamente aos recursos existentes. Os recursos existentes têm de ser atualizados para que a restrição seja aplicada.

    Para encontrar recursos existentes que vão ter de ser atualizados, pode aplicar uma política da organização de teste.

  • Não é possível usar restrições personalizadas para restringir ACLs ou políticas de IAM em objetos ou contentores.

Recursos suportados do Cloud Storage

Para o Cloud Storage, pode definir restrições personalizadas no seguinte recurso:

Funções necessárias

Para obter informações sobre as funções necessárias para gerir políticas da organização com restrições personalizadas, consulte o artigo Funções necessárias.

Além de gerir as políticas da organização, é recomendável testar as restrições personalizadas que criar. Para testar restrições personalizadas, recomendamos que use a função predefinida ou personalizada menos permissiva que contenha as autorizações necessárias para testar a restrição específica. Para ver que autorizações e funções são necessárias, consulte as funções e as autorizações do Cloud Storage.

Configure uma restrição personalizada

Consola

  1. Na Trusted Cloud consola, aceda à página Políticas de organização.

    Aceda às políticas da organização

  2. Selecione o Selecionador de projetos na parte superior da página.

  3. No seletor de projetos, selecione o recurso para o qual quer definir a política de organização.

  4. Clique em Restrição personalizada.

  5. No campo Nome a apresentar, introduza um nome simples para a restrição. Este campo tem um comprimento máximo de 200 carateres. Não use IIP nem dados confidenciais nos nomes das restrições, porque podem ser expostos em mensagens de erro.

  6. Na caixa ID da restrição, introduza o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar com custom. e só pode incluir letras maiúsculas, letras minúsculas ou números, por exemplo, custom.enforceBucketVersioning. O comprimento máximo deste campo é de 70 carateres, sem contar com o prefixo, por exemplo, organizations/123456789/customConstraints/custom..

  7. No campo Descrição, introduza uma descrição simples da restrição a apresentar como mensagem de erro quando a política for violada. Este campo tem um comprimento máximo de 2000 carateres.

  8. No campo Tipo de recurso, selecione o nome do Trusted Cloud recurso REST que contém o objeto e o campo que quer restringir. Por exemplo, storage.googleapis.com/Bucket.

  9. Em Método de aplicação, selecione se quer aplicar a restrição no método REST CREATE ou UPDATE.

  10. Para definir uma condição, clique em Editar condição.

    1. No painel Adicionar condição, crie uma condição CEL que faça referência a um recurso de serviço suportado, por exemplo, resource.versioning.enabled == true. Este campo tem um comprimento máximo de 1000 carateres.

    2. Clique em Guardar.

  11. Em Ação, selecione se quer permitir ou recusar o método avaliado se a condição for cumprida.

  12. Clique em Criar restrição.

Quando tiver introduzido um valor em cada campo, a configuração YAML equivalente para esta restrição personalizada é apresentada à direita.

gcloud

Para criar uma restrição personalizada com a Google Cloud CLI, crie um ficheiro YAML para a restrição personalizada:

name: organizations/ORGANIZATION_ID/customConstraints/CONSTRAINT_NAME
resourceTypes:
- RESOURCE_NAME
methodTypes:
- METHOD1
- METHOD2
condition: "CONDITION"
actionType: ACTION
displayName: DISPLAY_NAME
description: DESCRIPTION

Substitua o seguinte:

  • ORGANIZATION_ID: o ID da sua organização, como 123456789.

  • CONSTRAINT_NAME: o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar com custom. e só pode incluir letras maiúsculas, letras minúsculas ou números, por exemplo, custom.enforceBucketVersioning. O comprimento máximo deste campo é de 70 carateres, sem contar com o prefixo, por exemplo, organizations/123456789/customConstraints/custom..

  • RESOURCE_NAME: o nome totalmente qualificado do recurso REST que contém o objeto e o campo que quer restringir.Trusted Cloud Por exemplo, storage.googleapis.com/Bucket.

  • METHOD1,METHOD2: uma lista de métodos RESTful para os quais aplicar a restrição. Pode ser CREATE ou CREATE e UPDATE.

  • CONDITION: uma condição CEL que se refere a um recurso de serviço suportado, por exemplo, "resource.versioning.enabled == true". Este campo tem um comprimento máximo de 1000 carateres. Para ver detalhes sobre a utilização do IEC, consulte o artigo Idioma de expressão comum.

  • ACTION: a ação a tomar se a condição condition for cumprida. Pode ser ALLOW ou DENY.

  • DISPLAY_NAME: um nome simples para a restrição. Este campo tem um comprimento máximo de 200 carateres.

  • DESCRIPTION: uma descrição acessível da restrição a apresentar como uma mensagem de erro quando a política é violada. Este campo tem um comprimento máximo de 2000 carateres.

Depois de criar o ficheiro YAML para uma nova restrição personalizada, tem de o configurar para o disponibilizar para as políticas da organização na sua 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_PATH pelo caminho completo para o seu ficheiro de restrições personalizado. Por exemplo, /home/user/customconstraint.yaml. Após a conclusão, as restrições personalizadas ficam disponíveis como políticas da organização na sua lista de Trusted Cloud by S3NS 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
Substitua ORGANIZATION_ID pelo ID do recurso da sua organização. Para mais informações, consulte o artigo Ver políticas da organização.

Se o pedido for bem-sucedido, o resultado é semelhante ao seguinte:

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 a configuração e a gestão de restrições personalizadas, consulte o artigo Crie e faça a gestão de restrições personalizadas.

Aplique uma restrição

Pode aplicar uma restrição criando uma política da organização que a referencie e, em seguida, aplicando essa política da organização a um Trusted Cloud by S3NS recurso.

Consola

  1. Na Trusted Cloud consola, aceda à página Políticas de organização.

    Aceda às políticas da organização

  2. No seletor de projetos, selecione o projeto para o qual quer definir a política de organização.
  3. Na lista da página Políticas da organização, selecione a restrição para ver a página Detalhes da política dessa restrição.
  4. Para configurar a política da organização para este recurso, clique em Gerir política.
  5. Na página Editar política, selecione Substituir política do elemento principal.
  6. Clique em Adicionar regra.
  7. Na secção Aplicação, selecione se a aplicação desta política organizacional está ativada ou desativada.
  8. Opcional: para tornar a política de organização condicional a uma etiqueta, clique em Adicionar condição. Tenha em atenção que, se adicionar uma regra condicional a uma política da organização, tem de adicionar, pelo menos, uma regra incondicional. Caso contrário, não é possível guardar a política. Para mais informações, consulte o artigo Definir uma política de organização com etiquetas.
  9. Clique em Testar alterações para simular o efeito da política da organização. A simulação de políticas não está disponível para restrições geridas antigas. Para mais informações, consulte o artigo Teste as alterações à política da organização com o simulador de políticas.
  10. Para concluir e aplicar a política da organização, clique em Definir política. A política demora até 15 minutos a entrar em vigor.

gcloud

Para criar uma política da organização com regras booleanas, crie um ficheiro YAML de política que faça referência à restrição:

      name: projects/PROJECT_ID/policies/CONSTRAINT_NAME
      spec:
        rules:
        - enforce: true
    

Substitua o seguinte:

  • PROJECT_ID: o projeto no qual quer aplicar a restrição.
  • CONSTRAINT_NAME: o nome que definiu 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-policy POLICY_PATH
    

Substitua POLICY_PATH pelo caminho completo para o ficheiro YAML da política da organização. A política demora até 15 minutos a entrar em vigor.

Os pedidos que são recusados por violarem uma restrição personalizada falham com um erro 412: CUSTOM_ORGPOLICY_CONSTRAINT_FAILED.

Exemplo: crie uma restrição que aplique chaves de encriptação geridas pelo cliente em contentores

gcloud

  1. Crie um ficheiro de restrições 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.
  2. Defina a restrição personalizada.

    gcloud org-policies set-custom-constraint enforceCMEK.yaml
    
  3. Crie um ficheiro de políticas enforceCMEK-policy.yaml com as seguintes informações.

    name: projects/PROJECT_ID/policies/custom.customerManagedEncryptionKeys
    spec:
      rules:
    enforce: true

    Substitua PROJECT_ID pelo ID do seu projeto.

    Neste exemplo, aplicamos esta restrição ao nível do projeto, mas também pode defini-la ao nível da organização ou da pasta.

  4. Aplique a política.

    gcloud org-policies set-policy enforceCMEK-policy.yaml
    

Exemplos de restrições personalizadas para exemplos de utilização comuns

As secções seguintes fornecem a sintaxe de algumas restrições personalizadas que pode considerar úteis:

Exemplo de utilização Sintaxe
As políticas de retenção de contentores têm de ter um período que se enquadre nas durações especificadas
      name: organizations/ORGANIZATION_ID/customConstraints/custom.retentionPolicy
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "resource.retentionPolicy.retentionPeriod not in [3600, 2678400]"
      action_type: DENY
      display_name: Bucket retention policy is either 3,600 seconds or 2,678,400 seconds
      description: Newly created buckets and newly updated buckets must have a
      retention policy that's either 3,600 seconds or 2,678,400 seconds.
Os contentores têm de ter a funcionalidade de controlo de versões de objetos ativada
      name: organizations/ORGANIZATION_ID/customConstraints/custom.enforceBucketVersioning
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "resource.versioning.enabled == true"
      action_type: ALLOW
      display_name: Buckets must have Object Versioning enabled
      description: Newly created buckets and newly updated buckets must have Object Versioning enabled.
Os contentores têm de ter nomes que usem uma expressão regular específica
      name: organizations/ORGANIZATION_ID/customConstraints/custom.bucketName
      method_types:
CREATE
      resource_types: storage.googleapis.com/Bucket
      condition: "resource.name.matches('^[a-zA-Z]+$')"
      action_type: ALLOW
      display_name: Bucket names must match the specified regular expression
      description: Newly created buckets must have a name that matches the
      specified regular expression. Only letters are allowed in the bucket name.
Os contentores não podem ter o bloqueio de contentores ativado
      name: organizations/ORGANIZATION_ID/customConstraints/custom.prohibitBucketLock
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "resource.retentionPolicy.isLocked == true"
      action_type: DENY
      display_name: Prohibit the use of Bucket Lock
      description: Newly created buckets and newly updated buckets cannot have
      Bucket Lock enabled.
Os contentores não podem ter o bloqueio de retenção de objetos ativado
      name: organizations/ORGANIZATION_ID/customConstraints/custom.prohibitObjectRetentionLock
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "resource.objectRetention.mode == 'Enabled'"
      action_type: DENY
      display_name: Objects cannot have retention configurations
      description: Newly created buckets and newly updated buckets cannot have
      Object Retention Lock enabled.
Os contentores localizados nas multirregiões US ou EU têm de ter um período de retenção de 86 400 segundos
      name: organizations/ORGANIZATION_ID/customConstraints/custom.locationRetentionPolicy
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "(resource.location.startsWith('US') || resource.location.startsWith('EU')) && resource.retentionPolicy.retentionPeriod != 86400"
      action_type: DENY
      display_name: All buckets in US and EU must have a retention policy of 86,400 seconds
      description: Newly created buckets and newly updated buckets located in
      US and EU regions must have a retention policy of 86,400 seconds.
Os contentores têm de ter etiquetas1
      name: organizations/ORGANIZATION_ID/customConstraints/custom.labels
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "'my_annotations.data.source' in resource.labels && resource.labels['my_annotations.data.source'] in ['SOURCE_IMAGES','SOURCE_TEXT','SOURCE_VIDEOS']"
      action_type: ALLOW
      display_name: Buckets must have a label classifying the contents of the bucket
      description: Newly created buckets and newly updated buckets must have the
      label my_annotations.data.source with the SOURCE_IMAGES, SOURCE_TEXT, or
      SOURCE_VIDEOS key.
Os contentores têm de estar localizados numa região dupla
      name: organizations/ORGANIZATION_ID/customConstraints/custom.dualRegionUS
      method_types:
CREATE
UPDATE
      resource_types: storage.googleapis.com/Bucket
      condition: "'US-EAST1' in resource.customPlacementConfig.dataLocations && 'US-EAST4' in resource.customPlacementConfig.dataLocations"
      action_type: ALLOW
      display_name: Buckets must be located in a dual-region
      description: Newly created buckets and newly updated buckets must be located in a dual-region
      composed of the us-east1 and us-east4 regions.

1 A especificação de uma chave de etiqueta de grupo que não existe devolve um erro BAD_CONDITION. Este erro impede a execução dos métodos CREATE e UPDATE no contentor. Para evitar este erro, verifique sempre se a chave da etiqueta existe primeiro através de "my_annotations.data.source" in resource.labels.

Campos de expressão para condições

A tabela seguinte contém os campos de expressão que pode usar para criar condições. As condições são escritas no Idioma de expressão comum (IEC). Tenha em atenção que o valor destes campos de expressão é sensível a maiúsculas e minúsculas.

Para ver descrições dos seguintes campos de expressão e que valores pode 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.dataLocations1 list
defaultEventBasedHold bool
encryption.defaultKmsKeyName string
iamConfiguration.publicAccessPrevention string
iamConfiguration.uniformBucketLevelAccess.enabled bool
labels map
lifecycle.rule list
lifecycle.rule.action.storageClass1 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
location1 string
locationType string
objectRetention.mode string
name string
projectNumber2 string
retentionPolicy.isLocked3 bool
retentionPolicy.retentionPeriod int
rpo string
softDeletePolicy.retentionDurationSeconds int
storageClass1 string
versioning.enabled bool

1 O valor deste campo tem de ser escrito em maiúsculas.

2 Este campo foi descontinuado.

3 Este campo só pode ser usado para proibir a utilização do bloqueio de contentores e não para aplicar o bloqueio de contentores.

Considerações

Não é recomendável usar etiquetas de grupos em condições de restrição personalizadas. Em alternativa, use etiquetas, que só podem ser definidas por indivíduos com as funções de IAM necessárias e são mais rigorosamente controladas do que as etiquetas.