@@ -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# ***************************************
253291locals {
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
258297resource "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# ***************************************
0 commit comments