Restringir repositórios remotos

Neste documento, mostramos como usar o Serviço de políticas da organização para restringir o conjunto de repositórios Git remotos de terceiros que os repositórios do Dataform podem 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. No Console do Google Cloud, acesse a página Dataform.

    Acessar o Dataform

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

    Os URLs dos 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 Origem do repositório.

    O valor 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 conjunto de repositórios remotos que os repositórios do Dataform podem conectar para impedir que atores maliciosos acessem a base de código e os tokens de acesso do Dataform por meio de cópias desprotegidas do repositório.

Use o serviço de políticas da organização para criar uma política que restringe os URLs de repositório do Git aos quais 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 de organização com uma lista allowedValues de URLs de repositórios remotos do Git 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íticadataform.restrictGitRemotes tem um efeito retroativo, o que significa que a restrição afeta os repositórios do Dataform já existentes.

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 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 repositórios do Dataform e repositórios Git remotos não será restrita.

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

Allow all
Os repositórios de formulário de dados podem se conectar a todos os URLs de repositório remoto. 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ório remoto, você pode deixar a política de organização indefinida.
allowedValues lista de URLs
Os repositórios do Dataform só podem se conectar 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 URLs remotos. Selecione essa opção se a organização quiser bloquear toda a comunicação e usar os repositórios do Dataform.

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

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

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

  • 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 de organização não definida permite a comunicação com todos os repositórios remotos do Git. 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. Informe o administrador da política na sua organização.

Definir a restrição de política 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 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 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 de repositórios Git remotos, você precisa saber o 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. 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 se conectem a qualquer 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 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, a seguir há uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios remotos do Git e do Dataform selecionados podem se conectar a:

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

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 qualquer 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 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

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 mescla 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 comando gcloud resource-manager org-policies set-policy 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 ou número do projeto para esta política de 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, a seguir está uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios do Dataform podem se conectar apenas 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 para esta solicitação.

A seguir, há uma solicitação para aplicar a restrição dataform.restrictGitRemotes a uma organização em que os repositórios do Dataform podem se conectar apenas aos repositórios Git remotos selecionados e a política constraints/dataform.restrictGitRemotes 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 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 para esta solicitação.

Práticas recomendadas para permitir a lista de repositórios remotos do Git

  • 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ê só usar 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 estarão restritos à conexão. Isso pode ser uma preocupação de segurança se você quer controlar exatamente quais repositórios Git remotos o Dataform pode 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 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 eximir determinados projetos, restaure a política padrão da organização usando o método setOrgPolicy e especifique o objeto restoreDefault para permitir que todos os repositórios do Dataform nos projetos sejam conectados a repositórios remotos do Git. 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 à 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, comunique 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