Nesta página, descrevemos como restringir downloads de artefatos dos seus repositórios do Artifact Registry criando e gerenciando regras de download.
Com as regras de download, é possível permitir ou negar downloads 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 "Controlar o acesso e proteger artefatos".
Antes de começar
- Se você ainda não tiver um, crie um repositório padrão no formato Docker.
- (Opcional) Configure padrões para 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:
-
Criar, atualizar, receber, listar e excluir regras:
Administrador do repositório do Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Receber e listar regras:
Leitor do Artifact Registry (
roles/artifactregistry.reader
)
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 repositório, ter um comprimento máximo de 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 esta regra. Escolha entreALLOW
, em que a regra permite que downloads correspondentes ocorram, eDENY
, em que a regra impede que downloads correspondentes ocorram.PACKAGE
: (opcional) o nome do pacote. Se fornecida, a regra será aplicada apenas ao pacote especificado, em vez de a todo o repositório.CONDITION
: (opcional) uma expressão CEL que define uma regra de correspondência. Se fornecida, 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 contiver 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"
Created rule [RULE_NAME].
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 um comprimento máximo de 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 esta regra. Escolha entreALLOW
, em que a regra permite que downloads correspondentes ocorram, eDENY
, em que a regra impede que downloads correspondentes ocorram.PACKAGE
: (opcional) o nome do pacote. Se fornecida, a regra será aplicada apenas ao pacote especificado, em vez de a todo o repositório.CONDITION
: (opcional) uma expressão CEL que define uma regra de correspondência. Se fornecida, 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 contiver 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" }
Listar regras de download
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
PROJECT
: o Google Cloud ID do projeto. Se o ID do projeto contiver 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 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
RULE: my-rule PACKAGE: example.com/foo ACTION: DENY OPERATION: DOWNLOAD CONDITION: pkg.version.id < '3.0'
gcloud artifacts rules list
.
API
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT
: o Google Cloud ID do projeto. Se o ID do projeto contiver 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
Para enviar a solicitação, expanda uma destas opções:
Uma lista de regras para o projeto, local e repositório especificados é exibida, 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" } ] }
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 contiver 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
RULE: my-rule PACKAGE: example.com/foo ACTION: DENY OPERATION: DOWNLOAD CONDITION: pkg.version.id < '3.0'
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 contiver 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" } ] }
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 esta regra. Escolha entreALLOW
eDENY
.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 fornecida, 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 contiver 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"
Updated rule [RULE_NAME]. action: ACTION condition: expression: CONDITION name: projects/PROJECT/locationsLOCATION/repositories/REPOSITORY/rules/RULE_NAME operation: DOWNLOAD
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 esta regra. Escolha entreALLOW
eDENY
.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 fornecida, 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 contiver 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 maneira semelhante a esta:{ "name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME", "action": ACTION, "operation": "DOWNLOAD" }
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 contiver 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
You are about to delete rule [RULE_NAME] Do you want to continue (Y/n)? Y Deleted rule [RULE_NAME].
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 contiver 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 a CEL para definir condições
É possível definir condições para suas regras de download com a
Common Expression Language (CEL), 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 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. Use somente em um repositório do Docker.
É possível usar operadores lógicos e funções integradas com a 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 seus 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 correspondidas a uma tag vazia e poderão resultar em um comportamento inesperado.
- Para imagens de contêiner de multiarquitetura, as condições que usam tags podem não funcionar como esperado e devem ser evitadas.