テラフォームを使用したマルチ領域キーの作成


組織がクラウドネイティブのアプローチでデータを暗号化するためにAWS KMS , 自己管理に比べてコスト削減と管理負担軽減のための有料有料モデルによる高性能鍵管理システムhardware security module (HSM) .
AWS KMS組織を選ぶことによって、暗号鍵管理のための3つのオプションが得られます
  • 顧客またはAWS管理キー付きのAWS
  • AWS KMSについて
  • KMSカスタムキーストアキー管理CloudHSM
  • Terraform AWS provider バージョン3.64.0 新資源紹介aws_kms_replica_key これで我々は創造できるCustomer Managed Key (CMK) .
    このブログ記事では、リソースを使用してマルチ領域CMKを作成する手順をウォークスルーしますaws_kms_replica_key 新しく導入されたのはTerraform AWS provider バージョン3.64.0 .
    マルチリージョンキーは、データセキュリティのシナリオに便利です-災害復旧、グローバルデータ管理、分散署名アプリケーション、アクティブなアプリケーションをアクティブに複数の領域を展開します.
    リソース型を必要とするのでaws_kms_replica_key Torraform AWSプロバイダーから、以下のブロックは我々のプロジェクトにこれを加えるのを助けます.これを達成するために、少なくとも3.64.0バージョンがあることを確認してください.
    terraform {
      required_providers {
        aws = {
          source  = "hashicorp/aws"
          version = "~> 3.64.0"
        }
      }
    }
    
    マルチ領域キーはグローバルではありません.マルチ領域プライマリキーを作成し、AWSパーティション内で選択した領域に複製します.その後、各地域の独立した複数のキーを管理します.
    我々のケースでは、我々はシドニーとジャカルタでそれぞれのレプリカがシンガポール地域で作成された主要キーを持ちます.
    # Singapore
    provider "aws" {
      region = "ap-southeast-1"
    }
    
    # Sydney
    provider "aws" {
      alias  = "secondary"
      region = "ap-southeast-2"
    }
    
    # Jakarta
    # 3.70.0 Terraform AWS Provider release will use AWS SDK v1.42.23 
    # which adds ap-southeast-3 to the list of regions for the standard AWS partition.
    # https://github.com/hashicorp/terraform-provider-aws/issues/22252
    provider "aws" {
      alias  = "tertiary"
      region = "ap-southeast-3"
      skip_region_validation = true
    }
    

    NOTE: If you are trying to create a KMS replica in JAKARTA region you will encounter an error as below
    Error: Invalid AWS Region: ap-southeast-3
    with provider["registry.terraform.io/hashicorp/aws"].tertiary,


    これはap-southeast-3 が追加されました.42.23とterraform AWSプロバイダーv 3で使用されます.70.0 .このための一時的な解決策はskip_region_validation = true プロバイダーブロック内のステートメント.
    他のAWSリソースポリシーとは異なり、AWS KMSキーポリシーはアカウントまたはユーザーの許可を自動的に与えません.アカウント管理者に許可を与えるには、このような権限を提供する明示的なステートメントを含める必要があります.
    data "aws_iam_policy_document" "kms" {
      # Allow root users full management access to key
      statement {
        effect = "Allow"
        actions = [
          "kms:*"
        ]
        resources = ["*"]
        principals {
          type        = "AWS"
          identifiers = ["arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"]
        }
      }
    
      # Allow other accounts limited access to key
      statement {
        effect = "Allow"
        actions = [
          "kms:CreateGrant",
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:ReEncrypt*",
          "kms:GenerateDataKey*",
          "kms:DescribeKey",
        ]
    
        resources = ["*"]
    
        # AWS account IDs that need access to this key
        principals {
          type        = "AWS"
          identifiers = var.account_ids
        }
      }
    }
    

    多領域主キーの作成


    resource "aws_kms_key" "primary" {
      description         = "CMK for AWS CB Blog"
      enable_key_rotation = true
      policy              = data.aws_iam_policy_document.kms.json
      multi_region        = true
    }
    
    リソースaws_kms_key は、1つの領域または複数領域プライマリKMSキーを作成するために使用されます.
    マルチ領域キーであるid & key_id MRK -接頭語として.
    terraform show -json terraform.tfstate | jq '.values.root_module.resources[0].values.id'
    "mrk-01641fdcadec421f9ed2665c7d78ef9c"
    
    terraform show -json terraform.tfstate | jq '.values.root_module.resources[0].values.key_id'
    "mrk-01641fdcadec421f9ed2665c7d78ef9c"
    
    別名を使用してKMSキーを参照することもできます.リソースaws_kms_alias を使用してエイリアスを作成します.
    resource "aws_kms_alias" "alias" {
      target_key_id = aws_kms_key.primary.id
      name          = format("alias/%s", lower("AWS_CB_CMK"))
    }
    

    NOTE: "name" must begin with 'alias/' and be comprised of only [a-zA-Z0-9:/_-]



    多領域レプリカキーの作成


    resource "aws_kms_replica_key" "secondary" {
      provider = aws.secondary
    
      description             = "Multi-Region replica key"
      deletion_window_in_days = 7
      primary_key_arn         = aws_kms_key.primary.arn
    }
    
    resource "aws_kms_replica_key" "tertiary" {
      provider = aws.tertiary
    
      description             = "Multi-Region replica key"
      deletion_window_in_days = 7
      primary_key_arn         = aws_kms_key.primary.arn
    }
    
    リソースaws_kms_replica_key はマルチ領域レプリカキーを作成するために使用されます.ここでは、シドニーとジャカルタ地域のキーを作成するために、明示的にプロバイダー別名(AWS . Second & AWS . Tertiary)を渡しています.

    あなたはKMSキーを削除するための7(分)- 30(最大、デフォルト)日の待機期間を設定する必要があります.
    このように、我々はシドニーとジャカルタでそのレプリカでシンガポール地域で主要なキーを持っています.

    While you implement this and in continuation of this blog we will see

    • Configure an SQS
    • Integrating Azure Sentinel to consume AWS CloudTrail data.

    上記のセットアップのソースコードhere