Restringir downloads de artefatos com regras de download

Esta página descreve como restringir os downloads de artefatos do seu os repositórios do Artifact Registry criando e gerenciando regras de download.

Com as regras de download, você pode permitir ou negar downloads de artefatos do seu repositórios e pacotes. Também é possível definir condições para que a regra seja aplicada a tags ou versões específicas.

Para detalhes sobre como as regras de downloads funcionam, consulte Restringir downloads de artefatos da visão geral Controlar o acesso e proteger artefatos.

Antes de começar

  1. Se você ainda não tiver um, crie um repositório padrão no formato Docker.
  2. (Opcional) Configure padrões para os comandos da Google Cloud CLI.

Funções exigidas

Para receber as permissões necessárias para criar e gerenciar regras de download, peça ao administrador que conceda a você os seguintes papéis do IAM no repositório:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Criar regras de download

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no seu repositório, ter no máximo 256 caracteres e consistir em caracteres alfanuméricos, caracteres codificados em percentual ou caracteres na lista [-, ., _, ~, :, @, +, ^].
  • ACTION: a ação aplicada a um download que corresponda a essa regra. Escolha entre ALLOW, em que a regra permite que os downloads correspondentes ocorram, e DENY, em que a regra bloqueia os downloads correspondentes.
  • PACKAGE: (opcional) o nome do pacote. Se fornecido, a regra é aplicada apenas ao pacote especificado, e não a todo o repositório.
  • CONDITION: (opcional) uma expressão CEL que define uma regra de correspondência. Se fornecido, aplica a regra apenas aos downloads que correspondem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: seu Google Cloud ID do projeto. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o ID do repositório.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud artifacts rules create RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows (PowerShell)

gcloud artifacts rules create RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows (cmd.exe)

gcloud artifacts rules create RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
Uma nova regra é criada com a seguinte saída:
Created rule [RULE_NAME].
Para mais informações, consulte o comando gcloud artifacts rules create.

API

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no seu repositório, ter no máximo 256 caracteres e consistir em caracteres alfanuméricos, caracteres codificados em percentual ou caracteres na lista [-, ., _, ~, :, @, +, ^].
  • ACTION: a ação aplicada a um download que corresponda a essa regra. Escolha entre ALLOW, em que a regra permite que os downloads correspondentes ocorram, e DENY, em que a regra bloqueia os downloads correspondentes.
  • PACKAGE: (opcional) o nome do pacote. Se fornecida, a regra se aplica apenas ao pacote especificado e não ao pacote inteiro repositório de dados.
  • CONDITION: (opcional) uma expressão CEL que define uma regra de correspondência. Se fornecido, aplica a regra apenas aos downloads que correspondem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: seu Google Cloud ID do projeto. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o ID do repositório.

Método HTTP e URL:

POST https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules?ruleID=RULE_NAME

Corpo JSON da solicitação:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Uma nova regra é criada com a seguinte saída:
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
Para mais informações, consulte a referência da REST.

Listar regras de download

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud artifacts rules list \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules list `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules list ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
Uma lista de regras para o projeto, o local e o repositório especificados é exibida de forma semelhante a esta:
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
Para mais informações, consulte o comando gcloud artifacts rules list.

API

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

Método HTTP e URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules

Para enviar a solicitação, expanda uma destas opções:

Uma lista de regras para o projeto, o local e o repositório especificados é exibida de forma semelhante a esta:
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
Para mais informações, consulte a referência da REST.

Descrever as regras de download

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no seu repositório.
  • PROJECT: seu Google Cloud ID do projeto. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o nome do repositório.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
Os detalhes da regra são mostrados da seguinte forma:
RULE: my-rule
PACKAGE: example.com/foo
ACTION: DENY
OPERATION: DOWNLOAD
CONDITION: pkg.version.id < '3.0'
Para mais informações, consulte o comando gcloud artifacts rules describe.

API

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no repositório.
  • PROJECT: o ID do projeto do Google Cloud. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o nome do repositório.

Método HTTP e URL:

GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Para enviar a solicitação, expanda uma destas opções:

Os detalhes da regra são exibidos de forma semelhante a esta:
{
  "rules": [
    {
      "name": "projects/my-project/locations/us-central1/repositories/my-repo/rules/my-rule",
      "action": "DENY",
      "operation": "DOWNLOAD",
      "condition": {
        "expression": "pkg.version.id \u003c '3.0'"
      },
      "packageId": "example.com/foo"
    }
  ]
}
Para mais informações, consulte a referência da REST.

Atualizar regras de download

gcloud

Remova as variáveis que você não quer atualizar.

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no repositório.
  • ACTION: a ação aplicada a um download que corresponde a essa regra. Escolha entre ALLOW e DENY.
  • PACKAGE: o nome do . Se não for fornecido, a regra será aplicada a todo o repositório.
  • CONDITION: uma expressão CEL que define uma regra de correspondência. Se fornecido, aplica a regra somente aos downloads que corresponderem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: seu Google Cloud ID do projeto. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o nome do repositório.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud artifacts rules update RULE_NAME \
    --action=ACTION \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY \
    --package=PACKAGE \
    --condition="CONDITION"

Windows (PowerShell)

gcloud artifacts rules update RULE_NAME `
    --action=ACTION `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY `
    --package=PACKAGE `
    --condition="CONDITION"

Windows (cmd.exe)

gcloud artifacts rules update RULE_NAME ^
    --action=ACTION ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY ^
    --package=PACKAGE ^
    --condition="CONDITION"
Os detalhes da regra atualizada são mostrados da seguinte forma:
Updated rule [RULE_NAME].
action: ACTION
condition:
  expression: CONDITION
name: projects/PROJECT/locationsLOCATION/repositories/REPOSITORY/rules/RULE_NAME
operation: DOWNLOAD
Para mais informações, consulte o comando gcloud artifacts rules update.

API

Remova as variáveis que você não quer atualizar.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no repositório.
  • ACTION: a ação aplicada a um download que corresponde a essa regra. Escolha entre ALLOW e DENY.
  • PACKAGE: o nome do . Se não for fornecida, a regra será aplicada a todo o repositório.
  • CONDITION: uma expressão CEL que define uma regra de correspondência. Se fornecido, aplica a regra somente aos downloads que corresponderem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: o ID do projeto do Google Cloud. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: o local regional ou multirregional do repositório.
  • REPOSITORY: o nome do repositório.

Método HTTP e URL:

PATCH https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Corpo JSON da solicitação:

{
  "action":"ACTION",
  "packageId":"PACKAGE",
  "condition":
  {
    "expression":"CONDITION"
  }
}

Para enviar a solicitação, expanda uma destas opções:

Os detalhes da regra atualizada são mostrados da seguinte forma:
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
Para mais informações, consulte a referência da REST.

Excluir regras de download

gcloud

Antes de usar os dados do comando abaixo, faça estas substituições:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no repositório.
  • PROJECT: seu Google Cloud ID do projeto. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: regional ou multirregional. local do repositório.
  • REPOSITORY: o nome do repositório.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud artifacts rules describe RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

gcloud artifacts rules describe RULE_NAME `
    --project=PROJECT `
    --location=LOCATION `
    --repository=REPOSITORY

Windows (cmd.exe)

gcloud artifacts rules describe RULE_NAME ^
    --project=PROJECT ^
    --location=LOCATION ^
    --repository=REPOSITORY
A regra é excluída com a seguinte saída:
You are about to delete rule [RULE_NAME]

Do you want to continue (Y/n)?  Y

Deleted rule [RULE_NAME].
Para mais informações, consulte o comando gcloud artifacts rules delete.

API

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • RULE_NAME: o nome da regra. O nome precisa ser exclusivo no seu repositório.
  • PROJECT: o ID do projeto do Google Cloud. Caso o ID do projeto contenha dois pontos (:), consulte Projetos com escopo de domínio.
  • LOCATION: regional ou multirregional. local do repositório.
  • REPOSITORY: o nome do repositório.

Método HTTP e URL:

DELETE https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME

Para enviar a solicitação, expanda uma destas opções:

Para mais informações, consulte a referência REST.

Usar a CEL para definir condições

Você pode definir condições para suas regras de download com Common Expression Language (CEL), que é uma linguagem de código aberto para avaliação da expressão. O Artifact Registry fornece o objeto pkg, que contém os seguintes atributos:

  • pkg.id: uma string que representa o nome do pacote do artefato. Pode ser usado com regras definidas no nível do repositório.
  • pkg.version.id: uma string que representa a versão do artefato.
  • pkg.version.tag: uma string que representa a tag do artefato. Somente uso em um repositório do Docker.

É possível usar operadores lógicos e funções integradas com o CEL. Confira alguns exemplos de expressões CEL que podem ser úteis nas suas regras de download:

  • Útil para regras definidas no nível do repositório:

      pkg.id == 'myPackage'  #Artifact package matches 'myPackage'
      pkg.id.startsWith('my') #Artifact package must start with 'my'
    
  • Útil para regras definidas em pacotes:

      pkg.version.id != '1.0.0' #Artifact version is not '1.0.0'
      pkg.version.id > '1.0.1' || pkg.version.id < '0.0.1' #Artifact version is greater than '1.0.1' or less than '0.0.1'
      pkg.version.id.startsWith('1.0.') #Artifact version must start with '1.0.'
      pkg.version.id in ['1.0.0', '1.2.0'] #Artifact version must be a member of the list ['1.0.0', '1.2.0']
      pkg.version.tag == 'tag1' #Artifact tag must be 'tag1'
      pkg.version.tag.startsWith('tag') #Artifact tag must start with 'tag'
      pkg.version.tag in ['tag1', 'tag2'] #Artifact tag must be a member of the list ['tag1', 'tag2']
    

Ao adicionar regras com condições baseadas em tags, como pkg.version.tag == 'latest' nos repositórios do Docker, lembre-se do seguinte:

  • Ao extrair por resumo, o cliente não fornece uma tag. As condições que usam tags serão comparadas com uma tag vazia e podem resultar em um comportamento inesperado.
  • Para imagens de contêiner de várias arquiteturas, as condições que usam tags podem não funcionar como esperado e devem ser evitadas.