Restringir downloads de artefatos com regras de download

Nesta página, descrevemos como restringir downloads de artefatos dos repositórios do Artifact Registry criando e gerenciando regras de download.

As regras de download permitem ou negam o download de artefatos dos seus 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 download funcionam, consulte a seção Restringir downloads de artefatos da visão geral de controle de acesso e proteção de 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 os 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 para conceder 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 usando papéis personalizados ou 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 repositório, ter no máximo 256 caracteres e consistir em caracteres alfanuméricos, caracteres codificados por porcentagem ou caracteres na lista [-, ., _, ~, :, @, +, ^].
  • ACTION: a ação aplicada a um download que corresponde a essa regra. Escolha entre ALLOW, em que a regra permite que os downloads correspondentes ocorram, e DENY, em que a regra impede que os downloads correspondentes ocorram.
  • PACKAGE: (opcional) o nome do pacote. Se fornecida, a regra se aplica apenas ao pacote especificado, em vez de 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: o Google Cloud ID do projeto. Se o ID do projeto tiver 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 repositório, ter no máximo 256 caracteres e consistir em caracteres alfanuméricos, caracteres codificados por porcentagem ou caracteres na lista [-, ., _, ~, :, @, +, ^].
  • ACTION: a ação aplicada a um download que corresponde a essa regra. Escolha entre ALLOW, em que a regra permite que os downloads correspondentes ocorram, e DENY, em que a regra impede que os downloads correspondentes ocorram.
  • PACKAGE: (opcional) o nome do pacote. Se fornecida, a regra se aplica apenas ao pacote especificado, em vez de 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: o Google Cloud ID do projeto. Se o ID do projeto tiver 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, semelhante ao seguinte:
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, local e repositório especificados é exibida, semelhante ao seguinte:
{
  "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 REST.

Descrever 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: o Google Cloud ID do projeto. Se o ID do projeto tiver 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 exibidos de maneira semelhante ao seguinte:
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 Google Cloud ID do projeto. Se o ID do projeto tiver 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 maneira semelhante ao seguinte:
{
  "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 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 pacote. 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 apenas aos downloads que correspondem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: o Google Cloud ID do projeto. Se o ID do projeto tiver 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 atualizados da regra são mostrados de forma semelhante ao seguinte:
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 pacote. 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 apenas aos downloads que correspondem à condição especificada. Por exemplo, pkg.version.id < '3.0'.
  • PROJECT: o Google Cloud ID do projeto. Se o ID do projeto tiver 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 atualizados da regra são mostrados de forma semelhante ao seguinte:
{
  "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
  "action": ACTION,
  "operation": "DOWNLOAD"
}
Para mais informações, consulte a referência 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: o Google Cloud ID do projeto. Se o ID do projeto tiver 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 delete RULE_NAME \
    --project=PROJECT \
    --location=LOCATION \
    --repository=REPOSITORY

Windows (PowerShell)

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

Windows (cmd.exe)

gcloud artifacts rules delete 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 repositório.
  • PROJECT: o Google Cloud ID do projeto. Se o ID do projeto tiver 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:

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 CEL para definir condições

É possível definir condições para as regras de download com a Common Expression Language (CEL), que é uma linguagem de código aberto para avaliação de expressões. 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 conjuntos de regras definidos 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. Use apenas em um repositório do Docker.
  • pkg.version.annotations: um mapa de strings de chave-valor que representam anotações definidas pelo usuário na versão do artefato em um repositório padrão.

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

  • Útil para conjuntos de regras definidos 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 conjuntos de regras definidos 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']
      'quarantined' in pkg.version.annotations && pkg.version.annotations['quarantined'] == 'true' #Artifact version has annotation 'quarantined' set to 'true'
    

Ao adicionar regras com condições baseadas em tags, como pkg.version.tag == 'latest' nos repositórios do Docker, esteja ciente 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 poderão 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 precisam ser evitadas.