Esta página descreve como restringir os 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 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 saber 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 CLI do Google Cloud.
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, acesse, liste e exclua 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
Antes de usar os dados do comando abaixo, faça estas substituições:
: o nome da regra. O nome precisa ser exclusivo no seu repositório, ter um comprimento máximo de 256 caracteres e consistir em caracteres alfanuméricos, caracteres codificados em percentual ou caracteres na lista [RULE_NAME -
,.
,_
,~
,:
,@
,+
,^
].
: a ação aplicada a um download que corresponde a essa regra. Escolha entreACTION ALLOW
, em que a regra permite que os downloads correspondentes ocorram, eDENY
, em que a regra bloqueia os downloads correspondentes.
: (opcional) o nome do pacote. Se fornecido, a regra é aplicada apenas ao pacote especificado, e não a todo o repositório.PACKAGE
: (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,CONDITION pkg.version.id < '3.0'
.
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o ID do repositório.REPOSITORY
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud artifacts rules createRULE_NAME \ --action=ACTION \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY \ --package=PACKAGE \ --condition="CONDITION "
Windows (PowerShell)
gcloud artifacts rules createRULE_NAME ` --action=ACTION ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY ` --package=PACKAGE ` --condition="CONDITION "
Windows (cmd.exe)
gcloud artifacts rules createRULE_NAME ^ --action=ACTION ^ --project=PROJECT ^ --location=LOCATION ^ --repository=REPOSITORY ^ --package=PACKAGE ^ --condition="CONDITION "
Created rule [RULE_NAME ].
gcloud artifacts rules create
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
: 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 [RULE_NAME -
,.
,_
,~
,:
,@
,+
,^
].
: a ação aplicada a um download que corresponde a essa regra. Escolha entreACTION ALLOW
, em que a regra permite que os downloads correspondentes ocorram, eDENY
, em que a regra bloqueia os downloads correspondentes.
: (opcional) o nome do pacote. Se fornecido, a regra é aplicada apenas ao pacote especificado, e não a todo o repositório.PACKAGE
: (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,CONDITION pkg.version.id < '3.0'
.
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o ID do repositório.REPOSITORY
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:
curl (Linux, macOS ou Cloud Shell)
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules?ruleID=RULE_NAME "
PowerShell (Windows)
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules?ruleID=RULE_NAME " | Select-Object -Expand Content
{ "name": "projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME ", "action":ACTION , "operation": "DOWNLOAD" }
Listar regras de download
Antes de usar os dados do comando abaixo, faça estas substituições:
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
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
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
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:
curl (Linux, macOS ou Cloud Shell)
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules"
PowerShell (Windows)
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules" | Select-Object -Expand Content
{ "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
Antes de usar os dados do comando abaixo, faça estas substituições:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud artifacts rules describeRULE_NAME \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY
Windows (PowerShell)
gcloud artifacts rules describeRULE_NAME ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY
Windows (cmd.exe)
gcloud artifacts rules describeRULE_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
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
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:
curl (Linux, macOS ou Cloud Shell)
Execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME "
PowerShell (Windows)
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME " | Select-Object -Expand Content
{ "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
Remova as variáveis que você não quer atualizar.
Antes de usar os dados do comando abaixo, faça estas substituições:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: a ação aplicada a um download que corresponde a essa regra. Escolha entreACTION ALLOW
eDENY
.
: o nome do pacote. Se não for fornecido, a regra será aplicada a todo o repositório.PACKAGE
: 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,CONDITION pkg.version.id < '3.0'
.
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud artifacts rules updateRULE_NAME \ --action=ACTION \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY \ --package=PACKAGE \ --condition="CONDITION "
Windows (PowerShell)
gcloud artifacts rules updateRULE_NAME ` --action=ACTION ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY ` --package=PACKAGE ` --condition="CONDITION "
Windows (cmd.exe)
gcloud artifacts rules updateRULE_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
.
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:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: a ação aplicada a um download que corresponde a essa regra. Escolha entreACTION ALLOW
eDENY
.
: o nome do pacote. Se não for fornecido, a regra será aplicada a todo o repositório.PACKAGE
: uma expressão CEL que define uma regra de correspondência. Se informado, aplica a regra apenas aos downloads que correspondem à condição especificada. Por exemplo,CONDITION pkg.version.id < '3.0'
.
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
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:
curl (Linux, macOS ou Cloud Shell)
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d @request.json \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME "
PowerShell (Windows)
Salve o corpo da solicitação em um arquivo com o nome request.json
e execute o comando a seguir:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json" `
-InFile request.json `
-Uri "https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME " | Select-Object -Expand Content
{ "name": "projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME ", "action":ACTION , "operation": "DOWNLOAD" }
Excluir regras de download
Antes de usar os dados do comando abaixo, faça estas substituições:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
Execute o seguinte comando:
Linux, macOS ou Cloud Shell
gcloud artifacts rules describeRULE_NAME \ --project=PROJECT \ --location=LOCATION \ --repository=REPOSITORY
Windows (PowerShell)
gcloud artifacts rules describeRULE_NAME ` --project=PROJECT ` --location=LOCATION ` --repository=REPOSITORY
Windows (cmd.exe)
gcloud artifacts rules describeRULE_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
.
Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
: o nome da regra. O nome precisa ser exclusivo no repositório.RULE_NAME
: o ID do projeto Google Cloud. Caso o ID do projeto contenha dois pontos (PROJECT :
), consulte Projetos com escopo de domínio.
: o local regional ou multirregional do repositório.LOCATION
: o nome do repositório.REPOSITORY
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:
curl (Linux, macOS ou Cloud Shell)
Execute o seguinte comando:
curl -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME "
PowerShell (Windows)
Execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method DELETE `
-Headers $headers `
-Uri "https://artifactregistry.googleapis.com/v1/projects/PROJECT /locations/LOCATION /repositories/REPOSITORY /rules/RULE_NAME " | Select-Object -Expand Content
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 apenas 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, observe o 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.