アップデート一覧に戻る
New releaseAug 19, 2026

kviklet v0.8.0

データベースクエリに対するプルリクエスト形式のレビュー/承認フロー。コンプライアンスを確保しつつ、エンジニアがスムーズに本番環境へアクセスできるようにします。

共有

Kviklet

Kviklet.dev | リリースノート | Discord

開発者の生産性を損なうことなく、本番環境への安全なアクセスを実現します。

Kviklet Kviklet

Kviklet(クイックレットと発音)は、本番データベースアクセスに四眼原則を適用し、個々のSQL文または時間制限付きデータベースセッションに対して、プルリクエストのようなレビューと承認のワークフローを提供します。エンジニアは、すべてのクエリをDBAや運用チーム経由にすることなく、互いのリクエストをレビューして承認できます。

Kvikletはセルフホスト型で、アプリケーション状態用のPostgreSQLデータベースを備えたDockerコンテナとして動作します。Webインターフェースからリクエストの送信、レビュー、実行が可能です。オプションのエンタープライズライセンスにより、SAML認証、ロールベースのレビュー要件、ロール同期、APIキーが利用可能になります。エンタープライズライセンスはkviklet.devでお申し込みください。

対応データベースはPostgres、MySQL、MariaDB、MS SQL Server、MongoDBです。

アクセスモデル

Kvikletを既存のIDプロバイダーに接続することを推奨します。KvikletはOIDC(Google、Keycloakなど)またはSAML(エンタープライズ限定)によるSSO、およびLDAP認証(Active Directoryなど)をサポートしています。
ユーザーは特定のデータベースユーザーにマッピングされた接続に対してリクエストを作成します。これらのリクエストは以下のいずれかです:

  • 単一クエリ: レビューのために送信された特定のSQL文。
  • 一時アクセス: 複数の文を実行できる時間制限付きセッション。

設定に応じて、Kvikletが実行を許可する前に、リクエストは他のユーザーによってレビューおよび承認されます。

Kvikletはユーザーに代わってデータベースに接続します。接続のデータベースパスワードがユーザーに表示されることはありません。

管理者は、どのロールがどの接続にアクセスできるか、および実行に必要なレビューゲートを設定できます。データベースレベルのアクセスは、基盤となるデータベースのRBACメカニズムを介して管理されます。例えば、読み取り専用接続用に読み取り専用ロールを作成し、書き込み接続よりも少ないレビュー要件を割り当てることが可能です。

Kvikletは実行された文を記録し、ユーザーとアクセスリクエストに関連付けます。手動によるデータベースアクセスを完全にカバーするには、直接接続を制限し、すべての手動アクセスをKviklet経由でルーティングしてください。エンジニアは基盤となるデータベース認証情報を受け取ったり共有したりする必要がありません。

追加のエンタープライズ機能には以下が含まれます:

  • SAML: SAML認証のサポート。
  • プロキシ(Postgres、MariaDB、MySQL):一時パスワードを使用した承認済みの一時アクセスセッションを通じて、お好みのデータベースクライアントを使用できます。実行された文はKvikletの監査ログに記録されます。
  • ロールベースのレビューゲート: 実行前に特定のロールからの承認を要求します。
  • ロール同期: IDプロバイダーのグループからユーザーロールを自動的に同期します。
  • APIキー: Kviklet APIへのプログラムによるアクセス。
その他のスクリーンショット

リクエスト

すべてのデータリクエストが一箇所に集約されます。本番データベースのオープンPRのように:

Requests Requests

ライブセッション

承認された一時アクセスリクエストは、ブラウザ上で直接ライブSQLセッションを開きます:

Live Session Live Session

監査ログ

実行されたすべての文が記録されます — レビュー済みの単一クエリとして実行されたか、ライブセッション内で実行されたか、データベースプロキシ経由で実行されたかに関わらず:

audit log audit log

データベース/接続タイプ別の機能

ほとんどの機能はすべてのデータベースで利用可能です(SSO、LDAP、RBAC、レビュー/承認フロー、監査ログなど)。ただし、一部の機能は制限されています。単にまだ実装されていないか、その特定の目的に対して意味をなさないかのいずれかです。以下の表は、どの機能がどのデータベースタイプで利用可能かを示しています:

DatabaseStatement ReviewTemporary AccessProxy(Beta)Explain Plan
Postgres✓✓✓✓
MySQL✓✓✓✓
MariaDB✓✓✓✓
SQL Server✓✓✗✓
MongoDB✓✓✗✗
Kubernetes✓✗✗✗

セットアップ

KvikletはシンプルなDockerコンテナとして提供されます。 利用可能なバージョンはReleasesで確認できます。新機能を継続的に開発しているため、使用しているバージョンを定期的に更新することを推奨します。
現在の最新版はghcr.io/kviklet/kviklet:0.8.0です。:mainも使用できますが、時折バグのあるものが誤ってマージされる可能性があります。ただし、それは避けるよう努めています。

クイックスタート

どのように動作するか試してみたいだけの場合:

  1. 以下は最小限のdocker-compose.yamlです:

    クリックしてcomposeの内容を展開 ``` services: postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ports: - "5432:5432" volumes: - ./postgres-data:/var/lib/postgresql/data # - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql

    kviklet-postgres: image: postgres:16 restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: kviklet ports: - "5433:5432" volumes: - ./kviklet-postgres-data:/var/lib/postgresql/data

    kviklet: image: ghcr.io/kviklet/kviklet:main ports: - "80:8080" environment: - SPRING_DATASOURCE_URL=jdbc:postgresql://kviklet-postgres:5432/kviklet - SPRING_DATASOURCE_USERNAME=postgres - SPRING_DATASOURCE_PASSWORD=postgres - INITIAL_USER_EMAIL=[email protected] - INITIAL_USER_PASSWORD=admin depends_on: - kviklet-postgres

  1. docker-compose up -d で docker-compose.yml を実行します。Kviklet はポート 80 で起動するので、localhost にアクセスして試してみてください。管理者ログインは [email protected]、パスワードは admin です。

  2. docker-compose には、Kviklet で接続を設定できる追加の postgres データベースが含まれています。このデータベースにデータを入れるには、次の行のコメントを解除してください: ``` - ./sample_data.sql:/docker-entrypoint-initdb.d/init.sql

そして、sample_data.sql ファイルを作成します:

クリックして sample_data.sql の内容を展開 ```sql CREATE TABLE Locations ( Name VARCHAR(100) NOT NULL, Address VARCHAR(255) NOT NULL, City VARCHAR(100) NOT NULL, Country VARCHAR(100) NOT NULL, PostalCode VARCHAR(20) NOT NULL );

alter table public.Locations owner to postgres;

INSERT INTO public.Locations (Name, Address, City, Country, PostalCode) VALUES ('Central Park', '59th to 110th St', 'New York', 'USA', '10022'), ('Eiffel Tower', 'Champ de Mars, 5 Avenue Anatole', 'Paris', 'France', '75007'), ('Colosseum', 'Piazza del Colosseo, 1', 'Rome', 'Italy', '00184'), ('Sydney Opera House', 'Bennelong Point', 'Sydney', 'Australia', '2000'), ('Great Wall of China', 'Huairou District', 'Beijing', 'China', '101405');

</details>

### DB セットアップ

Kviklet はクエリ、接続、承認などに関するメタデータを保存するために、独自の postgres データベース(または少なくともスキーマ)を必要とします。
公式イメージはこちらにあります: https://hub.docker.com/_/postgres、またはお好みのクラウドプロバイダーが提供するクラウドホスト版を利用することもできます。

kviklet コンテナを起動する際には、次の 3 つの環境変数を適切に設定する必要があります:```
SPRING_DATASOURCE_PASSWORD = password
SPRING_DATASOURCE_USERNAME = username
SPRING_DATASOURCE_URL = jdbc:postgresql://[host]:[port]/[database]?currentSchema=[schema]

代替認証方法

  • IAM 認証: データベース接続に AWS IAM 認証を使用することが可能です。その場合はパスワードを省略し、ユーザー名のみを設定します。 また、以下の環境変数を設定する必要があります: ``` SPRING_DATASOURCE_IAMAUTH=true

Kvikletは通常の場所(環境変数、インスタンスロールなど)から認証情報を読み込み、接続用のトークンを生成します。

  • 証明書: DB接続に証明書を使用することもできます。例についてはこちらを参照してください。

初期ユーザー

設定のために初期管理者ユーザーが必要です。そのためには、2つの環境変数INITIAL_USER_EMAILとINITIAL_USER_PASSWORDを設定して、Webインターフェースにログインできるようにします。パスワードは後でUIから変更できます。
例:``` INITIAL_USER_EMAIL=[email protected] INITIAL_USER_PASSWORD=someverysecurepassword

私たちは現在、コンテナを GitHub packages に公開しているので、これらをすべて設定した上で `ghcr.io/kviklet/kviklet:main` を実行できます。Kviklet が起動するデフォルトポートである `8080` のマッピングを忘れないでください。

カテゴリ