Using Constraints

Neste guia, veja como criar uma política da organização com uma restrição específica. As restrições usadas nestes exemplos não serão reais, mas amostras generalizadas para fins educativos.

Para mais informações sobre restrições e os problemas que elas resolvem, consulte a lista de todas as restrições do serviço Política da organização.

Antes de começar

Adicionar um administrador de política da organização

Para adicionar um usuário como um Administrador de política da organização, você precisa ter o papel de Administrador da organização. Esse papel só pode ser atribuído no nível da organização. Você deve ter o papel Administrador da política da organização para definir ou alterar as políticas da organização.

Console

Para adicionar um administrador de política da organização:

  1. Faça login no Console do Google Cloud como um superadministrador do G Suite ou do Cloud Identity e acesse a página Gerenciar recursos:

    Acessar a página Gerenciar recursos

  2. Na lista suspensa Organização, selecione a organização.

  3. Na lista de recursos exibida, marque a caixa de seleção ao lado do recurso Organização.

  4. No Painel de informações à direita, em Permissões, clique em Adicionar membro.

  5. Digite o endereço de e-mail do membro que você quer adicionar.

  6. Na lista suspensa Selecionar um papel, selecione Política da organização > Administrador de política da organização.

  7. Clique em Salvar. Aparecerá uma caixa de diálogo para confirmar a adição ou atualização do novo papel do membro.

gcloud

Você pode usar arquivos JSON ou YAML com os comandos gcloud. Este exemplo usa JSON.

Para adicionar um administrador de política da organização à sua organização:

  1. Encontre a política do Cloud IAM que você quer modificar e grave-a em um arquivo JSON:
      gcloud organizations get-iam-policy ORGANIZATION_ID \
         --format json > iam.json
      
  2. O conteúdo do arquivo JSON será semelhante ao código a seguir. O campo de versão é somente para leitura, você não precisa preenchê-lo.

  3.    {
           "bindings": [
           {
               "members": [
                 "user:email1@gmail.com"
               ],
               "role": "roles/owner"
           },
           {
               "members": [
                 "serviceAccount:our-project-123@appspot.gserviceaccount.com",
                 "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
               ],
               "role": "roles/editor"
           }
           ],
           "etag": "BwUjMhCsNvY=",
           "version": 1
       }
       
  4. Use um editor de texto para adicionar um novo objeto à matriz "bindings", que define os membros do grupo e o papel desses membros. Por exemplo, para conceder o papel "roles/orgpolicy.policyAdmin" ao usuário "email2@gmail.com", altere o exemplo acima da seguinte maneira:

  5.    {
         "bindings": [
         {
           "members": [
             "user:email1@gmail.com"
           ],
         "role": "roles/owner"
         },
         {
           "members": [
             "serviceAccount:our-project-123@appspot.gserviceaccount.com",
             "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
           ],
           "role": "roles/editor"
         },
         {
           "members": [
             "user:email2@gmail.com"
           ],
           "role": "roles/orgpolicy.policyAdmin"
         }
         ],
         "etag": "BwUjMhCsNvY="
       }
       
  6. Atualize a política da organização executando o seguinte comando:

  7.    gcloud organizations set-iam-policy ORGANIZATION_ID iam.json
       
  8. A política atualizada é exibida:
       bindings:
         - members:
           - user:email1@gmail.com
             role: roles/owner
         - members:
           - serviceAccount:our-project-123@appspot.gserviceaccount.com
           - serviceAccount:123456789012-compute@developer.gserviceaccount.com
             role: roles/editor
         - members:
           - user:email2@gmail.com
             role: roles/orgpolicy.policyAdmin
         etag: BwUjMhXbSPU=
         version: 1
       

Como usar restrições de lista na política da organização

Configurar a aplicação no recurso da organização

É possível definir uma política da organização no recurso Organização que use uma restrição de lista para negar acesso a um serviço específico. O processo a seguir descreve como definir uma política da organização usando a ferramenta de linha de comando gcloud. Para obter instruções sobre como visualizar e definir políticas da organização usando o Console do Cloud, consulte Como criar e gerenciar políticas.

  1. Consiga a política atual no recurso da organização usando o comando describe:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    Em que:

    • ORGANIZATION_ID é um identificador exclusivo do recurso da organização.

    • LIST_CONSTRAINT é a restrição de lista para o serviço que você quer impor.

    Você também pode aplicar a política da organização a uma pasta ou um projeto com as sinalizações --folder ou --project e o ID da pasta e ID do projeto, respectivamente.

    Como não há uma política definida, é retornada uma política incompleta, como no exemplo a seguir:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. Use o comando deny para adicionar o valor negado para o serviço ao qual você quer restringir o acesso.

    gcloud beta resource-manager org-policies deny \
      LIST_CONSTRAINT VALUE_A \
      --organization ORGANIZATION_ID
    

    A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
    etag: BwVJi0OOESU=
    listPolicy:
      deniedValues:
        - VALUE_A
    updateTime: CURRENT_TIME
    
  3. Veja a política efetiva atual usando describe --effective.

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - VALUE_A
    

    Como essa política da organização foi definida no nível da organização, ela será herdada por todos os recursos filhos que permitem a herança.

Configurar a aplicação em uma subárvore de hierarquia

Restrições de lista determinam que recursos devem ser permitidos ou negados a partir de valores explicitamente definidos. Algumas restrições também podem aceitar valores que usam o prefixo under:, que especifica uma subárvore com esse recurso na raiz. Usar o prefixo under: em um valor permitido ou negado faz com que a política da organização aja nesse recurso e em todos os seus filhos. Para mais informações sobre as restrições que permitem o uso do prefixo under:, consulte a página Restrições da política da organização.

Um valor que usa o prefixo under: é chamado de uma string de subárvore de hierarquia. Uma string de subárvore de hierarquia especifica o tipo de recurso ao qual se aplica. Por exemplo, usar uma string de subárvore de projects/PROJECT_ID ao definir a restrição constraints/compute.storageResourceUseRestrictions permitirá ou negará o uso do armazenamento do Compute Engine para PROJECT_ID e todos os seus filhos.

Os prefixos de valor da subárvore de hierarquia são um recurso beta, podem ser alterados tornando-se incompatíveis com versões anteriores e não estão sujeitos a SLAs ou políticas de suspensão de uso.

  1. Consiga a política atual no recurso da organização usando o comando describe:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    Em que:

    • ORGANIZATION_ID é um identificador exclusivo do recurso da organização.

    • LIST_CONSTRAINT é a restrição de lista para o serviço que você quer impor.

    Você também pode aplicar a política da organização a uma pasta ou um projeto com as sinalizações --folder ou --project e o ID da pasta e ID do projeto, respectivamente.

    Como não há uma política definida, é retornada uma política incompleta, como no exemplo a seguir:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. Use o comando deny para adicionar o valor negado para o serviço ao qual você quer restringir o acesso. O prefixo under: define a restrição para negar o recurso nomeado e todos os seus recursos filho.

    gcloud beta resource-manager org-policies deny \
      LIST_CONSTRAINT under:folders/VALUE_A \
      --organization ORGANIZATION_ID
    

    Em que:

    • under: é um prefixo e mostra que uma string de subárvore é o que vem a seguir;

    • folders/VALUE_A é o ID da pasta do recurso raiz que você quer negar. Este recurso será negado, bem como todos os seus filhos na hierarquia de recursos;

    • VALUE_B e VALUE_C são projetos que existem na hierarquia com VALUE_A como pai.

    A saída do comando deny será:

    constraint: constraints/LIST_CONSTRAINT
    etag: BwVJi0OOESU=
    listPolicy:
      deniedValues:
        - under:folders/VALUE_A
    updateTime: CURRENT_TIME
    

    Você também pode aplicar o prefixo under: a organizações e projetos, como nos exemplos a seguir:

    • em: organizations/VALUE_X

    • em: projects/VALUE_Y

  3. Veja a política efetiva atual usando describe --effective.

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - under:folders/VALUE_A
    

    A política agora avalia negar a pasta VALUE_A e todos os seus recursos secundários, neste caso VALUE_B e VALUE_C.

Mesclar a política da organização em um projeto

É possível definir uma política da organização personalizada em um recurso, que se mesclará a qualquer política herdada do recurso pai. Em seguida, essa política mesclada será avaliada para criar uma nova política vigente com base nas regras de herança.

  1. Consiga a política atual no recurso usando o comando describe:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --project PROJECT_ID
    

    Em que:

    • PROJECT_ID é o identificador exclusivo do seu projeto.

    • LIST_CONSTRAINT é a restrição de lista para o serviço que você quer impor.

    Como não há uma política definida, é retornada uma política incompleta, como no exemplo a seguir:

    constraint: "constraints/LIST_CONSTRAINT"
    etag: BwVJi0OOESU=
    
  2. Exiba a política efetiva atual usando o comando describe --effective:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
       --project PROJECT_ID
    

    A saída do comando incluirá um valor negado que é herdado do recurso Organização:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      deniedValues:
        - VALUE_A
    
  3. Defina a política no projeto usando o comando set-policy.

    1. Crie um arquivo temporário /tmp/policy.yaml para armazenar a política:

       constraint: constraints/LIST_CONSTRAINT
       listPolicy:
         deniedValues:
           - VALUE_B
           - VALUE_C
         inheritFromParent: true
       

    2. Execute o comando set-policy:

       gcloud beta resource-manager org-policies set-policy 
      --project PROJECT_ID /tmp/policy.yaml

    3. A saída do comando será:

       constraint: constraints/LIST_CONSTRAINT
       etag: BwVLO2timxY=
       listPolicy:
         deniedValues:
           - VALUE_B
           - VALUE_C
         inheritFromParent: true
       

  4. Use o comando describe --effective novamente para exibir a política atualizada:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

    A saída do comando incluirá o resultado efetivo da mesclagem da política do recurso e do pai:

    constraint: constraints/LIST_CONSTRAINT
      listPolicy:
        deniedValues:
          - VALUE_A
          - VALUE_B
          - VALUE_C
    

Restaurar comportamento de restrição padrão

Você pode usar o valor restoreDefault em uma política da organização para redefinir a política e usar o comportamento padrão da restrição. No exemplo a seguir, imagine que o comportamento padrão da restrição é permitir todos os valores.

  1. Encontre a política vigente no projeto para mostrar a política atual mesclada:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

    No qual PROJECT_ID é o identificador exclusivo do seu projeto. A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
      listPolicy:
        deniedValues:
          - VALUE_A
          - VALUE_B
          - VALUE_C
    
  2. Defina a política no projeto usando o comando set-policy.

    1. Crie um arquivo temporário /tmp/restore-policy.yaml para armazenar a política:

       restoreDefault: {}
       constraint: constraints/LIST_CONSTRAINT
       

    2. Execute o comando set-policy:

       gcloud beta resource-manager org-policies set-policy 
      --project PROJECT_ID /tmp/restore-policy.yaml

    3. A saída do comando será:

       constraint: constraints/LIST_CONSTRAINT
       etag: BwVJi9D3VLY=
       restoreDefault: {}
       

  3. Encontre a política vigente para verificar o comportamento padrão:

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --project PROJECT_ID
    

    A saída do comando permitirá todos os valores:

    Constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

Excluir uma política da organização

Uma política da organização pode ser excluída de um recurso. Um recurso sem um conjunto de políticas da organização herdará qualquer política do respectivo recurso pai. Se você excluir a política da organização no recurso Organização, a política vigente será o comportamento padrão da restrição.

Nas etapas a seguir, descrevemos como excluir uma política de uma organização:

  1. Exclua a política no recurso da organização usando o comando delete:

    gcloud beta resource-manager org-policies delete \
      LIST_CONSTRAINT --organization ORGANIZATION_ID
    

    No qual ORGANIZATION_ID é o identificador exclusivo do recurso da organização. A saída do comando será:

    Deleted [<Empty>].
    
  2. Encontre a política vigente na organização para verificar se ela não é aplicada.

    gcloud beta resource-manager org-policies describe \
      LIST_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

Nas etapas a seguir, descrevemos como excluir uma política da organização em um projeto:

  1. Exclua a política em um projeto usando o comando delete:

    gcloud beta resource-manager org-policies delete \
      LIST_CONSTRAINT --project PROJECT_ID
    

    No qual PROJECT_ID é o identificador exclusivo do seu projeto. A saída do comando será:

    Deleted [<Empty>].
    
  2. Encontre a política vigente no projeto para verificar se ela não é aplicada.

    gcloud beta resource-manager org-policies describe \
      --effective \
      LIST_CONSTRAINT --project PROJECT_ID
    

    A saída do comando será:

    constraint: constraints/LIST_CONSTRAINT
    listPolicy:
      allValues: ALLOW
    

Como usar restrições booleanas na política da organização

Configurar a aplicação no recurso da organização

Uma política da organização pode ser definida no recurso organização, para aplicar uma restrição booleana. O processo a seguir descreve como definir uma política da organização usando a ferramenta de linha de comando gcloud. Para obter instruções sobre como visualizar e definir políticas da organização usando o Console do Cloud, consulte Como criar e gerenciar políticas.

  1. Consiga a política atual no recurso da organização usando o comando describe:

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    No qual ORGANIZATION_ID é o identificador exclusivo do recurso da organização. Você também pode aplicar a política da organização a uma pasta ou um projeto com os sinalizadores --folder ou --project e o ID da pasta e ID do projeto, respectivamente.

    Como não há uma política definida, é retornada uma política incompleta, como no exemplo a seguir:

    booleanPolicy: {}
    constraint: "constraints/BOOLEAN_CONSTRAINT"
    
  2. Defina a política a ser aplicada na organização usando o comando enable-enforce:

    gcloud beta resource-manager org-policies enable-enforce \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    A saída do comando será:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    etag: BwVJitxdiwY=
    
  3. Veja a política efetiva atual usando describe --effective:

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --organization ORGANIZATION_ID
    

    A saída do comando será:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    

Modificar a política da organização de um projeto

Para substituir a política da organização de um projeto, defina uma política que desativa a aplicação da restrição booleana a todos os recursos na hierarquia abaixo do projeto.

  1. Encontre a política atual no recurso para mostrar que está vazia.

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    No qual PROJECT_ID é o identificador exclusivo do seu projeto. A saída do comando será:

    booleanPolicy: {}
    constraint: "constraints/BOOLEAN_CONSTRAINT"
    
  2. Encontre a política vigente do projeto, que confirma que a restrição está sendo aplicada nesse projeto.

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project PROJECT_ID
    

    A saída do comando será:

    booleanPolicy:
      enforced: true
    constraint: constraints/BOOLEAN_CONSTRAINT
    
  3. Defina a política no projeto para não aplicar a restrição, usando o comando disable-enforce:

    gcloud beta resource-manager org-policies disable-enforce \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    A saída do comando será:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    etag: BwVJivdnXvM=
    
  4. Encontre a política vigente para mostrar que ela não é mais aplicada no projeto.

    gcloud beta resource-manager org-policies describe \
      --effective \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    A saída do comando será:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    

Excluir uma política da organização

Uma política da organização pode ser excluída de um recurso. Um recurso sem um conjunto de políticas da organização herdará qualquer política do respectivo recurso pai. Se você excluir a política da organização no recurso Organização, a política vigente será o comportamento padrão das restrições.

As etapas a seguir descrevem como excluir uma política da organização em uma organização e em um projeto:

  1. Exclua a política do recurso da organização usando o comando delete:

    gcloud beta resource-manager org-policies delete \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    Onde ORGANIZATION_ID é um identificador exclusivo do recurso da organização. A saída do comando será:

    Deleted [<Empty>].
    
  2. Encontre a política vigente na organização para verificar se ela não é aplicada.

    gcloud beta resource-manager org-policies describe \
      --effective \
      BOOLEAN_CONSTRAINT --organization ORGANIZATION_ID
    

    A saída do comando será:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT
    
  3. Exclua a política da organização do projeto usando o comando delete:

    gcloud beta resource-manager org-policies delete \
      BOOLEAN_CONSTRAINT --project PROJECT_ID
    

    A saída do comando será:

    Deleted [<Empty>].
    
  4. Encontre a política vigente no projeto para verificar se ela não é aplicada.

    gcloud beta resource-manager org-policies describe \
      BOOLEAN_CONSTRAINT --effective \
      --project PROJECT_ID
    

    No qual PROJECT_ID é o identificador exclusivo do seu projeto. A saída do comando será:

    booleanPolicy: {}
    constraint: constraints/BOOLEAN_CONSTRAINT