seahaven-door-unlock-api/terraform/iam.tf
Adam Moussa c43bee214c
feat(terraform): add hcp terraform for prod door-unlock-api (PLAT-76) (#81)
* feat(terraform): add hcp terraform for prod door-unlock-api

Move deploy off frozen CDK CD onto an HCP workspace that recreates the HTTP API, five Lambdas, disabled EventBridge rules, and alarms in seahaven-prod without a poller VPC.

* docs(readme): link the door unlock api ops page

* fix(terraform): invoke package build via bash

HCP launches the external data source with bash, so the inner build script should not depend on the git executable bit.
2026-08-27 22:03:12 +00:00

157 lines
4.5 KiB
HCL

data "aws_iam_policy_document" "lambda_assume" {
statement {
effect = "Allow"
actions = ["sts:AssumeRole"]
principals {
type = "Service"
identifiers = ["lambda.amazonaws.com"]
}
}
}
data "aws_iam_policy_document" "ssm_elements_and_auth" {
statement {
sid = "ReadElementsAndAuth"
effect = "Allow"
actions = ["ssm:GetParameter"]
resources = [
local.elements_api_key_arn,
local.auth_token_arn,
]
}
}
data "aws_iam_policy_document" "ssm_unlock" {
statement {
sid = "ReadUnlockParams"
effect = "Allow"
actions = ["ssm:GetParameter"]
resources = [
local.elements_api_key_arn,
local.auth_token_arn,
local.door_id_arn,
]
}
}
data "aws_iam_policy_document" "ssm_auth_only" {
statement {
sid = "ReadAuthToken"
effect = "Allow"
actions = ["ssm:GetParameter"]
resources = [local.auth_token_arn]
}
}
data "aws_iam_policy_document" "ssm_elements_only" {
statement {
sid = "ReadElementsApiKey"
effect = "Allow"
actions = ["ssm:GetParameter"]
resources = [local.elements_api_key_arn]
}
}
data "aws_iam_policy_document" "three_cx_secrets" {
statement {
sid = "ReadThreeCxSecrets"
effect = "Allow"
actions = ["secretsmanager:GetSecretValue"]
resources = [
data.aws_secretsmanager_secret.three_cx_domain.arn,
data.aws_secretsmanager_secret.three_cx_client_id.arn,
data.aws_secretsmanager_secret.three_cx_client_secret.arn,
]
}
}
resource "aws_iam_role" "unlock" {
name = "${local.project}-unlock"
path = "/tf-managed/"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
permissions_boundary = local.boundary_arn
}
resource "aws_iam_role_policy_attachment" "unlock_basic" {
role = aws_iam_role.unlock.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "unlock" {
name = "unlock"
role = aws_iam_role.unlock.id
policy = data.aws_iam_policy_document.ssm_unlock.json
}
resource "aws_iam_role" "lockdown" {
name = "${local.project}-lockdown"
path = "/tf-managed/"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
permissions_boundary = local.boundary_arn
}
resource "aws_iam_role_policy_attachment" "lockdown_basic" {
role = aws_iam_role.lockdown.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "lockdown" {
name = "lockdown"
role = aws_iam_role.lockdown.id
policy = data.aws_iam_policy_document.ssm_elements_and_auth.json
}
resource "aws_iam_role" "authorizer" {
name = "${local.project}-authorizer"
path = "/tf-managed/"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
permissions_boundary = local.boundary_arn
}
resource "aws_iam_role_policy_attachment" "authorizer_basic" {
role = aws_iam_role.authorizer.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "authorizer" {
name = "authorizer"
role = aws_iam_role.authorizer.id
policy = data.aws_iam_policy_document.ssm_auth_only.json
}
resource "aws_iam_role" "poller" {
name = "${local.project}-lockdown-poller"
path = "/tf-managed/"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
permissions_boundary = local.boundary_arn
}
resource "aws_iam_role_policy_attachment" "poller_basic" {
role = aws_iam_role.poller.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "poller" {
name = "lockdown-poller"
role = aws_iam_role.poller.id
policy = data.aws_iam_policy_document.ssm_elements_only.json
}
resource "aws_iam_role" "blf_sync" {
name = "${local.project}-blf-sync"
path = "/tf-managed/"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
permissions_boundary = local.boundary_arn
}
resource "aws_iam_role_policy_attachment" "blf_sync_basic" {
role = aws_iam_role.blf_sync.name
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
}
resource "aws_iam_role_policy" "blf_sync" {
name = "blf-sync"
role = aws_iam_role.blf_sync.id
policy = data.aws_iam_policy_document.three_cx_secrets.json
}