Cette page explique comment limiter les téléchargements d'artefacts depuis vos dépôts Artifact Registry en créant et en gérant des règles de téléchargement.
Les règles de téléchargement vous permettent d'autoriser ou de refuser les téléchargements d'artefacts à partir de vos dépôts et packages. Vous pouvez également définir des conditions pour que la règle s'applique à des tags ou des versions spécifiques.
Pour en savoir plus sur le fonctionnement des règles de téléchargement, consultez la section Limiter les téléchargements d'artefacts de la présentation "Contrôler l'accès et protéger les artefacts".
Avant de commencer
- Si vous n'en avez pas déjà un, créez un dépôt standard au format Docker.
- (Facultatif) Configurez les valeurs par défaut pour les commandes Google Cloud CLI.
Rôles requis
Pour obtenir les autorisations nécessaires pour créer et gérer des règles de téléchargement, demandez à votre administrateur de vous accorder les rôles IAM suivants sur le dépôt :
-
Créer, mettre à jour, obtenir, lister et supprimer des règles : Administrateur de dépôts Artifact Registry (
roles/artifactregistry.repoAdmin) -
Obtenir et lister des règles : Lecteur Artifact Registry (
roles/artifactregistry.reader)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer des règles de téléchargement
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt, comporter au maximum 256 caractères et être composé de caractères alphanumériques, de caractères encodés en pourcentage ou de caractères de la liste [-,.,_,~,:,@,+,^].ACTION: action appliquée à un téléchargement qui correspond à cette règle. Choisissez entreALLOW, où la règle autorise les téléchargements correspondants, etDENY, où la règle bloque les téléchargements correspondants.PACKAGE: (facultatif) nom du package. S'il est fourni, la règle ne s'applique qu'au package spécifié, et non à l'ensemble du dépôt.CONDITION: (facultatif) expression CEL qui définit une règle de correspondance. Si cette option est fournie, la règle ne s'applique qu'aux téléchargements qui remplissent la condition spécifiée. Par exemple,pkg.version.id < '3.0'.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: ID du dépôt.
Exécutez la commande suivante :
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
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt, comporter au maximum 256 caractères et être composé de caractères alphanumériques, de caractères encodés en pourcentage ou de caractères de la liste [-,.,_,~,:,@,+,^].ACTION: action appliquée à un téléchargement qui correspond à cette règle. Choisissez entreALLOW, où la règle autorise les téléchargements correspondants, etDENY, où la règle bloque les téléchargements correspondants.PACKAGE: (facultatif) nom du package. S'il est fourni, la règle ne s'applique qu'au package spécifié, et non à l'ensemble du dépôt.CONDITION: (facultatif) expression CEL qui définit une règle de correspondance. Si cette option est fournie, la règle ne s'applique qu'aux téléchargements qui remplissent la condition spécifiée. Par exemple,pkg.version.id < '3.0'.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: ID du dépôt.
Méthode HTTP et URL :
POST https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules?ruleID=RULE_NAME
Corps JSON de la requête :
{
"action":"ACTION",
"packageId":"PACKAGE",
"condition":
{
"expression":"CONDITION"
}
}
Pour envoyer votre requête, développez l'une des options suivantes :
Une règle est créée avec le résultat suivant :
{
"name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
"action": ACTION,
"operation": "DOWNLOAD"
}
Répertorier les règles de téléchargement
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un signe deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Exécutez la commande suivante :
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
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
PROJECT: ID de votre projet Google Cloud. Si l'ID de votre projet contient un signe deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Méthode HTTP et URL :
GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules
Pour envoyer votre requête, développez l'une des options suivantes :
Une liste de règles pour le projet, l'emplacement et le dépôt spécifiés s'affiche, semblable à celle-ci :
{
"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"
}
]
}
Décrire les règles de téléchargement
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.PROJECT: ID de votre projet Google Cloud. Si l'ID de votre projet contient un signe deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Exécutez la commande suivante :
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
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Méthode HTTP et URL :
GET https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Pour envoyer votre requête, développez l'une des options suivantes :
Les détails de la règle s'affichent comme suit :
{
"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"
}
]
}
Mettre à jour les règles de téléchargement
gcloud
Supprimez les variables que vous ne souhaitez pas mettre à jour.
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.ACTION: action appliquée à un téléchargement qui correspond à cette règle. Choisissez entreALLOWetDENY.PACKAGE: nom du package. Si vous ne l'indiquez pas, la règle s'applique à l'ensemble du dépôt.CONDITION: expression CEL qui définit une règle de correspondance. Si cette option est fournie, la règle ne s'applique qu'aux téléchargements qui remplissent la condition spécifiée. Par exemple,pkg.version.id < '3.0'.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Exécutez la commande suivante :
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
Supprimez les variables que vous ne souhaitez pas mettre à jour.
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.ACTION: action appliquée à un téléchargement qui correspond à cette règle. Choisissez entreALLOWetDENY.PACKAGE: nom du package. Si vous ne l'indiquez pas, la règle s'applique à l'ensemble du dépôt.CONDITION: expression CEL qui définit une règle de correspondance. Si cette option est fournie, la règle ne s'applique qu'aux téléchargements qui remplissent la condition spécifiée. Par exemple,pkg.version.id < '3.0'.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Méthode HTTP et URL :
PATCH https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Corps JSON de la requête :
{
"action":"ACTION",
"packageId":"PACKAGE",
"condition":
{
"expression":"CONDITION"
}
}
Pour envoyer votre requête, développez l'une des options suivantes :
Les détails de la règle mise à jour s'affichent comme suit :
{
"name": "projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME",
"action": ACTION,
"operation": "DOWNLOAD"
}
Supprimer les règles de téléchargement
gcloud
Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Exécutez la commande suivante :
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
Avant d'utiliser les données de requête, effectuez les remplacements suivants :
RULE_NAME: nom de la règle. Le nom doit être unique dans votre dépôt.PROJECT: l'ID de votre projet Google Cloud. Si l'ID de votre projet contient un deux-points (:), consultez Projets limités à un domaine.LOCATION: emplacement régional ou multirégional du dépôt.REPOSITORY: nom du dépôt
Méthode HTTP et URL :
DELETE https://artifactregistry.googleapis.com/v1/projects/PROJECT/locations/LOCATION/repositories/REPOSITORY/rules/RULE_NAME
Pour envoyer votre requête, développez l'une des options suivantes :
Pour en savoir plus, consultez la documentation de référence REST.Utiliser CEL pour définir des conditions
Vous pouvez définir des conditions pour vos règles de téléchargement à l'aide du langage CEL (Common Expression Language), un langage Open Source permettant d'évaluer des expressions. Artifact Registry fournit l'objet pkg qui contient les attributs suivants :
pkg.id: chaîne représentant le nom du package de l'artefact. Peut être utilisé avec des ensembles de règles définis au niveau du dépôt.pkg.version.id: chaîne représentant la version de l'artefact.pkg.version.tag: chaîne représentant le tag de l'artefact. À utiliser uniquement dans un dépôt Docker.pkg.version.annotations: mappage de chaînes clé-valeur représentant les annotations définies par l'utilisateur sur la version de l'artefact dans un dépôt standard.
Vous pouvez utiliser des opérateurs logiques et des fonctions intégrées avec CEL. Voici quelques exemples d'expressions CEL qui pourraient vous être utiles dans vos règles de téléchargement :
Utile pour les règles définies au niveau du dépôt :
pkg.id == 'myPackage' #Artifact package matches 'myPackage' pkg.id.startsWith('my') #Artifact package must start with 'my'Utilité pour les règles définies sur les packages :
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'
Lorsque vous ajoutez des règles avec des conditions basées sur des tags telles que pkg.version.tag == 'latest' dans vos dépôts Docker, tenez compte des points suivants :
- Lors de l'extraction par condensé, le client ne fournit pas de tag. Les conditions utilisant des tags seront mises en correspondance avec un tag vide et pourront entraîner un comportement inattendu.
- Pour les images de conteneurs multi-architectures, les conditions utilisant des tags peuvent ne pas fonctionner comme prévu et doivent être évitées.