説明
Alibaba Cloud プロバイダー 1.293.0 の alicloud_db_instance は、最上位の address 属性をサポートしていません。この位置に 0.0.0.0/0 やプライベートアドレスを指定しても、有効なアクセス制御にはなりません。address は、PostgreSQL 用の pg_hba_conf ブロック内で使用する属性です。
RDS への接続は、サポートされている IP 許可リストとネットワーク設定で制御してください。pg_hba_conf.address の 0.0.0.0/0 は、そのルールで指定したユーザーとデータベースについて、すべての IPv4 接続元を対象にします。実際の接続には、ネットワーク経路、インスタンスの IP 許可リスト、認証設定も関係します。
想定される影響
- 未対応の属性が Terraform の検証エラーを起こし、デプロイや更新を妨げる場合があります。意図したアクセス制限が適用されないおそれがあります。
- 実際の接続制御で接続元を広く許可しすぎると、不要な接続試行にさらされる可能性があります。データへのアクセスには、認証とデータベースの権限も必要です。
対処方法
- 使用するプロバイダーのスキーマを確認し、最上位の
addressを削除してterraform validateで検証してください。値だけをプライベートアドレスに変更しないでください。 security_ipsには、必要なクライアントの実際の接続元 IP アドレスか、必要最小限のネットワーク範囲を指定してください。PostgreSQL のpg_hba_confを使う場合は、アドレスと併せてユーザー、データベース、認証方式を確認してください。- パブリックエンドポイントが必要かを検討し、可能であれば内部接続を使ってください。変更前に正当なクライアントの経路を確保し、変更後に許可する接続と拒否すべき接続の両方を検証してください。
例
以下は属性の位置を比較する部分的な例です。変数と仮想スイッチは別途定義し、エンジンバージョン、インスタンスクラス、ストレージ容量は、利用するリージョンでサポートされる組み合わせを選んでください。例の IP アドレスは、アクセスが必要なクライアントのアドレスに置き換えてください。
未対応の属性
resource "alicloud_db_instance" "example" {
engine = "MySQL"
engine_version = var.engine_version
instance_type = var.instance_type
instance_storage = var.instance_storage
instance_charge_type = "Postpaid"
instance_name = var.name
vswitch_id = alicloud_vswitch.example.id
monitoring_period = "60"
address = "0.0.0.0/0"
}
最上位の address はサポートされないため、この構成は無効です。実際に適用された公開アクセス設定を示すものではありません。
サポートされる IP 許可リスト
resource "alicloud_db_instance" "example" {
engine = "MySQL"
engine_version = var.engine_version
instance_type = var.instance_type
instance_storage = var.instance_storage
instance_charge_type = "Postpaid"
instance_name = var.name
vswitch_id = alicloud_vswitch.example.id
monitoring_period = "60"
security_ips = ["10.23.12.24/32"]
}
サポートされている security_ips で、1 つのクライアントアドレスを指定します。この設定はプライベートな接続経路を作るものでも、データベース認証に代わるものでもありません。実際に適用される IP 許可リスト全体と、クライアントの接続経路も確認してください。