AWS Code Commit 与 GitHub — 为什么不同时使用?
我将思考 AWS Code Commit 与 GitHub 的比较,以及我对它们各自的喜好。请记住,您可以通过 IANS Research 与我安排咨询电话。这是我最近收到的一个问题。
我通常不会在电话中推荐或告诉人们应该购买什么产品。但如果我有直接使用该产品的经验,我会建议如何评估产品,在某些情况下还会提到不同选项的优缺点。问题是,通常人们会拿着一份产品清单来找我,想知道应该买哪一种。没有人使用过市面上的所有产品,即使他们使用过,那也可能只是道听途说,而不是直接使用过每种产品。但在这种情况下,我们将使用两种不同的产品——而我确实在源代码控制和部署系统方面有很多经验,例如:
- GitHub
- 颠覆
- 强制
- CVS(并发版本系统)及其变体
- AccuRev
- 微软Visual Source Safe
- GitLab(分析)
- Azure DevOps(分析)
因此,基于这些背景,我可以告诉你我喜欢和不喜欢各种源代码控制系统以及潜在的安全风险。我使用过的最有趣的源代码控制系统之一是 AccurRev,我认为它并不广为人知。我喜欢它处理分支和合并的方式,比一些更受欢迎的选项更好。实际上,我使用不同的存储库来在一定程度上模拟它的工作方式。
我真的很喜欢 GitHub 提供的一些安全功能。我在之前的帖子中写过其中一些,可能会在后续的帖子中介绍其他一些。
我还写过如何在使用托管版本的 GitHub 时保护您的网络,但这并不理想。在撰写本文时,无法使用 AWS 设置 PrivateLink 来阻止互联网访问,但您可以采取一些步骤将网络锁定到特定 IP 地址。如果您想这样做,则无法利用 VPN 来传输所有流量。
如果您想控制网络、身份和数据安全,最好托管自己的 GitHub 实例和 GitHub Actions 运行器。但这也带来了一系列挑战。托管解决方案很好——尤其是对于没有太多资源的初创公司和小公司来说。
我再也不想托管自己的源代码控制系统了。这并不好玩,我记得有一次我将系统托管在数据中心的机架上时,我曾想过,如果有人可以为服务器和开发系统创建托管解决方案,这样开发人员就可以专注于编写代码,他们就会发财。(想想 AWS、GitHub 等)但我不想这么做。我不喜欢管理这些东西。但我确实想要安全的选项来存储我的代码和触发事件。
AWS Code Commit 的一个优点是,它允许您将源代码控制系统保留在私有网络上,但它仍然是托管服务。您可以通过 IAM 角色和策略控制网络并授予细粒度访问权限。
你需要问自己的一个问题是——你更信任谁来处理你的代码?你是否对这两种方案都进行过安全评估?你是否查看过这两种方案有多少次因为某种漏洞或漏洞而登上新闻?
您是否研究过每家公司如何防止内部人员接触您的专有代码?这些信息可用吗?您是否查看过?如果内部人员可以看到您的代码,他们除了窃取您的知识产权 (IP) 之外,还可能发现并利用漏洞。
您如何控制可以访问每个服务的网络?您是否可以在私有网络中运行系统,以便在您的代码或云服务的代码出现漏洞时,您的系统不会暴露在互联网上?我在之前的帖子中提到了在这种情况下 Log4J 将如何受到阻碍。
顺便说一句,如果您正在使用 Azure DevOps,那么这是我选择不使用它的主要原因之一。这些策略非常有趣。我真的很喜欢 Azure DevOps 在部署过程中创建策略方面提供的一些选项。问题是,上次我检查时,您需要允许使用该服务的网络要求和域非常广泛。哦,你说我们只使用代理?这样我们就可以在私有网络中操作,并且只向代理打开防火墙规则。代理的另一边是什么?你检查过吗?(提示:它可能完全开放。)
您可以为每个服务获取哪种日志?谁有权访问日志?日志的及时性如何?您可以保护日志并确保日志完整性吗?在使用 GitHub Secrets 时,请查看我在 GitHub Actions 日志记录方面写的一些注意事项。您使用的源代码控制系统中可能在哪里记录您的机密?
我记得在查看 EC2 实例的屏幕截图时,在控制台中查看 AWS UserData 的输出,其中有 Capital One Chef 系统的凭证,任何人都可以看到。这是在开发环境中,但任何有权访问生产环境的人,就像我一样,都可以看到相同的内容。我在公司博客上写了这个问题,因为这是了解问题并及时修复的最佳方式。有人评论说“这真是太棒了。”希望是渗透测试人员或红队人员,而不是有恶意的人。AWS 已经解决了这个问题,因为在云初始化过程中您再也无法看到日志。您还可以使用 AWS Secrets Manager,并确保不记录这些机密!
您的源代码在系统内是如何安全的——使用您自己控制并编写策略的加密密钥,还是使用用于多个客户帐户的密钥?
如果由于无法登录而无法访问源代码控制系统怎么办?Microsoft 最近发生了 5 小时的中断。AWS 最近发生的中断时间要短得多,从我的角度来看,总体而言中断次数较少,但仍有可能发生。
如果勒索软件进入了您的源代码控制系统怎么办?您有备份吗?您需要多长时间才能恢复并重新开始工作?勒索软件可以获取您的备份吗?这就是我建议在部署和多组凭证时使用拉模型而不是推模型的原因之一,因为在上一篇文章中,一组凭证没有“您王国的钥匙”。
这就是为什么你可能真的想考虑在两个不同的云提供商处使用两个源代码控制系统,而不是一个。AWS CodeCommit 有一种方法可以同步到不同的存储库。与我上一个解决方案相比,这里的问题是,同一组凭证被推送到两个存储库。如果那组凭证被泄露,你可能会有糟糕的一天。
此外,不同的源代码控制系统可能会提供不同的代码扫描解决方案,所有这些解决方案都很有价值——尤其是免费的。例如,GitHub 有一些免费的漏洞检查,这对于公共存储库来说非常好。对于私有存储库,您必须为高级安全服务付费。
您可以将 Code Guru 与 AWS Code Commit 一起使用,但在撰写本文时,它只能在 Java 或 Python 中“发现常见问题”。
当然,您也可以将扫描工具与源代码分开集成到管道中。不同类型的扫描会发现不同的问题。我看到有人建议你通过 GitHub 操作扫描代码,但如果你选择使用这些操作,我已经写了一些注意事项。
此外,您不一定希望每次提交代码时都进行扫描。您需要对扫描的位置进行策略性安排,以确保不会让未经扫描的代码通过,同时不会对每次代码提交都进行长时间的扫描。任何有经验的开发人员都会告诉您,当您试图完成项目时,后者不会有很好的效果。另一方面,让开发人员决定何时运行扫描也不符合您的最佳利益。这些是我帮助通过 IANS Research 安排通话的客户解决的问题类型。
两全其美——同时使用 AWS Code Commit 和 GitHub
我将在后续文章中探讨如何结合使用 GitHub 和 AWS Code Commit。过去,我对 GitHub 和 Bit Bucket 做过类似的事情。使用哪个代码存储库并不重要,只要您进行了适当的评估并遵循最佳安全实践即可。
任何代码存储库都存在风险。您需要了解这些风险,并在流程和架构中解决它们。您可以联系相关公司,并告知他们您是否对产品或服务中的安全漏洞有任何疑虑。您还想了解有哪些选项和功能可用于查找您编写并集成到软件开发项目中的代码中的漏洞。 感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)
订阅频道(t.me/awsgoogvps_…) TG交流群(t.me/awsgoogvpsHost)