Skip to content

Commit ce2d122

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

2 files changed

Lines changed: 121 additions & 0 deletions

File tree

modules/mpc-party/main.tf

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,12 +247,49 @@ 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+
source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc"
252+
version = "5.48.0"
253+
provider_url = data.aws_eks_cluster.cluster.identity[0].oidc[0].issuer
254+
create_role = true
255+
role_name = "mpc-${var.cluster_name}-${var.party_name}-connector"
256+
oidc_fully_qualified_subjects = ["system:serviceaccount:${var.k8s_namespace}:${var.k8s_service_account_name}-connector"]
257+
role_policy_arns = []
258+
depends_on = [kubernetes_namespace.mpc_party_namespace]
259+
}
260+
261+
resource "kubernetes_service_account" "mpc_kms_connector_service_account" {
262+
count = var.create_service_account ? 1 : 0
263+
264+
metadata {
265+
name = "${var.k8s_service_account_name}-connector"
266+
namespace = var.k8s_namespace
267+
268+
labels = merge({
269+
"app.kubernetes.io/name" = "mpc-connector"
270+
"app.kubernetes.io/component" = "service-account"
271+
"app.kubernetes.io/part-of" = "mpc-cluster"
272+
"app.kubernetes.io/managed-by" = "terraform"
273+
"mpc.io/party-name" = var.party_name
274+
}, var.service_account_labels)
275+
276+
annotations = merge({
277+
"terraform.io/module" = "mpc-party"
278+
"mpc.io/party-name" = var.party_name
279+
"eks.amazonaws.com/role-arn" = module.iam_assumable_role_kms_connector.iam_role_arn
280+
}, var.service_account_annotations)
281+
}
282+
depends_on = [kubernetes_namespace.mpc_party_namespace, module.iam_assumable_role_kms_connector]
283+
}
284+
285+
250286
# ***************************************
251287
# AWS KMS Key for MPC Party
252288
# ***************************************
253289
locals {
254290
create_mpc_party_key = var.kms_enabled_nitro_enclaves && !var.kms_use_cross_account_kms_key
255291
create_mpc_party_key_backup = var.kms_enabled_nitro_enclaves && var.kms_enable_backup_vault && !var.kms_use_cross_account_kms_key
292+
create_mpc_connector_txsender_key = var.kms_enable_kms_connector_txsender_key && !var.kms_use_cross_account_kms_key
256293
}
257294

258295
resource "aws_kms_key" "mpc_party" {
@@ -407,6 +444,71 @@ resource "aws_kms_alias" "mpc_party_backup" {
407444
target_key_id = aws_kms_key.mpc_party_backup[0].key_id
408445
}
409446

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

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_key" {
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_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)