burrow/nixos/modules/burrow-openbao.nix
Conrad Kramer 002bd382e9
Some checks failed
Cache: Publish Nix / Publish Nix Cache (push) Waiting to run
Build Rust / Cargo Test (push) Successful in 4m14s
Build Site / Next.js Build (push) Failing after 6s
Infra: OpenTofu / OpenTofu (grafana) (push) Successful in 5s
Lint Governance / BEP Metadata (push) Successful in 0s
Build: Android / Android Rust Core Stub (push) Failing after 23s
Wire Forge-native release infrastructure
2026-06-07 05:51:12 -07:00

101 lines
2.7 KiB
Nix

{ config, lib, ... }:
let
cfg = config.services.burrow.openbao;
in
{
options.services.burrow.openbao = {
enable = lib.mkEnableOption "the Burrow OpenBao deployment";
domain = lib.mkOption {
type = lib.types.str;
default = "vault.burrow.net";
description = "Public OpenBao domain.";
};
listenAddress = lib.mkOption {
type = lib.types.str;
default = "127.0.0.1";
description = "Local OpenBao listener address.";
};
port = lib.mkOption {
type = lib.types.port;
default = 8200;
description = "Local OpenBao API port.";
};
clusterPort = lib.mkOption {
type = lib.types.port;
default = 8201;
description = "Local OpenBao cluster port.";
};
dataDir = lib.mkOption {
type = lib.types.str;
default = "/var/lib/burrow/openbao";
description = "Persistent OpenBao state directory.";
};
googleKmsSeal = {
enable = lib.mkEnableOption "Google Cloud KMS seal wrapping";
project = lib.mkOption {
type = lib.types.str;
default = "project-88c23ce9-918a-470a-b33";
description = "Google Cloud project containing the seal key.";
};
location = lib.mkOption {
type = lib.types.str;
default = "global";
description = "Google Cloud KMS key ring location.";
};
keyRing = lib.mkOption {
type = lib.types.str;
default = "burrow-identity";
description = "Google Cloud KMS key ring name.";
};
cryptoKey = lib.mkOption {
type = lib.types.str;
default = "openbao-seal";
description = "Google Cloud KMS crypto key name used for seal wrapping.";
};
};
};
config = lib.mkIf cfg.enable {
systemd.tmpfiles.rules = [
"d ${cfg.dataDir} 0700 openbao openbao - -"
"d ${cfg.dataDir}/data 0700 openbao openbao - -"
];
services.openbao = {
enable = true;
settings = {
ui = true;
api_addr = "https://${cfg.domain}";
cluster_addr = "http://${cfg.listenAddress}:${toString cfg.clusterPort}";
storage.file.path = "${cfg.dataDir}/data";
listener.tcp = {
address = "${cfg.listenAddress}:${toString cfg.port}";
tls_disable = true;
};
} // lib.optionalAttrs cfg.googleKmsSeal.enable {
seal.gcpckms = {
project = cfg.googleKmsSeal.project;
region = cfg.googleKmsSeal.location;
key_ring = cfg.googleKmsSeal.keyRing;
crypto_key = cfg.googleKmsSeal.cryptoKey;
};
};
};
services.caddy.virtualHosts."${cfg.domain}".extraConfig = ''
encode gzip zstd
reverse_proxy ${cfg.listenAddress}:${toString cfg.port}
'';
};
}