Restringir repositórios remotos

Neste documento, mostramos como usar o serviço de políticas da organização para restringir o pool de repositórios Git remotos de terceiros aos quais os repositórios do Dataform podem se conectar.

Antes de começar

Antes de definir ou editar a política dataform.restrictGitRemotes, encontre os URLs completos dos repositórios Git remotos que você quer adicionar à lista de permissões.

Para encontrar o URL completo de um repositório Git remoto que já está conectado a um repositório do Dataform, siga estas etapas:

  1. Noconsole, acesse a página Dataform. Google Cloud

    Acessar o Dataform

  2. Selecione um repositório e clique em Configurações.

    Os URLs de repositórios remotos mostrados na Dataform página são abreviados e não podem ser usados na dataform.restrictGitRemotes política.

  3. Na página Configurações, em Configurações de conexão do Git, copie o valor de Origem do repositório.

    O valor de Origem do repositório é o URL completo do repositório remoto. Você pode usar esse URL na política dataform.restrictGitRemotes.

Funções exigidas

Para receber as permissões necessárias a fim de gerenciar as políticas 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. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém as permissões necessárias para gerenciar as políticas da organização. Para conferir as permissões exatas necessárias, expanda a seção Permissões necessárias:

Permissões necessárias

As permissões a seguir são necessárias para gerenciar as políticas da organização:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

Essas permissões também podem ser concedidas com funções personalizadas ou outros papéis predefinidos.

Sobre a restrição de repositórios Git remotos

É possível conectar um repositório do Dataform a um repositório do GitHub ou do GitLab.

Talvez você queira restringir o pool de repositórios remotos aos quais os repositórios do Dataform podem se conectar para impedir que agentes mal-intencionados acessem sua base de código e tokens de acesso do Dataform por cópias desprotegidas do repositório.

É possível usar o serviço de políticas da organização para criar uma política que restrinja a quais URLs de repositórios Git o Dataform pode se conectar.

A restrição para repositórios Git remotos no Dataform é:

constraints/dataform.restrictGitRemotes

Para usar a restrição, crie uma política da organização com uma lista allowedValues de URLs de repositórios Git remotos que podem se conectar a um repositório do Dataform. Os repositórios Git remotos são identificados pelo endereço URL completo.

A política dataform.restrictGitRemotes tem um efeito retroativo, o que significa que a restrição afeta os repositórios do Dataform preexistentes.

Quando a política da organização está em vigor, o repositório do Dataform só pode se conectar aos repositórios Git remotos listados na lista allowedValues. Os repositórios Git remotos que não estão definidos explicitamente na política da organização não podem se conectar a um repositório do Dataform.

Se você não definir a política dataform.restrictGitRemotes, a comunicação entre os repositórios do Dataform e os repositórios Git remotos não será restrita.

É possível usar a política dataform.restrictGitRemotes das seguintes maneiras:

Allow all
Os repositórios do Dataform podem se conectar a todos os URLs de repositórios remotos. Selecione essa opção se a organização não quiser bloquear nenhuma comunicação com repositórios remotos. Como alternativa, para permitir todos os URLs de repositórios remotos, deixe a política da organização não definida.
Lista de URLs allowedValues
Os repositórios do Dataform podem se conectar apenas aos repositórios remotos permitidos. Selecione essa opção para evitar a exfiltração de dados.
Deny all
Os repositórios do Dataform não podem se conectar a nenhum URL remoto. Selecione essa opção se a organização quiser bloquear toda a comunicação e usar repositórios do Dataform.

Especificações para permitir repositórios Git remotos

  • É possível aplicar essa restrição de lista apenas aos repositórios GitHub e GitLab.

  • A política da organização é aplicada retroativamente e afeta os repositórios do Dataform atuais.

  • Essa restrição aceita allowedValues, bloqueando a conexão com todos os outros repositórios Git remotos, ou Deny all. O padrão é Allow all. Uma política da organização não definida permite a comunicação com todos os repositórios Git remotos. Recomendamos definir a política da organização como allowedValues.

  • Cabe a você ou a um administrador com as permissões necessárias gerenciar e manter a política. Garanta a comunicação sobre o administrador de políticas na sua organização.

Definir a restrição de política da organização no nível da organização

Console

  1. Acesse a página /Políticas organizacionais/Políticas organizacionais.

    Acessar as políticas organizacionais

  2. Se necessário, selecione a organização no menu suspenso do projeto.
  3. Clique em Restringir gits remotos em repositórios no Dataform.
  4. Clique em Gerenciar política. Se não for possível clicar no botão Gerenciar política, você não tem as permissões corretas.
  5. Selecione Personalizar para definir a política da organização para repositórios Git remotos específicos.

    Opção personalizada na página "Editar política da organização".

  6. Selecione as opções Aplicação da política e Tipo de política.

  7. Em Valores da política, selecione Personalizada.

  8. Insira o URL completo de um repositório Git remoto.

  9. Clique em Novo valor de política e insira os URLs completos dos repositórios Git remotos, conforme necessário.

  10. Clique em Salvar para aplicar a restrição.

gcloud

Para definir uma restrição para repositórios Git remotos, você precisa primeiro do ID da sua organização. Encontre o ID da organização executando o organizations list comando e procurando pelo ID numérico na resposta:

gcloud organizations list

A CLI gcloud retorna uma lista de organizações no seguinte formato:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

Use o gcloud resource-manager org-policies set-policy comando para definir a política da organização. Será preciso fornecer a política como um arquivo JSON ou YAML. Crie um arquivo JSON no seguinte formato:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Substitua ORGANIZATION_ID pelo ID numérico da organização.

Se você não quiser que os repositórios do Dataform possam se conectar a nenhum repositório Git remoto, defina uma política da organização com denyAll definido como true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

Substitua ORGANIZATION_ID pelo ID numérico da organização.

API

Use a setOrgPolicy() API para definir a restrição. O Dataform pode se conectar aos URLs de repositórios Git remotos na lista allowedValues especificada.

Por exemplo, a seguir está uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios Git remotos selecionados podem se conectar aos repositórios do Dataform:

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

em que ORGANIZATION_ID é o ID numérico da organização.

No corpo da solicitação, forneça a política da organização desejada para essa restrição:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

Se você não quiser que os repositórios do Dataform possam se conectar a nenhum repositório Git remoto, defina uma política da organização com denyAll definido como true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

Se a política da organização já estiver definida, execute a solicitação a seguir com a definição da política da organização como corpo da solicitação:

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

Definir a política da organização no nível do projeto

A definição de uma política da organização no nível do projeto substitui ou é mesclada com a política da organização no nível da organização. Em caso de mesclagem, denyAll tem precedência sobre allowedValues. Por exemplo, se a política da organização no nível da organização estiver definida como denyAll e a política mesclada no nível do projeto listar um URL de repositório remoto na lista allowedValues, o Dataform não poderá se conectar ao repositório remoto. Nesse caso, a política da organização no nível do projeto precisa substituir a política no nível da organização para que o Dataform possa se conectar ao repositório remoto. Para saber mais sobre a hierarquia de políticas da organização, consulte Noções básicas sobre a avaliação da hierarquia.

Console

Siga o mesmo processo documentado em Definir a restrição de política da organização no nível da organização, mas escolha o projeto desejado no seletor de projetos, em vez da organização.

Seletor de projetos.

gcloud

Use o gcloud resource-manager org-policies set-policy comando para definir a política da organização. Será preciso fornecer a política como um arquivo JSON ou YAML.

Crie um arquivo JSON no seguinte formato:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Substitua PROJECT_ID_OR_NUMBER pelo ID do projeto ou número do projeto para essa política da organização.

Depois, passe o arquivo com sua solicitação:

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

Use a setOrgPolicy() API para definir a restrição. O Dataform pode se conectar aos URLs de repositórios Git remotos na lista allowedValues especificada.

Por exemplo, a seguir está uma solicitação para aplicar a dataform.restrictGitRemotes restrição a uma organização em que os repositórios do Dataform só podem se conectar aos repositórios Git remotos selecionados e a constraints/dataform.restrictGitRemotes política ainda não está definida:

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

O corpo da solicitação contém a política da organização desejada para essa restrição:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Substitua PROJECT_ID_OR_NUMBER pelo ID do projeto ou número do projeto para esta solicitação.

A seguir está uma solicitação para aplicar a dataform.restrictGitRemotes restrição a uma organização em que os repositórios do Dataform só podem se conectar aos repositórios Git remotos selecionados e a constraints/dataform.restrictGitRemotes política já está definida:

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

O corpo da solicitação contém a política da organização desejada para essa restrição:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

Substitua PROJECT_ID_OR_NUMBER pelo ID do projeto ou número do projeto para esta solicitação.

Práticas recomendadas para permitir gits remotos

  • Para reduzir o risco de exfiltração de dados, defina explicitamente a restrição dataform.restrictGitRemotes para permitir uma seleção de repositórios Git remotos confiáveis.

  • Se você usar apenas repositórios do Dataform que não estão conectados a repositórios Git remotos, defina a restrição dataform.restrictGitRemotes como Deny All.

  • Evite usar a lista deniedValues com essa restrição. Se você definir valores na lista deniedValues, significa que apenas os repositórios Git remotos na lista deniedValues estão restritos de conexão. Essa pode ser uma preocupação de segurança se você quiser controlar exatamente a quais repositórios Git remotos o Dataform pode se conectar. Se você quiser remover determinados repositórios Git remotos da lista allowedValues, atualize a política da organização atual para removê-los da lista allowedValues em vez de colocar o controle remoto na lista deniedValues em uma hierarquia inferior.

  • Se você quiser definir uma política da organização em grande parte da hierarquia de recursos, mas excluir determinados projetos, restaure a política da organização padrão usando o setOrgPolicy método. Para isso, especifique o restoreDefault objeto para permitir que todos os repositórios do Dataform nos projetos sejam conectados a repositórios Git remotos. As políticas atualmente em vigor para projetos não são afetadas pela configuração padrão.

  • Use a política da organização com os papéis do IAM para controlar melhor o acesso à sua base de código do Dataform.

  • Todos os repositórios do Dataform na organização ou no projeto com a política da organização ativada estão sujeitos a essa política. Se isso for um problema, recomendamos configurar outros serviços e produtos em um projeto diferente sem a aplicação da política da organização. Se necessário, use a VPC compartilhada.

  • Antes de definir a política dataform.restrictGitRemotes, garanta a comunicação sobre a política da organização e o administrador dela na sua organização. Cabe a você ou a um administrador com as permissões necessárias gerenciar e manter a política.

A seguir