公開アクセスが有効な DMS レプリケーションインスタンス

DMS レプリケーションインスタンスの公開アクセスは、不要な外部通信経路を作る可能性があります。プライベート接続を確保し、インスタンスの置き換えとタスクの継続を計画してください。

説明

publicly_accessible = true は、DMS レプリケーションインスタンスでパブリック IP アドレスを使用する設定です。実際の通信は、サブネットのルーティング、セキュリティグループ、接続先の許可ルールに左右されます。この設定がソースやターゲットのデータベースを直接公開したり、移行設定や認証情報へのアクセス権を与えたりすることはありません。

プライベート接続だけが必要なインスタンスでは、公開アクセスを明示的に無効にしてください。プロパティを削除するだけではプライベート構成を保証できないため、terraform plan とデプロイ済みの設定を確認する必要があります。

想定される影響

  • 不要なパブリック IP アドレスが広範なネットワークの許可ルールと組み合わさると、意図しない外部通信経路が生じる可能性があります。
  • 接続とインスタンスの置き換えを計画せずに公開アクセスを変更すると、ソースやターゲットへの接続とレプリケーションが中断するおそれがあります。

対処方法

  • publicly_accessible = false を明示し、VPC 内の接続、ピアリング、VPN、Direct Connect などでソースとターゲットまでの経路を確保してください。セキュリティグループと接続先の許可リストは、必要なアドレスとポートに限定してください。インターネット上の接続先が必要な場合は、適切な送信経路も設定してください。
  • 既存インスタンスの公開アクセスを変更するには、置き換えが必要です。terraform plan で置き換えと依存リソースの変更を確認し、識別子の重複、タスクの停止・移動・再開、復旧を計画してください。新しいインスタンスからの接続を検証する前に、古いリソースを削除しないでください。
  • プロバイダーのリファレンスとタスク移動の要件を確認してください。適用後に、両方のエンドポイントへの接続、レプリケーションの状態、データの整合性を検証してください。

例

以下は設定の一部です。参照するサブネットグループと IAM ポリシーのアタッチメントは別途定義し、セキュリティグループの ID と KMS キーの ARN を実際の環境の値に置き換えてください。プロバイダー、サブネット、KMS キーのリージョンを揃え、ワークロードに適したエンジンバージョンと容量を選んでください。

変更前

hcl
resource "aws_dms_replication_instance" "test" {
  allocated_storage            = 20
  apply_immediately            = true
  auto_minor_version_upgrade   = true
  kms_key_arn                  = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
  multi_az                     = false
  preferred_maintenance_window = "sun:10:30-sun:14:30"
  publicly_accessible          = true
  replication_instance_class   = "dms.t3.micro"
  replication_instance_id      = "test-dms-replication-instance-tf"
  replication_subnet_group_id  = aws_dms_replication_subnet_group.test-dms-replication-subnet-group-tf.id

  vpc_security_group_ids = [
    "sg-12345678",
  ]

  depends_on = [
    aws_iam_role_policy_attachment.dms-access-for-endpoint-AmazonDMSRedshiftS3Role,
    aws_iam_role_policy_attachment.dms-cloudwatch-logs-role-AmazonDMSCloudWatchLogsRole,
    aws_iam_role_policy_attachment.dms-vpc-role-AmazonDMSVPCManagementRole
  ]
}

変更後

hcl
resource "aws_dms_replication_instance" "test" {
  allocated_storage            = 20
  apply_immediately            = true
  auto_minor_version_upgrade   = true
  kms_key_arn                  = "arn:aws:kms:us-east-1:123456789012:key/12345678-1234-1234-1234-123456789012"
  multi_az                     = false
  preferred_maintenance_window = "sun:10:30-sun:14:30"
  publicly_accessible          = false
  replication_instance_class   = "dms.t3.micro"
  replication_instance_id      = "test-dms-replication-instance-tf"
  replication_subnet_group_id  = aws_dms_replication_subnet_group.test-dms-replication-subnet-group-tf.id

  vpc_security_group_ids = [
    "sg-12345678",
  ]

  depends_on = [
    aws_iam_role_policy_attachment.dms-access-for-endpoint-AmazonDMSRedshiftS3Role,
    aws_iam_role_policy_attachment.dms-cloudwatch-logs-role-AmazonDMSCloudWatchLogsRole,
    aws_iam_role_policy_attachment.dms-vpc-role-AmazonDMSVPCManagementRole
  ]
}

説明: 変更後は公開アクセスを明示的に無効にします。置き換え後も、必要なプライベート経路でソースとターゲットに接続できる必要があります。

参考資料