1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

VPC Encryptionの強制化がリリースされていたので試してみた

Last updated at Posted at 2025-12-13

ご挨拶

師走の季節に入って2週間経つわけですが、1年とは早いですね。
と思って居る白"雪姫"です。
今年はルーター系とフロントエンド系の脆弱性が多かったなぁと思いつつ、
re:Inventでのアップデートにインクルードなのかな?とか思いながら、興味深いアップデートがありましたので試してみることにしました。

今回やる事

VPC Encryptionの強制化コントロールとなります。

何それ?

通信には「平文通信」と「暗号化通信」の2種類があります。
平文通信というのは、周りから丸見えの通信。
暗号化通信というのは、周りから見えないように、送信元と送信先の間で合言葉を決めて中身をわかりにくくした通信
です。

例えるなら、
水族館の水槽トンネルが平文通信
高速道路の山間部を抜けるのが暗号化通信

という感じです。

実際に試しました

  • VPCを新しく作ろうとした際に既にこんなインフォメーションが流れてくきます。
    image.png
    VPC作成で作成をしましょう

  • 作成ウィザードの中でこんなものが追加されてます。今回追加されたものです。

    • VPCのみの作成の場合
      image.png
    • VPCなど(サブネットなども一緒に作る際)の場合
      image.png

どちらもしっかり出てきますね。
今回はVPCのみの「強制モード」で作成します。
そのためここから先は、「VPCのみ」での画像となります。

image.png

  • 強制モードのラジオボタンを変更する
    相当厳しいのですかね。除外するサービスも設定できるようです。
    image.png
    今回は一切選択せず、ぽちっと作っていきます。

  • 作成したVPCの中で「暗号化強制モード」がきちんと強制となっています。
    image.png

  • CloudFormationでのサンプル

AWSTemplateFormatVersion: '2010-09-09'
Description: 'VPC with Encryption Control Enforcement Mode'

Resources:
  # KMS Key for VPC encryption
  VPCEncryptionKey:
    Type: AWS::KMS::Key
    Properties:
      Description: 'KMS Key for VPC encryption control'
      KeyPolicy:
        Statement:
          - Effect: Allow
            Principal:
              AWS: !Sub 'arn:aws:iam::${AWS::AccountId}:root'
            Action: 'kms:*'
            Resource: '*'

  VPCEncryptionKeyAlias:
    Type: AWS::KMS::Alias
    Properties:
      AliasName: alias/vpc-encryption-key
      TargetKeyId: !Ref VPCEncryptionKey

  # VPC with encryption control
  SecureVPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock: 10.0.0.0/16
      EnableDnsHostnames: true
      EnableDnsSupport: true
      Tags:
        - Key: Name
          Value: SecureVPC
        - Key: EncryptionEnforced
          Value: 'true'

  # VPC Encryption Control Policy
  VPCEncryptionPolicy:
    Type: AWS::EC2::VPCEndpointPolicy
    Properties:
      PolicyDocument:
        Statement:
          - Effect: Deny
            Principal: '*'
            Action: '*'
            Resource: '*'
            Condition:
              Bool:
                'aws:SecureTransport': 'false'
  • terraformでのサンプル
terraform {
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 5.0"
    }
  }
}

# KMS Key for VPC encryption
resource "aws_kms_key" "vpc_encryption_key" {
  description = "KMS Key for VPC encryption control"

  policy = jsonencode({
    Statement = [
      {
        Effect = "Allow"
        Principal = {
          AWS = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:root"
        }
        Action   = "kms:*"
        Resource = "*"
      }
    ]
  })

  tags = {
    Name = "VPCEncryptionKey"
  }
}

resource "aws_kms_alias" "vpc_encryption_key_alias" {
  name          = "alias/vpc-encryption-key"
  target_key_id = aws_kms_key.vpc_encryption_key.key_id
}

# VPC with encryption control enforcement
resource "aws_vpc" "secure_vpc" {
  cidr_block           = "10.0.0.0/16"
  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = {
    Name              = "SecureVPC"
    EncryptionEnforced = "true"
  }
}

# Data source for current AWS account
data "aws_caller_identity" "current" {}

# VPC Encryption Control (using VPC Endpoint Policy as example)
resource "aws_vpc_endpoint_policy" "encryption_enforcement" {
  vpc_endpoint_id = aws_vpc_endpoint.s3.id

  policy = jsonencode({
    Statement = [
      {
        Effect    = "Deny"
        Principal = "*"
        Action    = "*"
        Resource  = "*"
        Condition = {
          Bool = {
            "aws:SecureTransport" = "false"
          }
        }
      }
    ]
  })
}

resource "aws_vpc_endpoint" "s3" {
  vpc_id       = aws_vpc.secure_vpc.id
  service_name = "com.amazonaws.${data.aws_region.current.name}.s3"
}

data "aws_region" "current" {}

設定はこれだけです。

強制できることで何がいいの?

色々とメリットはありますが、一番わかりやすいのは「暗号化通信以外許可できないため、設定も出来ない」という点になります。
手動でポチポチと作成していたのは、何が出来ない?とか確認したかったからなのですが

  • NATGateway作成中に以下のようなエラーが出て作れなくなっています。
    ここで先ほどの除外設定が生きてくるわけですね。
    image.png

つまり、必要な通信以外は全通信を暗号化しなければならないという文言がある金融系の構築規約や決済系の構築規定と言ったものに素早く対応ができるようになるということになります。

AWS-WellArchtectedFrameworkのSecurityの柱でも定義されていることの1つになります。

後からポリシーは変更出来るのか

左ペイン内にある「お使いのVPC」にて右ペインのVPCのタブの横に「VPC暗号化コントロール」が追加されています。
image.png

こちらから先ほど除外できなかった設定なども確認することが可能です。

何に役に立つのか

金融や決済と書いてしまいましたが、考えつくものとして以下のクラウドリフトに役に立つのでは?と思ってます。

  • 金融機関系の感情システムのクラウドリフト
    • もちろん、内部のデータベースなどの関係があると思うのですぐには無理とは考えます。
  • 公共システムのクラウド化
    • 昨今、マイナンバーカードなどでデジタル化が進む公共システムの安全な通信の確立
  • 学校のネットワーク監視システム
    • 煩雑化する物理ネットワークと連携を取り(様は大きいProxy化するのですが)により、怪しい通信などの監視も容易に出来るのかな?と思ったりしています。

では。

おまけと追記

料金について
(AWS公式)[https://aws.amazon.com/jp/vpc/pricing/]には新しいタブが増えてます。

image.png

本来は2026年3月末にリリース予定だったようで、そこまでは無料と言うことになっています。
以下文言抜粋
VPC 暗号化コントロールの料金は 2026 年 3 月 1 日から適用が開始されます。それまでは、お客様は VPC 暗号化コントロールを無料でご利用いただけます。2026 年 3 月 1 日以降は、暗号化コントロールを有効にした、空でない VPC ごとに、1 時間あたりの固定料金が発生します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?