説明
RDS の公開アクセスを有効にすると、インスタンスにパブリック IP アドレスが割り当てられる場合があります。インターネットからの接続には、サブネットの経路とセキュリティグループの許可も必要です。データベースの認証と権限は別途適用されます。内部用のデータベースに公開アドレスが必要かどうかを確認してください。
Crossplane AWS プロバイダー v0.17.0 では、publiclyAccessible を省略すると AWS へのリクエストでも値を指定しません。その場合の既定の動作は VPC と DB サブネットグループによって変わります。内部用のインスタンスには、既定値に任せず publiclyAccessible: false を明示してください。
想定される影響
- パブリック IP アドレスを持つデータベースへのインターネット経路があり、セキュリティグループが広い範囲からの接続を許可していると、意図しない接続元からもログインや脆弱性の悪用を試みられる可能性があります。実際にデータへアクセスできるかどうかは、認証や権限などの条件にも左右されます。
- 意図しない公開アドレスと広範囲へのネットワーク許可が組み合わさると、外部からデータベースに接続できる範囲が広がるおそれがあります。
対処方法
- 内部用のインスタンスには
publiclyAccessible: falseを設定してください。 DBSubnetGroupの実際のサブネットとルートテーブルを確認し、セキュリティグループを必要な接続元とデータベースのポートに限定してください。VPC にインターネットゲートウェイがあるだけで、個々のサブネットが公開されているとは判断できません。- 公開アクセスを無効にする前に、アプリケーションと管理者に必要なプライベート接続を用意し、変更後に接続をテストしてください。業務上公開アクセスが必要な場合は、承認された接続元とデータベースのポートにセキュリティグループを限定し、認証と通信の暗号化を適用してください。
例
以下は Crossplane AWS v0.17.0 のリソース形式を使った部分的な例です。エンジンやインスタンスクラスなどの必須項目を補い、サブネット ID と DB サブネットグループ名を実際の環境に合わせてください。経路とセキュリティグループは別途設定する必要があります。
変更前
yaml
apiVersion: database.aws.crossplane.io/v1beta1
kind: RDSInstance
metadata:
name: sample-cluster3
spec:
forProvider:
publiclyAccessible: true
dbSubnetGroupName: my-db-subnet-group
---
apiVersion: database.aws.crossplane.io/v1beta1
kind: DBSubnetGroup
metadata:
name: my-db-subnet-group
spec:
forProvider:
description: "My DB Subnet Group"
subnetIds:
- subnet-12345678
- subnet-87654321
変更後
yaml
apiVersion: database.aws.crossplane.io/v1beta1
kind: RDSInstance
metadata:
name: sample-cluster3
spec:
forProvider:
publiclyAccessible: false
dbSubnetGroupName: my-db-subnet-group
---
apiVersion: database.aws.crossplane.io/v1beta1
kind: DBSubnetGroup
metadata:
name: my-db-subnet-group
spec:
forProvider:
description: "My DB Subnet Group"
subnetIds:
- subnet-12345678
- subnet-87654321
説明:
- 変更前: 公開アクセスが有効です。実際にインターネットから接続できるかどうかは、ネットワーク設定にも左右されます。
- 変更後: パブリック IP アドレスを使わない設定です。必要なプライベート接続、認証、セキュリティグループを用意し、接続を検証してください。