feature(iac): add service-account module #3

Merged
florian.heuer merged 3 commits from feature/STACKITCIN-125-sa-module into main 2025-08-25 10:01:15 +00:00
5 changed files with 128 additions and 0 deletions
Showing only changes of commit d20df2a00e - Show all commits

26
service-account/README.md Normal file
View file

@ -0,0 +1,26 @@
# Terraform module to create STACKIT Service Account
## Example for main.tf
# Service Account Terraform Module
This module creates a STACKIT service account, optionally creates a key, and optionally attaches it to a server.
## Usage
```hcl
module "service_account" {
source = "git::https://commerce-platform.git.onstackit.cloud/commerce-platform-public//terraform-modules/service-account"
name = "my-service-account"
project_id = "your-project-id"
create_key = true
ttl_days = 90
rotate_when_changed = {
rotated_at = timestamp()
}
attach_to_server = true
server_id = "your-server-id"
}
```

View file

@ -0,0 +1,20 @@
output "service_account_email" {
description = "The email of the service account"
value = stackit_service_account.this.email
}
output "service_account_id" {
description = "Internal ID of the service account"
value = stackit_service_account.this.id
}
output "service_account_key_id" {
description = "ID of the created key"
value = try(stackit_service_account_key.this[0].key_id, null)
}
output "service_account_key_json" {
description = "Sensitive JSON key output"
value = try(stackit_service_account_key.this[0].json, null)
sensitive = true
}

View file

@ -0,0 +1,8 @@
terraform {
required_providers {
stackit = {
source = "stackitcloud/stackit"
version = "~> 0.59.0"
}
}
}

View file

@ -0,0 +1,22 @@
resource "stackit_service_account" "this" {
name = var.service_account_name
project_id = var.stackit_project_id
}
resource "stackit_service_account_key" "this" {
count = var.service_account_create_key ? 1 : 0
project_id = var.stackit_project_id
service_account_email = stackit_service_account.this.email
public_key = var.service_account_public_key
rotate_when_changed = var.service_account_rotate_when_changed
ttl_days = var.service_account_ttl_days
}
resource "stackit_service_account_attachment" "this" {
count = var.attach_to_server ? 1 : 0
project_id = var.stackit_project_id
server_id = var.server_id
service_account_email = stackit_service_account.this.email
}

View file

@ -0,0 +1,52 @@
variable "stackit_project_id" {
description = "STACKIT project ID"
type = string
}
# === Service Account variables ===
variable "service_account_name" {
description = "Name of the service account"
type = string
}
# === Service Account Key variables ===
variable "service_account_create_key" {
description = "Whether to create a service account key"
type = bool
default = false
}
variable "service_account_public_key" {
description = "Optional: Specifies the public_key (RSA2048 key-pair). If not provided, a certificate from STACKIT will be used to generate a private_key."
type = string
default = null
}
variable "service_account_rotate_when_changed" {
description = "Map to force key rotation when changed"
type = map(string)
default = {}
}
variable "service_account_ttl_days" {
description = "Key validity duration in days. Defaults to 90"
type = number
default = 90
}
# === Server Service Account Attach variables ===
variable "attach_to_server" {
description = "Whether to attach the service account to a server"
type = bool
default = false
}
variable "server_id" {
description = "Server ID for attachment"
type = string
default = ""
}