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
- Se você ainda não tiver um, crie um repositório padrão no formato Docker.
- (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:
-
Crie, atualize, receba, liste e exclua regras:
Administrador do repositório do Artifact Registry (
roles/artifactregistry.repoAdmin
) -
Consultar 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 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 entreALLOW
, em que a regra permite que os downloads correspondentes ocorram, eDENY
, 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"
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 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 entreALLOW
, em que a regra permite que os downloads correspondentes ocorram, eDENY
, 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" }
Listar regras de download
gcloud
Antes de usar os dados do comando abaixo, faça estas substituições:
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.
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
: 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.
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" } ] }
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
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 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" } ] }
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 entreALLOW
eDENY
.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"
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 essa regra. Escolha entreALLOW
eDENY
.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" }
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
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 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.