amazon-web-services - 如何识别允许哪些 IP 范围访问 RDS 实例
问题描述
我们的一个 VPC 中有一个 RDS 实例。我们在这个 VPC 中有 3 个私有子网和 3 个公有子网,并且数据库实例附加到所有 3 个私有子网。我们还有 2 个独立的 VPC,其中一个通过站点到站点 vpn 连接到第一个,另一个通过对等连接。
如何识别允许访问 RDS 实例的 IP?
我必须使用 python boto3 获取这些信息。任何想法?
解决方案
获得准确的 IP 范围有点棘手,但本质上这是由分配给数据库实例的安全组决定的。
这是一个脚本,列出了数据库实例“test-db”的所有安全组的入站规则:
import boto3
def main():
db_instance_identifier = "test-db"
rds_client = boto3.client("rds")
db_instances = rds_client.describe_db_instances(
DBInstanceIdentifier=db_instance_identifier
)
# We expect only one result
db_instance = db_instances["DBInstances"][0]
# Get a list of the VPC Security Groups
db_security_group_ids = [
item["VpcSecurityGroupId"] for item in db_instance["VpcSecurityGroups"]
]
ec2_client = boto3.client("ec2")
security_groups = ec2_client.describe_security_groups(
GroupIds=db_security_group_ids
)
for security_group in security_groups["SecurityGroups"]:
for ingress_rule in security_group["IpPermissions"]:
print(ingress_rule)
if __name__ == "__main__":
main()
输出
{'FromPort': 22, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0', 'Description': 'SSH'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0', 'Description': 'SSH'}], 'PrefixListIds': [], 'ToPort': 22, 'UserIdGroupPairs': []}
{'IpProtocol': '-1', 'IpRanges': [], 'Ipv6Ranges': [], 'PrefixListIds': [], 'UserIdGroupPairs': [{'GroupId': 'sg-04dfdddc2792af7e2', 'UserId': '12312313123'}]}
{'FromPort': 80, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 80, 'UserIdGroupPairs': []}
{'FromPort': 5432, 'IpProtocol': 'tcp', 'IpRanges': [{'CidrIp': '0.0.0.0/0'}], 'Ipv6Ranges': [{'CidrIpv6': '::/0'}], 'PrefixListIds': [], 'ToPort': 5432, 'UserIdGroupPairs': []}
您可以对它们进行任何您喜欢的处理,而不是打印规则。当然,将安全组 ID 转换为 IP 范围是一个完全不同的问题,但鉴于您的问题,我假设您的安全组仅包含 IP 范围。
推荐阅读
- java - JMC 7中的调用树?
- linux - 树莓派零 W 自动登录
- angular - TypeError:对象原型可能只是一个对象或空:未定义的角度
- multidimensional-array - ndarray - 尝试使用 impl AddAssign
对于 ArrayBase 导致编译器错误 - typescript - 说服 TypeScript 对象不会缺少必需的键
- recovery - 丢失 ZFS 池并寻找恢复方法
- reactjs - 将 initialValues 传递给自定义钩子打字稿
- javascript - Javascript:“DD/MM/YY HH:SS”的正则表达式不成功
- json - 将地图值组合成一个json?
- javascript - 从 React 的数组中排除已经存在的项目