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