공개 접근을 활성화한 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
  ]
}

설명: 변경 후에는 공개 접근을 명시적으로 끕니다. 인스턴스를 교체한 뒤에도 필요한 프라이빗 경로로 소스와 대상에 연결할 수 있어야 합니다.

참조