Restringir repositórios remotos

Neste documento, mostramos como usar o Organization Policy Service para restringir o pool de repositórios Git remotos de terceiros a que 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 incluir na lista de permissões.

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

  1. No console do Google Cloud, acesse a página Dataform.

    Acesse o Dataform

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

    Lembre-se de que os URLs de repositórios remotos exibidos na página Dataform são encurtados e não podem ser usados na política dataform.restrictGitRemotes.

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

    O valor da 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 como conceder papéis, consulte Gerenciar acesso.

Esse papel predefinido contém as permissões necessárias para gerenciar 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 seguintes permissões 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

Talvez você também consiga receber essas permissões com papéis personalizados 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.

Você pode restringir o conjunto de repositórios remotos a que os repositórios do Dataform podem se conectar para impedir que agentes mal-intencionados acessem sua base de código do Dataform e os tokens de acesso por cópias desprotegidas do seu repositório.

É possível usar o Serviço de política da organização para criar uma política da organização que restrinja os URLs do repositório Git a que o Dataform pode se conectar.

A restrição para restringir 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 de URL completo.

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

Quando a política da organização estiver em vigor, o repositório do Dataform poderá se conectar apenas aos repositórios Git remotos que estão na lista allowedValues. Os repositórios Git remotos que não são explicitamente definidos 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 têm permissão para se conectar a todos os URLs dos repositórios remotos. Selecione essa opção se sua organização não quiser bloquear a comunicação com repositórios remotos. Como alternativa, para permitir todos os URLs de repositórios remotos, você pode deixar a política da organização sem definição.
allowedValues lista de URLs
Os repositórios do Dataform têm permissão para se conectar apenas aos repositórios remotos que estão na lista de permissões. Selecione esta opção para evitar a exfiltração de dados.
Deny all
Os repositórios do Dataform não têm permissão para se conectar a URLs remotos. Selecione essa opção se sua organização quiser bloquear toda a comunicação e usar os repositórios do Dataform.

Especificações para adicionar repositórios Git remotos à lista de permissões

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

  • A política da organização é aplicada de forma retroativa 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 da organização/Políticas da organização.

    Acessar as políticas organizacionais

  2. Se necessário, selecione a organização no menu suspenso do projeto.
  3. Clique em Restringir git remotos para 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. Digite o URL completo de um repositório Git remoto.

  9. Clique em Novo valor da 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, primeiro você precisa do ID da organização. Encontre o ID da organização executando o comando organizations list 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 comando gcloud resource-manager org-policies set-policy para definir a política da organização. Forneça sua 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 se conectem a repositórios Git remotos, 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 API setOrgPolicy() para definir a restrição. O Dataform tem permissão para se conectar aos URLs do repositório Git remoto na lista allowedValue especificada.

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

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

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

Agora, 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 se conectem a repositórios Git remotos, 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, você precisará executar a seguinte solicitação 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

Defina 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 mescla com a política da organização no nível da organização. No caso de uma 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 do repositório remoto na lista allowedValues, o Dataform não terá permissão para se conectar ao repositório remoto. Nesse caso, a política da organização no nível do projeto precisa modificar 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 comando gcloud resource-manager org-policies set-policy para definir a política da organização. Forneça sua 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 ou número do projeto da 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 API setOrgPolicy() para definir a restrição. O Dataform tem permissão para se conectar aos URLs do repositório Git remoto na lista allowedValue especificada.

Por exemplo, veja a seguir uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios do Dataform só podem se conectar aos repositórios Git remotos selecionados e a política constraints/dataform.restrictGitRemotes ainda não foi 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 pretendida para esta 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 ou número do projeto da solicitação.

Confira a seguir uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios do Dataform possam se conectar apenas aos repositórios Git remotos selecionados e a política constraints/dataform.restrictGitRemotes já esteja 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 pretendida para esta 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 ou número do projeto da solicitação.

Práticas recomendadas para adicionar controles remotos do Git à lista de permissões

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

  • Se você usa 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, isso significa que somente os repositórios Git remotos na lista deniedValues estão restritos à conexão. Essa pode ser uma preocupação de segurança se você quer 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 isentar determinados projetos, restaure a política padrão usando o método setOrgPolicy especificando o objeto restoreDefault para permitir que todos os repositórios do Dataform nos projetos se conectem 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 que não tenha a política da organização aplicada e usar a VPC compartilhada, se necessário.

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

A seguir