Skip to content

Commit 76fe63e

Browse files
committed
feat(mpc-party): add kms-connector awskms key and service account
1 parent 4dd98e9 commit 76fe63e

2 files changed

Lines changed: 124 additions & 0 deletions

File tree

modules/mpc-party/main.tf

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,51 @@ resource "kubernetes_service_account" "mpc_party_service_account" {
247247
depends_on = [kubernetes_namespace.mpc_party_namespace, module.iam_assumable_role_mpc_party]
248248
}
249249

250+
module "iam_assumable_role_kms_connector" {
251+
count = local.create_mpc_connector_txsender_key ? 1 : 0
252+
253+
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc"
254+
version = "5.48.0"
255+
provider_url = data.aws_eks_cluster.cluster.identity[0].oidc[0].issuer
256+
create_role = true
257+
role_name = "mpc-${var.cluster_name}-${var.party_name}-connector"
258+
oidc_fully_qualified_subjects = ["system:serviceaccount:${var.k8s_namespace}:${var.k8s_service_account_name}-connector"]
259+
role_policy_arns = []
260+
depends_on = [kubernetes_namespace.mpc_party_namespace]
261+
}
262+
263+
resource "kubernetes_service_account" "mpc_kms_connector_service_account" {
264+
count = var.create_service_account ? 1 : 0
265+
266+
metadata {
267+
name = "${var.k8s_service_account_name}-connector"
268+
namespace = var.k8s_namespace
269+
270+
labels = merge({
271+
"app.kubernetes.io/name" = "mpc-connector"
272+
"app.kubernetes.io/component" = "service-account"
273+
"app.kubernetes.io/part-of" = "mpc-cluster"
274+
"app.kubernetes.io/managed-by" = "terraform"
275+
"mpc.io/party-name" = var.party_name
276+
}, var.service_account_labels)
277+
278+
annotations = merge({
279+
"terraform.io/module" = "mpc-party"
280+
"mpc.io/party-name" = var.party_name
281+
"eks.amazonaws.com/role-arn" = module.iam_assumable_role_kms_connector.iam_role_arn
282+
}, var.service_account_annotations)
283+
}
284+
depends_on = [kubernetes_namespace.mpc_party_namespace, module.iam_assumable_role_kms_connector]
285+
}
286+
287+
250288
# ***************************************
251289
# AWS KMS Key for MPC Party
252290
# ***************************************
253291
locals {
254292
create_mpc_party_key = var.kms_enabled_nitro_enclaves && !var.kms_use_cross_account_kms_key
255293
create_mpc_party_key_backup = var.kms_enabled_nitro_enclaves && var.kms_enable_backup_vault && !var.kms_use_cross_account_kms_key
294+
create_mpc_connector_txsender_key = var.kms_enable_kms_connector_txsender && !var.kms_use_cross_account_kms_key
256295
}
257296

258297
resource "aws_kms_key" "mpc_party" {
@@ -407,6 +446,72 @@ resource "aws_kms_alias" "mpc_party_backup" {
407446
target_key_id = aws_kms_key.mpc_party_backup[0].key_id
408447
}
409448

449+
# ***************************************
450+
# KMS-Connector Ethereum TxSender Key
451+
# ***************************************
452+
resource "aws_kms_key" "mpc_connector_tx_sender" {
453+
count = local.create_mpc_connector_txsender_key ? 1 : 0
454+
455+
description = "KMS Connector tx sender key for MPC Party"
456+
key_usage = var.kms_connector_txsender_key_usage
457+
customer_master_key_spec = var.kms_connector_txsender_master_key_spec
458+
enable_key_rotation = false
459+
deletion_window_in_days = var.kms_deletion_window_in_days
460+
tags = var.tags
461+
462+
policy = jsonencode({
463+
Version = "2012-10-17"
464+
Statement = [
465+
{
466+
Effect = "Allow",
467+
Principal = {
468+
AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/${module.iam_assumable_role_kms_connector.iam_role_name}"
469+
},
470+
Action = [
471+
"kms:DescribeKey",
472+
"kms:GetPublicKey",
473+
"kms:Sign",
474+
"kms:Verify"
475+
],
476+
Resource = "*",
477+
},
478+
{
479+
Effect = "Allow",
480+
Principal = {
481+
AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"
482+
},
483+
Action = [
484+
"kms:Create*",
485+
"kms:Describe*",
486+
"kms:Enable*",
487+
"kms:List*",
488+
"kms:Put*",
489+
"kms:Update*",
490+
"kms:Revoke*",
491+
"kms:Disable*",
492+
"kms:Get*",
493+
"kms:Delete*",
494+
"kms:TagResource",
495+
"kms:UntagResource",
496+
"kms:ScheduleKeyDeletion",
497+
"kms:CancelKeyDeletion"
498+
],
499+
Resource = "*"
500+
}
501+
]
502+
})
503+
}
504+
505+
# ***************************************
506+
# KMS Key Alias for KMS-Connector Ethereum TxSender Key
507+
# ***************************************
508+
resource "aws_kms_alias" "mpc_connector_tx_sender" {
509+
count = local.create_mpc_connector_txsender_key ? 1 : 0
510+
511+
name = "alias/mpc-${var.party_name}-connector-txsender"
512+
target_key_id = aws_kms_key.mpc_connector_tx_sender[0].key_id
513+
}
514+
410515
# ***************************************
411516
# ConfigMap for MPC Party
412517
# ***************************************

modules/mpc-party/variables.tf

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,25 @@ variable "kms_deletion_window_in_days" {
363363
default = 30
364364
}
365365

366+
variable "kms_enable_kms_connector_txsender" {
367+
type = bool
368+
description = "Whether to enable the KMS key for the kms-connector txsender"
369+
default = false
370+
}
371+
372+
373+
variable "kms_connector_txsender_key_usage" {
374+
type = string
375+
description = "Key usage for KMS-Connector txsender"
376+
default = "SIGN_VERIFY"
377+
}
378+
379+
variable "kms_connector_txsender_master_key_spec" {
380+
description = "Specification for the KMS-Connector txsender (e.g., ECC_SECG_P256K1 for Ethereum key signing)"
381+
type = string
382+
default = "ECC_SECG_P256K1"
383+
}
384+
366385
variable "kms_enable_backup_vault" {
367386
type = bool
368387
description = "Whether to enable the backup vault for the KMS key"

0 commit comments

Comments
 (0)