python312Packages.dissect-extfs: 3.11 -> 3.12
[NixPkgs.git] / nixos / modules / services / security / hologram-server.nix
blob4acf6ae0e2182004f0a9f9dca75732262bba2bb7
1 {pkgs, config, lib, ...}:
3 with lib;
5 let
6   cfg = config.services.hologram-server;
8   cfgFile = pkgs.writeText "hologram-server.json" (builtins.toJSON {
9     ldap = {
10       host = cfg.ldapHost;
11       bind = {
12         dn       = cfg.ldapBindDN;
13         password = cfg.ldapBindPassword;
14       };
15       insecureldap    = cfg.ldapInsecure;
16       userattr        = cfg.ldapUserAttr;
17       baseDN          = cfg.ldapBaseDN;
18       enableldapRoles = cfg.enableLdapRoles;
19       roleAttr        = cfg.roleAttr;
20       groupClassAttr  = cfg.groupClassAttr;
21     };
22     aws = {
23       account     = cfg.awsAccount;
24       defaultrole = cfg.awsDefaultRole;
25     };
26     stats        = cfg.statsAddress;
27     listen       = cfg.listenAddress;
28     cachetimeout = cfg.cacheTimeoutSeconds;
29   });
30 in {
31   options = {
32     services.hologram-server = {
33       enable = mkOption {
34         type = types.bool;
35         default = false;
36         description = "Whether to enable the Hologram server for AWS instance credentials";
37       };
39       listenAddress = mkOption {
40         type        = types.str;
41         default     = "0.0.0.0:3100";
42         description = "Address and port to listen on";
43       };
45       ldapHost = mkOption {
46         type        = types.str;
47         description = "Address of the LDAP server to use";
48       };
50       ldapInsecure = mkOption {
51         type        = types.bool;
52         default     = false;
53         description = "Whether to connect to LDAP over SSL or not";
54       };
56       ldapUserAttr = mkOption {
57         type        = types.str;
58         default     = "cn";
59         description = "The LDAP attribute for usernames";
60       };
62       ldapBaseDN = mkOption {
63         type        = types.str;
64         description = "The base DN for your Hologram users";
65       };
67       ldapBindDN = mkOption {
68         type        = types.str;
69         description = "DN of account to use to query the LDAP server";
70       };
72       ldapBindPassword = mkOption {
73         type        = types.str;
74         description = "Password of account to use to query the LDAP server";
75       };
77       enableLdapRoles = mkOption {
78         type        = types.bool;
79         default     = false;
80         description = "Whether to assign user roles based on the user's LDAP group memberships";
81       };
83       groupClassAttr = mkOption {
84         type = types.str;
85         default = "groupOfNames";
86         description = "The objectclass attribute to search for groups when enableLdapRoles is true";
87       };
89       roleAttr = mkOption {
90         type        = types.str;
91         default     = "businessCategory";
92         description = "Which LDAP group attribute to search for authorized role ARNs";
93       };
95       awsAccount = mkOption {
96         type        = types.str;
97         description = "AWS account number";
98       };
100       awsDefaultRole = mkOption {
101         type        = types.str;
102         description = "AWS default role";
103       };
105       statsAddress = mkOption {
106         type        = types.str;
107         default     = "";
108         description = "Address of statsd server";
109       };
111       cacheTimeoutSeconds = mkOption {
112         type        = types.int;
113         default     = 3600;
114         description = "How often (in seconds) to refresh the LDAP cache";
115       };
116     };
117   };
119   config = mkIf cfg.enable {
120     systemd.services.hologram-server = {
121       description = "Provide EC2 instance credentials to machines outside of EC2";
122       after       = [ "network.target" ];
123       wantedBy    = [ "multi-user.target" ];
125       serviceConfig = {
126         ExecStart = "${pkgs.hologram}/bin/hologram-server --debug --conf ${cfgFile}";
127       };
128     };
129   };