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
ouUPDATE
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:
- Recipientes:
storage.googleapis.com/Bucket
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
Na Trusted Cloud consola, aceda à página Políticas de organização.
Selecione o Selecionador de projetos na parte superior da página.
No seletor de projetos, selecione o recurso para o qual quer definir a política de organização.
Clique em
Restrição personalizada.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.
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.
.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.
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
.Em Método de aplicação, selecione se quer aplicar a restrição 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 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.Clique em Guardar.
Em Ação, selecione se quer permitir ou recusar o método avaliado se a condição for cumprida.
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, como123456789
.CONSTRAINT_NAME
: o nome que quer para a nova restrição personalizada. Uma restrição personalizada tem de começar comcustom.
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 serCREATE
ouCREATE
eUPDATE
.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çãocondition
for cumprida. Pode serALLOW
ouDENY
.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
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
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
- Na Trusted Cloud consola, aceda à página Políticas de organização.
- No seletor de projetos, selecione o projeto para o qual quer definir a política de organização.
- 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.
- Para configurar a política da organização para este recurso, clique em Gerir política.
- Na página Editar política, selecione Substituir política do elemento principal.
- Clique em Adicionar regra.
- Na secção Aplicação, selecione se a aplicação desta política organizacional está ativada ou desativada.
- 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.
- 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.
- 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
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.
Defina a restrição personalizada.
gcloud org-policies set-custom-constraint enforceCMEK.yaml
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.
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 |
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.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 |
objectRetention.mode |
string |
name |
string |
projectNumber 2 |
string |
retentionPolicy.isLocked 3 |
bool |
retentionPolicy.retentionPeriod |
int |
rpo |
string |
softDeletePolicy.retentionDurationSeconds |
int |
storageClass 1 |
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.