Restrinja repositórios remotos

Este documento mostra como usar o serviço de políticas da organização para restringir o conjunto de repositórios Git remotos de terceiros aos quais os repositórios do Dataform se podem ligar.

Antes de começar

Antes de definir ou editar a política dataform.restrictGitRemotes, encontre os URLs completos dos repositórios Git remotos que quer incluir na lista de autorizações.

Para encontrar o URL completo de um repositório Git remoto que já esteja associado a um repositório do Dataform, siga estes passos:

  1. Na Google Cloud consola, aceda à página Dataform.

    Aceder ao Dataform

  2. Selecione um repositório e, de seguida, clique em Definições.

    Tenha em atenção que os URLs de repositórios remotos apresentados na página do Dataform são abreviados e não podem ser usados na política dataform.restrictGitRemotes.

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

    O valor Origem do repositório é o URL completo do repositório remoto. Pode usar este URL na política dataform.restrictGitRemotes.

Funções necessárias

Para receber as autorizações de que precisa para gerir políticas de organização, peça ao seu administrador que lhe conceda a função de IAM de administrador de políticas de organização (roles/orgpolicy.policyAdmin) na organização. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para gerir políticas da organização. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para gerir 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

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Acerca da restrição de repositórios Git remotos

Pode associar um repositório do Dataform a um repositório do GitHub ou do GitLab.

Pode querer restringir o conjunto de repositórios remotos aos quais os repositórios do Dataform se podem ligar para impedir que atores maliciosos acedam à sua base de código do Dataform e aos tokens de acesso através de cópias não protegidas do seu repositório.

Pode usar o serviço de políticas da organização para criar uma política da organização que restringe os URLs do repositório Git aos quais o Dataform se pode ligar.

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 allowedValueslista de URLs de repositórios Git remotos que podem estabelecer ligação a um repositório do Dataform. Os repositórios Git remotos são identificados pelo respetivo 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 pré-existentes.

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

Se 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 é restrita.

Pode usar a dataform.restrictGitRemotespolítica das seguintes formas:

Allow all
Os repositórios do Dataform podem ligar-se a todos os URLs de repositórios remotos. Selecione esta opção se a sua organização não quiser bloquear nenhuma comunicação com repositórios remotos. Em alternativa, para permitir todos os URLs de repositórios remotos, pode deixar a política da organização não definida.
allowedValues lista de URLs
Os repositórios do Dataform só podem estabelecer ligação aos repositórios remotos na lista de autorizações. Selecione esta opção para impedir a exfiltração de dados.
Deny all
Os repositórios do Dataform não podem estabelecer ligação a URLs remotos. Selecione esta opção se a sua organização quiser bloquear todas as comunicações e usar repositórios do Dataform.

Especificações para a inclusão na lista de autorizações de repositórios Git remotos

  • Pode aplicar esta restrição de lista apenas a repositórios do GitHub e GitLab.

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

  • Esta restrição aceita allowedValues, bloqueando a ligação a todos os outros repositórios Git remotos, ou Deny all. A predefinição é Allow all. Uma política organizacional não definida permite a comunicação com todos os repositórios Git remotos. Recomendamos que defina a política da organização como allowedValues.

  • É da sua responsabilidade ou de um administrador com as autorizações necessárias gerir e manter a política. Certifique-se de que existe comunicação sobre o administrador de políticas na sua organização.

Defina a restrição da política da organização ao nível da organização

Consola

  1. Aceda à página /Organizational Policies/Organization Policies.

    Aceda às políticas organizacionais

  2. Se necessário, selecione a organização necessária no menu pendente do projeto.
  3. Clique em Restringir remotos do Git para repositórios no Dataform.
  4. Clique em Gerir política. Se não conseguir clicar no botão Gerir política, não tem as autorizações corretas.
  5. Selecione Personalizar para definir a política da organização para repositórios Git remotos específicos.

    Opção de personalização na página de edição da política da organização.

  6. Selecione a Aplicação de políticas e o Tipo de política necessários.

  7. Para Valores da política, selecione Personalizado.

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

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

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

gcloud

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

gcloud organizations list

A CLI gcloud devolve 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. Tem de fornecer a sua política como um ficheiro JSON ou YAML. Crie um ficheiro 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 não quiser que os repositórios do Dataform possam estabelecer ligação a quaisquer repositórios Git remotos, pode definir 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 autorização para se ligar aos URLs do repositório Git remoto na lista allowedValue que especificar.

Por exemplo, o seguinte é um pedido para aplicar a restrição dataform.restrictGitRemotes a uma organização à qual os repositórios Dataform de repositórios Git remotos selecionados se podem ligar:

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

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

Agora, no corpo do pedido, indique a política de organização pretendida para esta 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 não quiser que os repositórios do Dataform possam estabelecer ligação a repositórios Git remotos, pode definir 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, tem de executar o seguinte pedido com a definição da política da organização como corpo do pedido:

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

Defina a política de organização ao nível do projeto

A definição de uma política de organização ao nível do projeto substitui ou é unida à política de organização ao nível da organização. Em caso de união, denyAll tem prioridade sobre allowedValues. Por exemplo, se a política organizacional ao nível da organização estiver definida como denyAll e a política unida ao nível do projeto apresentar um URL de repositório remoto na lista allowedValues, o Dataform não tem autorização para se ligar ao repositório remoto. Nesse caso, a política da organização ao nível do projeto tem de substituir a política ao nível da organização para que o Dataform possa estabelecer ligação ao repositório remoto. Para saber mais sobre a hierarquia da política da organização, consulte o artigo Compreender a avaliação da hierarquia.

Consola

Siga o mesmo processo documentado em Defina a restrição da política da organização ao nível da organização, mas escolha o projeto pretendido 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. Tem de fornecer a sua política como um ficheiro JSON ou YAML.

Crie um ficheiro 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 pelo número do projeto desta política de organização.

Em seguida, transmita o ficheiro com o seu pedido:

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 autorização para se ligar aos URLs do repositório Git remoto na lista allowedValue que especificar.

Por exemplo, o seguinte é um pedido para aplicar a restrição dataform.restrictGitRemotes a uma organização onde os repositórios do Dataform só podem estabelecer ligação aos repositórios Git remotos selecionados, e a política constraints/dataform.restrictGitRemotes ainda não está definida:

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

O corpo do pedido contém a política de 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 do projeto ou pelo número do projeto para este pedido.

Segue-se um pedido para aplicar a restrição dataform.restrictGitRemotes a uma organização onde os repositórios do Dataform só podem estabelecer ligação 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 do pedido contém a política de 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 do projeto ou pelo número do projeto para este pedido.

Práticas recomendadas para a inclusão na lista de autorizações de repositórios Git remotos

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

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

  • Evite usar a lista deniedValues com esta restrição. Se definir valores na lista deniedValues, significa que apenas os repositórios Git remotos na lista deniedValues têm restrições de ligação. Isto pode ser uma preocupação de segurança se quiser controlar exatamente a que repositórios Git remotos o Dataform se pode ligar. Se quiser remover determinados repositórios Git remotos da lista allowedValues, atualize a política da organização existente para os remover da lista allowedValues, em vez de colocar o repositório remoto na lista deniedValues numa hierarquia inferior.

  • Se quiser definir uma política de organização sobre uma grande parte da hierarquia de recursos, mas isentar determinados projetos, restaure a política de organização predefinida através do método setOrgPolicy, especificando o objeto restoreDefault para permitir que todos os repositórios do Dataform nos projetos sejam associados a repositórios Git remotos. As políticas atualmente em vigor para projetos não são afetadas pela predefinição.

  • Use a política da organização juntamente com as funções 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 esta política. Se isto for um problema, recomendamos que configure outros serviços e produtos num projeto diferente que não tenha a política da organização aplicada e use a VPC partilhada, se necessário.

  • Antes de definir a política dataform.restrictGitRemotes, certifique-se de que existe comunicação sobre a política da organização e o respetivo administrador na sua organização. É da sua responsabilidade ou da responsabilidade de um administrador com as autorizações necessárias gerir e manter a política.

O que se segue?