doc-locale/fr-fr/administration/settings/user_and_ip_rate_limits.md
{{< details >}}
{{< /details >}}
La limitation de débit est une technique courante utilisée pour améliorer la sécurité et la durabilité d'une application web. Pour plus de détails, voir Limites de débit.
Les limites suivantes sont désactivées par défaut :
[!note] Par défaut, toutes les opérations Git sont d'abord tentées sans authentification. Pour cette raison, les opérations Git HTTP peuvent déclencher les limites de débit configurées pour les requêtes non authentifiées.
Les limites de débit pour les requêtes d'API n'affectent pas les requêtes effectuées par le frontend, car celles-ci sont toujours comptabilisées comme du trafic web.
Vous devez disposer d'un accès administrateur.
Pour activer la limite de débit des requêtes d'API non authentifiées :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Paramètres > Réseau.
Développez Limitations de fréquence des IP et Utilisateurs.
Sélectionnez Activer la limite de fréquence des requêtes d'API non authentifiées.
3600.3600.Pour activer la limite de débit des requêtes non authentifiées :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Paramètres > Réseau.
Développez Limitations de fréquence des IP et Utilisateurs.
Sélectionnez Activer la limite de fréquence des requêtes web non authentifiées.
3600.3600.Pour activer la limite de débit des requêtes d'API authentifiées :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Paramètres > Réseau.
Développez Limitations de fréquence des IP et Utilisateurs.
Sélectionnez Activer la limite de fréquence des requêtes d'API authentifiées.
7200.3600.Pour activer la limite de débit des requêtes authentifiées :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Paramètres > Réseau.
Développez Limitations de fréquence des IP et Utilisateurs.
Sélectionnez Activer la limite de fréquence des requêtes Web authentifiées.
7200.3600.Une requête qui dépasse une limite de débit retourne un code de réponse 429 et un corps en texte brut, qui par défaut est Retry later.
Pour utiliser une réponse personnalisée :
project/:id/jobs par minute {#maximum-authenticated-requests-to-projectidjobs-per-minute}{{< history >}}
{{< /history >}}
Pour réduire les délais d'expiration, le point de terminaison project/:id/jobs dispose d'une limite de débit par défaut de 600 appels par utilisateur authentifié.
Pour modifier le nombre maximum de requêtes :
project/:id/jobs per minute.Les en-têtes de réponse incluent des informations sur la limite de débit pour toutes les requêtes. Utilisez ces en-têtes pour surveiller de manière proactive l'utilisation et ajuster les modèles de requêtes afin d'éviter la limitation.
Les limites de débit sont appliquées via deux systèmes indépendants :
Rack::Attack : Appliquées au niveau de la couche HTTP. Parmi les exemples, on trouve les requêtes d'API authentifiées par utilisateur, ou les requêtes web non authentifiées par IP. Ces limites sont reflétées dans les en-têtes de réponse.Une seule requête peut être comptabilisée simultanément dans les deux types de limites de débit. Les en-têtes de réponse n'affichent que le statut de limite de débit Rack::Attack le plus restrictif.
[!note] Les limites de débit de l'application ne sont pas incluses dans les en-têtes de réponse.
Une requête pour créer un ticket via l'API est comptabilisée dans :
Rack::Attack). Incluse dans les en-têtes de réponse.Le dépassement de la limite de débit de création de tickets entraîne une réponse 429, même lorsque les en-têtes de réponse précédents indiquaient suffisamment de requêtes d'API authentifiées restantes.
Les en-têtes suivants sont inclus dans toutes les réponses pour aider les clients à suivre l'état de leur limite de débit :
| En-tête | Exemple | Description |
|---|---|---|
RateLimit-Limit | 60 | Le quota de requêtes du client par minute. Si la période de limite de débit définie dans la zone Admin est différente de 1 minute, la valeur de cet en-tête est ajustée à environ la période de 60 minutes la plus proche. |
RateLimit-Name | throttle_authenticated_api | Nom du régulateur appliqué à la requête. |
RateLimit-Observed | 67 | Nombre de requêtes associées au client dans la fenêtre temporelle. |
RateLimit-Remaining | 33 | Quota restant dans la fenêtre temporelle. Le résultat de RateLimit-Limit - RateLimit-Observed. |
RateLimit-Reset | 1609844400 | Heure au format Unix time à laquelle le quota de requêtes est réinitialisé. |
Lorsqu'un client dépasse la limite de débit (statut HTTP 429), les en-têtes supplémentaires suivants sont inclus :
| En-tête | Exemple | Description |
|---|---|---|
RateLimit-ResetTime | Tue, 05 Jan 2021 11:00:00 GMT | Date et heure au format RFC2616 à laquelle le quota de requêtes est réinitialisé. |
Retry-After | 30 | Durée restante en secondes jusqu'à la réinitialisation du quota. Il s'agit d'un en-tête HTTP standard. |
Selon les besoins de votre organisation, vous pouvez souhaiter activer la limitation de débit tout en permettant à certaines requêtes de contourner le limiteur de débit.
Vous pouvez faire cela en marquant les requêtes qui doivent contourner le limiteur de débit avec un en-tête personnalisé. Vous devez effectuer cette opération dans un équilibreur de charge ou un proxy inverse devant GitLab. Par exemple :
Gitlab-Bypass-Rate-Limiting.Gitlab-Bypass-Rate-Limiting: 1 sur les requêtes qui doivent contourner la limitation de débit de GitLab.Gitlab-Bypass-Rate-Limiting.Gitlab-Bypass-Rate-Limiting sur une valeur autre que 1 pour toutes les requêtes qui doivent être soumises à la limitation de débit.GITLAB_THROTTLE_BYPASS_HEADER.
'GITLAB_THROTTLE_BYPASS_HEADER' => 'Gitlab-Bypass-Rate-Limiting' dans gitlab_rails['env'].export GITLAB_THROTTLE_BYPASS_HEADER=Gitlab-Bypass-Rate-Limiting dans /etc/default/gitlab.Il est important que votre équilibreur de charge supprime ou écrase l'en-tête de contournement sur tout le trafic entrant. Sinon, vous devez faire confiance à vos utilisateurs pour ne pas définir cet en-tête et contourner le limiteur de débit de GitLab.
Le contournement ne fonctionne que si l'en-tête est défini sur 1.
Les requêtes qui ont contourné le limiteur de débit en raison de l'en-tête de contournement sont marquées avec "throttle_safelist":"throttle_bypass_header" dans production_json.log.
Pour désactiver le mécanisme de contournement, assurez-vous que la variable d'environnement GITLAB_THROTTLE_BYPASS_HEADER est non définie ou vide.
De manière similaire à l'en-tête de contournement décrit précédemment, il est possible d'autoriser un certain ensemble d'utilisateurs à contourner le limiteur de débit. Cela s'applique uniquement aux requêtes authentifiées : pour les requêtes non authentifiées, GitLab ne sait pas par définition qui est l'utilisateur.
La liste d'autorisation est configurée sous la forme d'une liste d'identifiants d'utilisateurs séparés par des virgules dans la variable d'environnement GITLAB_THROTTLE_USER_ALLOWLIST. Si vous souhaitez que les utilisateurs 1, 53 et 217 contournent le limiteur de débit des requêtes authentifiées, la configuration de la liste d'autorisation serait 1,53,217.
'GITLAB_THROTTLE_USER_ALLOWLIST' => '1,53,217' dans gitlab_rails['env'].export GITLAB_THROTTLE_USER_ALLOWLIST=1,53,217 dans /etc/default/gitlab.Les requêtes qui ont contourné le limiteur de débit en raison de la liste d'autorisation des utilisateurs sont marquées avec "throttle_safelist":"throttle_user_allowlist" dans production_json.log.
Au démarrage de l'application, la liste d'autorisation est consignée dans auth.log.
Vous pouvez tester les paramètres de régulation en définissant la variable d'environnement GITLAB_THROTTLE_DRY_RUN sur une liste de noms de régulateurs séparés par des virgules.
Les noms possibles sont :
throttle_unauthenticated
throttle_unauthenticated_api ou throttle_unauthenticated_web à la place. throttle_unauthenticated est toujours pris en charge et sélectionne les deux.throttle_unauthenticated_apithrottle_unauthenticated_webthrottle_authenticated_apithrottle_authenticated_webthrottle_unauthenticated_protected_pathsthrottle_authenticated_protected_paths_apithrottle_authenticated_protected_paths_webthrottle_unauthenticated_packages_apithrottle_authenticated_packages_apithrottle_authenticated_git_lfsthrottle_unauthenticated_files_apithrottle_authenticated_files_apithrottle_unauthenticated_deprecated_apithrottle_authenticated_deprecated_apithrottle_unauthenticated_git_httpthrottle_authenticated_git_httpPar exemple, pour tester les régulateurs pour toutes les requêtes authentifiées vers des chemins non protégés, vous pouvez définir GITLAB_THROTTLE_DRY_RUN='throttle_authenticated_web,throttle_authenticated_api'.
Pour activer le mode simulation pour tous les régulateurs, la variable peut être définie sur *.
La définition d'un régulateur en mode simulation consigne un message dans auth.log lorsqu'il atteindrait la limite, tout en laissant la requête continuer. Le message du journal contient un champ env défini sur track. Le champ matched contient le nom du régulateur qui a été atteint.
Il est important de définir la variable d'environnement avant d'activer la limitation de débit dans les paramètres. Les paramètres de la zone Admin prennent effet immédiatement, tandis que la définition de la variable d'environnement nécessite un redémarrage de tous les processus Puma.
Si de nombreux utilisateurs se connectent à GitLab via le même proxy ou la même passerelle réseau, il est possible que, si une limite de débit est trop basse, cette limite verrouille également les administrateurs, car GitLab les voit utiliser la même IP que les requêtes qui ont déclenché la régulation.
Les administrateurs peuvent utiliser la console Rails pour désactiver les mêmes limites que celles répertoriées pour la variable GITLAB_THROTTLE_DRY_RUN. Par exemple :
Gitlab::CurrentSettings.update!(throttle_authenticated_web_enabled: false)
Dans cet exemple, le paramètre throttle_authenticated_web a le suffixe de nom _enabled.
Pour définir des valeurs numériques pour les limites, remplacez le suffixe de nom _enabled par les suffixes _period_in_seconds et _requests_per_period.