在 AWS CDK 中组织安全组规则的最佳方式

2024-01-08

对于我的示例,我有一个 EKS 集群、RDS 数据库和一个 VPN 客户端端点,每个端点都有自己的安全组,我希望在这些安全组之间显式定义出口/入口规则。

我在RDS堆栈中定义数据库安全组,导入EKS/VPNaws_ec2.SecurityGroups,然后定义入口规则:

database_security_group.add_ingress_rule(
    aws_ec2.Peer.security_group_id(eks_security_group.security_group_id),
    aws_ec2.Port.tcp(5432)
)

问题在于,如果我对需要替换的 EKS 堆栈进行更改,它会尝试删除数据库堆栈。我被迫注释掉入口规则,部署数据库堆栈,部署 EKS 堆栈,取消注释入口规则,然后再次部署数据库堆栈。这似乎是一个不必要的序列(更不用说对于这些类型的资源来说它需要永远)。这适用于拥有自己的安全组的任何堆栈。

这里的最佳实践是什么?如何组织安全组规则以尽量减少一个堆栈对另一个堆栈的影响?


在CDK中处理安全组的方法是根本不处理它们。

CDK 有ec2.Connections类所有IConnectable构造暴露在connections支柱。允许构造之间连接的方式是使用该类。底层的安全组只是一个实现细节。

来自docs https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.SecurityGroup.html:

如果您在构造时未指定安全组,则所有需要安全组的构造都会为您创建一个。构建后,您可以通过(例如)instance.connections 对象有选择地允许与构造之间的连接。将其视为“允许连接到您的实例”,而不是“向安全组添加入口规则”。有关示例,请参阅库文档中的允许连接部分。

可以通过 addIngressRule 和 addEgressRule 直接操作安全组,但建议通过 .connections 对象进行更改。如果您以这种方式将两个构造与安全组对等,则将在两者中创建适当的规则。

执行此操作的方法是将数据库构造(整个事物)作为 prop 传递给 EKS 堆栈。

然后你可以这样设置:

eks_cluster.connections.allow_to_default_port(database)

就是这样。

请记住,您必须在正确的堆栈中执行此操作以避免循环引用。来自docs https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2-readme.html#cross-stack-connections:

如果您尝试添加从一个堆栈中的对等点到不同堆栈中的对等点的连接,有时需要确保在特定堆栈中建立连接以避免循环引用。如果堆栈之间没有其他依赖关系,那么在哪个堆栈中进行连接并不重要,但如果存在现有依赖关系(即 stack1 已经依赖于 stack2),那么在依赖堆栈中建立连接就很重要(即 stack1 已经依赖于 stack2)。堆栈1)。

每当您进行连接函数调用时,入口和出口安全组规则都会添加到调用对象所在的堆栈中。因此,如果您正在执行类似peer1.connections.allowFrom(peer2)的操作,则安全组规则(入口和出口)将在peer1 的堆栈中创建。

参考:https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2-readme.html#allowing-connections https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2-readme.html#allowing-connections

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS CDK 中组织安全组规则的最佳方式 的相关文章

随机推荐

  • PHP 的怪癖和陷阱 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • + 运算符与 parseFloat

    实施例1 http knockoutjs com documentation extenders html淘汰扩展器页面的 描述了一种对用户输入进行四舍五入并确保它只是数字的方法 它工作得很好 但是查看源代码 他们做了一件我不明白的奇怪的事
  • PageRequest 构造函数已被弃用

    我正在使用 Spring Data Commons v2 快照 并且我看到PageRequest已被弃用 这似乎发生在M1 http docs spring io spring data commons docs 2 0 0 M1 api
  • 通过 Connector/NET 使用 MySQL 的 C#

    我正在 C 4 0 Framework 中开发 CMS 应用程序 它连接到远程服务器上的 MySQL 数据库 5 0 95 由 MySQL 连接器 6 5 4 提供 我在执行查询时遇到问题 例如 我的连接字符串 Server Options
  • 在jar文件中的类中调用静态方法[重复]

    这个问题在这里已经有答案了 我想在 jar 文件中的类中执行特定方法 该文件没有 main 方法 使用我尝试过的 java 命令java cp classes jar com example test Application但我收到这个错误
  • QTreeWidget editItem 失败并显示“编辑:编辑失败”

    我有一个QTreeWidgetItem添加到QTreeWidget QTreeWidgetItem item new QTreeWidgetItem ui gt trwPairs item gt setFlags item gt flags
  • 使用 Matplotlib 模拟 Origin 中的瀑布图

    我正在尝试使用 Python 和 Matplotlib 创建 Origin 制作的瀑布图 见下图 or 一般方案对我来说很有意义 你从一个 2D 矩阵开始 就像你想制作一个曲面图一样 然后你可以遵循中显示的任何食谱StackOverflow
  • 为什么 unsigned int 还是有符号的? [复制]

    这个问题在这里已经有答案了 我创建了一个 unsigned int 和 unsigned char 然后我分配 10 值 并且 char 保持无符号并给我一个值 246 但 unsigned int 取 10 值 include
  • 从结构体向量中,获取一个收集每个结构体的字段之一的向量

    假设我有以下结构 struct Point double X Y Z 和以下向量 std vector
  • 如何测试某个值是否在某个范围内?

    我希望能够创建一个Range http doc rust lang org std ops struct Range html然后测试变量是否包含在该范围内 看起来像这样的东西 fn main let a 3 5 assert a cont
  • Grails 3.0.9:Spock 集成测试的 @Rollback 注释不起作用

    我目前正在为我们的项目进行一些集成 或功能性 我不是真正的 QA 而是后端开发人员 所以我可能会草率地使用术语 REST 测试 我们正在使用 Grails 3 0 9 Spock Framework 1 0 Groovy 2 4 和 Pos
  • 带有模式android的EditText输入

    我有一个 EditText 我必须接受字母数字用户输入的特定于模式和连字符的输入 会自动插入 XXX XXX XXXX 如何做到这一点 安卓有什么模式工具吗 你可以通过以下方式实现图案文本观察者 https github com zsave
  • 读取csv文件并将df写入excel并使用文本换行

    我正在尝试获得以下输出 但除标题外 所有行和列均采用文本换行 import pandas as pd import pandas io formats style import os from pandas import ExcelWrit
  • 如何在 2D 和 3D 投影之间切换

    我有一个 matplotlib 图 我希望能够在 2D 和 3D 投影之间切换 我可以从 2D 转到 3D 但我似乎不知道如何转到另一条路 例子 import numpy as np from mpl toolkits mplot3d im
  • Eclipse - 更改自动完成建议的顺序

    我看到以前有人问过这个问题 但我似乎找不到我想要的 目前 在 窗口 gt 首选项 gt Java gt 编辑器 gt 内容辅助 中 我的排序建议设置为 按相关性 然而 他们似乎仍然按字母顺序排序 例如 每当我有一个HashMap我开始打字m
  • 如何将数组元素扩展为函数的单独参数

    我有一组具有动态值的颜色 这取决于数据库 现在 函数中需要这些值 该函数仅采用像此函数那样的值 para1 para2 para3 para4 其中 param1 到 param4 是数组中的颜色值 问题是我如何以上述格式将这些值解析为该函
  • 无法使用 BigQuery Python API 设置目标表

    我最近在使用 Python API 时收到以下 BigQuery 错误 google api core exceptions BadRequest 400 无法为脚本设置co nfiguration query destinationTab
  • Text[] 数组列的表索引

    我有一个 PostgreSQL 数据库表text 数组 在其上定义的列 我使用这些列以这种方式搜索数据库中的特定记录 select obj from business where street ANY address line 1 and
  • ExtJs。设置行编辑单元格值

    我有带有 RowEditing 插件的网格 编辑器有 2 列 一列带有组合框 另一列带有禁用的文本字段 我需要在更改组合框值后更改文本字段值 我有组合框监听器 listeners select function combo records
  • 在 AWS CDK 中组织安全组规则的最佳方式

    对于我的示例 我有一个 EKS 集群 RDS 数据库和一个 VPN 客户端端点 每个端点都有自己的安全组 我希望在这些安全组之间显式定义出口 入口规则 我在RDS堆栈中定义数据库安全组 导入EKS VPNaws ec2 SecurityGr