Python 为什么赢了';当出站流量权限被锁定时,Boto命令在UserData中运行?

Python 为什么赢了';当出站流量权限被锁定时,Boto命令在UserData中运行?,python,amazon-web-services,boto,Python,Amazon Web Services,Boto,我有一个与自动缩放组关联的AWS启动配置中的UserData脚本(python)。当新的(ubuntu)实例启动时,这个脚本将在它们上运行,以执行任何需要的设置 到目前为止,我对安全组的配置比较松散。这些实例允许向internet上任何位置发送出站流量。UserData脚本工作正常。但我只是关闭了出境规则以增加安全性。由于UserData脚本根本不会执行,或者有时在执行时不会执行,所以它失败了。我可以通过检查/var/log/cloud init output.log文件看到这一点。有人见过这种

我有一个与自动缩放组关联的AWS启动配置中的UserData脚本(python)。当新的(ubuntu)实例启动时,这个脚本将在它们上运行,以执行任何需要的设置

到目前为止,我对安全组的配置比较松散。这些实例允许向internet上任何位置发送出站流量。UserData脚本工作正常。但我只是关闭了出境规则以增加安全性。由于UserData脚本根本不会执行,或者有时在执行时不会执行,所以它失败了。我可以通过检查
/var/log/cloud init output.log
文件看到这一点。有人见过这种行为吗?有什么建议吗

当脚本失败时,我可以看出它在执行网络发现的某些Boto调用上失败,例如
Boto.vpc.VPCConnection().get\u all\u vpcs()
。如果出站流量规则阻止它查询此信息,则此操作将失败,这似乎是合理的。但是,我应该在安全组规则中添加哪些CIDR和端口来允许Boto完成它的任务呢

下面是我的安全组的出口规则在不起作用时的样子。IP地址是敏感的,所以我把它们屏蔽了

下面是我的安全组在工作时的出口规则。正如你所看到的,我允许它向全世界开放。我觉得这很不安全。我想把它锁起来

失败时,您可以看到
/var/log/cloud init output.log
文件


您可以看到相关的
/var/log/cloud init.log
文件。

默认情况下,Amazon EC2中的安全组配置为:

  • 没有入站访问
  • 完全出站访问
入站访问需要最大程度的保护,因为这是一个实例可能受到危害的向量。只打开您需要的端口,最好是IP地址的最小范围。例如,端口80可以向整个Internet开放,但将SSH/RDP的22/3389锁定为您将使用的IP地址

出站访问打开通常是安全的,因为它只能处理从实例本身启动的流量。如果您知道该实例将仅用于有限的目的,则可以减少协议和IP地址范围


如果你不喜欢保持出站规则完全开放,那么你必须发现让你的应用程序正常运行所需的协议和IP地址

默认情况下,Amazon EC2中的安全组配置为:

  • 没有入站访问
  • 完全出站访问
入站访问需要最大程度的保护,因为这是一个实例可能受到危害的向量。只打开您需要的端口,最好是IP地址的最小范围。例如,端口80可以向整个Internet开放,但将SSH/RDP的22/3389锁定为您将使用的IP地址

出站访问打开通常是安全的,因为它只能处理从实例本身启动的流量。如果您知道该实例将仅用于有限的目的,则可以减少协议和IP地址范围


如果你不喜欢保持出站规则完全开放,那么你必须发现让你的应用程序正常运行所需的协议和IP地址

你能分享你在安全组上使用的出站规则吗?你能发布你的用户数据脚本吗?还可以分享来自cloud init logI的错误吗?我认为它只需要443。我也不会太担心出站流量,除非你认为你不能相信你实例上运行的应用程序不会打开坏东西的连接。我在原始帖子中添加了
/var/log/cloud init output.log
文件(敏感数据已编辑)。不幸的是,我无法发布UserData脚本本身,因为它是专有的。您可以共享您在安全组上使用的出站规则吗?您也可以发布您的用户数据脚本吗?还可以共享来自cloud init logI的错误吗?我想它只需要443。我也不会太担心出站流量,除非你认为你不能相信你实例上运行的应用程序不会打开坏东西的连接。我在原始帖子中添加了
/var/log/cloud init output.log
文件(敏感数据已编辑)。不幸的是,我无法发布UserData脚本本身,因为它是专有的。您可以共享您在安全组上使用的出站规则吗?您也可以发布您的用户数据脚本吗?还可以共享来自cloud init logI的错误吗?我想它只需要443。我也不会太担心出站流量,除非你认为你不能相信你实例上运行的应用程序不会打开坏东西的连接。我在原始帖子中添加了
/var/log/cloud init output.log
文件(敏感数据已编辑)。不幸的是,我不能发布UserData脚本本身,因为它是专有的。