mirror of
https://github.com/Sea-Haven-Industries/seahaven-door-unlock-api.git
synced 2026-09-30 08:13:13 +00:00
* 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.
157 lines
4.5 KiB
HCL
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
|
|
}
|