説明
RDSインスタンスに関連付けられたセキュリティグループで、送信元として0.0.0.0/0または::/0を許可すると、その受信ルールはそれぞれすべてのIPv4またはIPv6アドレスに適用されます。データベースへの接続が必要なクライアントに受信範囲を限定してください。
実際の外部接続は、許可するポート、データベースの待ち受けポート、パブリックIPとネットワーク経路によって異なります。広い受信許可がデータベースの認証や権限確認を不要にするわけではありませんが、ネットワークでも必要なクライアントだけにアクセスを制限する必要があります。
想定される影響
- 実際のデータベースポートを許可する受信ルールとパブリック接続経路がそろうと、全アドレス範囲のクライアントがデータベースへの接続を試行できます。
- 不要な外部接続を許可すると、総当たり攻撃や漏えいした認証情報を使う攻撃にさらされるおそれがあります。データの読み取りや変更が可能かどうかは、認証とデータベース権限によって決まります。
対処方法
- 実際のデータベースポートと必要なクライアントを確認し、受信ルールをそのポートと必要な送信元セキュリティグループ、または狭いCIDR範囲に限定してください。
/0より狭いという理由だけで、信頼できる範囲と判断しないでください。 PubliclyAccessible、サブネット、ルーティング、実際のセキュリティグループの関連付けを併せて確認してください。プライベート接続が必要な構成では、その経路を用意してから公開アクセス設定を調整してください。認証とデータベース権限も別途確認してください。- デプロイ済みのインスタンスに、意図したセキュリティグループが関連付けられていることを確認してください。変更後は、必要なクライアントが接続でき、それ以外の送信元からの接続が拒否されることを検証してください。
例
以下は許可する送信元範囲を比較する例で、データベースエンジンなど完全なデプロイに必要なプロパティを省略しています。ポート80は例示用の値です。実際のデータベースが使うポートを確認してください。
全IPv4アドレス範囲を使う例
yaml
Resources:
DBEC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Open database for access
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 0.0.0.0/0
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
PubliclyAccessible: true
VPCSecurityGroups:
- !GetAtt DBEC2SecurityGroup.GroupId
より狭いCIDRを使う例
yaml
Resources:
DBEC2SecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Open database for access
SecurityGroupIngress:
- IpProtocol: tcp
FromPort: 80
ToPort: 80
CidrIp: 1.2.3.4/24
DBInstance:
Type: AWS::RDS::DBInstance
Properties:
PubliclyAccessible: true
VPCSecurityGroups:
- !GetAtt DBEC2SecurityGroup.GroupId
説明:
- 最初の例:
CidrIp: 0.0.0.0/0は、すべてのIPv4アドレスからポート80への受信を許可します。実際にデータベースへ接続できるかは、データベースポートとネットワーク経路を併せて確認してください。 - 次の例:
1.2.3.4/24は単一ホストではなく、1.2.3.0/24のネットワークを表します。信頼できる範囲として推奨する値ではないため、実際に接続が必要なクライアントの範囲に置き換えてください。