料金制限

note
GitLab.comについては、GitLab.com固有のレート制限をご覧ください。

レート制限は、ウェブアプリケーションのセキュリティと耐久性を向上させるために使われる一般的なテクニックです。

例えば、単純なスクリプトは、1 秒間に何千ものウェブリクエストを行うことができます。リクエストは

  • 悪意のある
  • 無気力。
  • ただの虫。

アプリケーションやインフラが負荷に対処できない可能性があります。詳細はDenial-of-Service attack を参照してください。ほとんどの場合、1つのIPアドレスからのリクエストのレートを制限することで軽減できます。

ほとんどのブルートフォース攻撃も同様にレート制限によって軽減されます。

設定可能な制限

インスタンスの管理エリアで、これらのレート制限を設定できます:

これらのレートリミットはRailsコンソールで設定できます:

Gitおよびコンテナレジストリの認証禁止に失敗しました。

GitLab は、単一の IP アドレスから 3 分間に 30 回の認証失敗リクエストを受信した場合、HTTP ステータスコード403 を 1 時間返します。これは複合型にのみ適用されます:

  • Git リクエストにのみ適用されます。
  • コンテナレジストリ (/jwt/auth) のリクエスト。

この制限は

  • 認証に成功したリクエストによってリセットされます。例えば、29回認証に失敗し、その後1回認証に成功し、さらに29回認証に失敗しても、BANのトリガーにはなりません。
  • gitlab-ci-token によって認証された JWT リクエストには適用されません。
  • デフォルトでは無効になっています。

レスポンス・ヘッダは提供されません。

設定についてはOmnibus GitLab 設定オプションを参照してください。

設定不可能な制限

リポジトリ・アーカイブ

GitLab 12.9で導入されました

リポジトリアーカイブをダウンロードする際のレート制限が利用可能になりました。この制限は、プロジェクトと、UI または API を通じてダウンロードを開始したユーザーに適用されます。

レートリミットはユーザーあたり毎分5リクエストです。

Webhookテスト

GitLab 13.4 で導入されました

Webhookのテストにはレート制限があり、Webhook機能の悪用を防ぎます。

レートリミットはユーザーあたり毎分5リクエストです。

ユーザー登録

GitLab 14.7 で導入されました

/users/sign_up エンドポイントにはIPアドレスごとのレート制限があります。これはエンドポイントを悪用しようとする試みを軽減するためです。例えば、使用中のユーザ名やメールアドレスを大量に発見するためです。

レート制限は、IPアドレスあたり1分あたり20コールです。

ユーザー名の更新

GitLab 14.7 で導入されました

ユーザー名の変更頻度に制限を設けました。これは、この機能の悪用を防ぐためです。例えば、どのユーザー名が使われているかを大量に発見するためです。

レートリミットは、認証ユーザーあたり1分あたり10コールです。

ユーザー名が存在する場合

GitLab 14.7 で導入されました

サインアップ時に、選択したユーザー名が既に使われていないかチェックするために使われる内部エンドポイント/users/:username/exists にはレート制限があります。これは、使用中のユーザ名が大量に発見されるような悪用のリスクを軽減するためです。

レート制限は、IPアドレスあたり1分あたり20コールです。

プロジェクトジョブAPIエンドポイント

  • GitLab 15.7 でci_enforce_rate_limits_jobs_apiというフラグで導入されました。デフォルトでは無効になっています。
  • GitLab 16.0で一般的に利用可能に。機能フラグci_enforce_rate_limits_jobs_api は削除されました。

ジョブを取得する際のタイムアウトを減らすために、エンドポイントproject/:id/jobs にはレート制限があります。

レート制限は、認証ユーザー1人当たり1分あたり600コールです。

AIアクション

GitLab 16.0 で導入されました

GraphQLaiAction の変異にはレート制限があり、このエンドポイントの悪用を防ぐために強制されます。

レート制限は、認証ユーザーあたり8時間あたり160コールです。

APIを使用したメンバーの削除

GitLab 16.0 で導入されました

API エンドポイント /groups/:id/members または/project/:id/membersを使ってプロジェクトやグループのメンバーを削除するには、レート制限があります。

制限速度は1分あたり60件です。

トラブルシューティング

Rack Attack がロードバランサーのリストを拒否しています

Rack Attack は、すべてのトラフィックがロードバランサから来るように見える場合、ロードバランサをブロックするかもしれません。その場合は

  1. nginx[real_ip_trusted_addresses]を設定してください。これでユーザーのIPがロードバランサーのIPとしてリストされなくなります。
  2. ロードバランサの IP アドレスを許可します。
  3. GitLab を再設定します:

    sudo gitlab-ctl reconfigure
    

Redisを使ったRack AttackからブロックされたIPを削除

ブロックされたIPを削除するには

  1. 本番ログでブロックされたIPを検索します:

    grep "Rack_Attack" /var/log/gitlab/gitlab-rails/auth.log
    
  2. denylistはRedisに保存されているため、redis-cli を開く必要があります:

    /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/redis.socket
    
  3. 以下の構文を使ってブロックを削除できます。<ip> を denylist に登録されている実際の IP に置き換えてください:

    del cache:gitlab:rack::attack:allow2ban:ban:<ip>
    
  4. そのIPのキーが表示されなくなったことを確認します:

    keys *rack::attack*
    

    デフォルトでは、keys コマンドは無効になっています

  5. オプションで、そのIPが再び拒否リストに載らないように、許可リストに追加します。