我想知道将所有IAM角色和策略放在嵌套堆栈中的一个模板中以使其更易于维护是不是更有意义,或者好的做法是出于某种原因说那是相当有害的并将策略放在创建资源的特定模板。哪种方法更好。为了井井有条,我将使用ONE模板,因为该想法似乎还不错。对于在此问题上的共同经验,我将不胜感激。
Merci A
答案 0 :(得分:2)
我们最近使用cloudformation对整个AWS基础架构进行了模板化。而且,我将使IAM角色和策略更接近应用程序堆栈,而不是放在一个模板中。我会尽力解释我的原因。
每个TeamEnv我们都有一个单独的AWS帐户。
What is a TeamEnv?
如果我们有3个团队,例如A,B和C。 还有3种环境开发,暂存和生产。
然后我们有9个TeamEnv:每个其他团队一个A-Dev,A-Staging,A-Prod等。因此,我们总共有9个AWS账户。这样做是为了设置问责制以及资源的透明度。
而且,这是我们的操作方式。我们将堆栈分为以下几类:
通用AWS Cloudformation堆栈
TeamEnv特定的AWS Cloudformation堆栈
常见的AWS Cloudformation堆栈: 这些是所有团队及其环境通用的堆栈:
IAM子用户帐户堆栈-此堆栈创建具有管理员访问权限的IAM子帐户。
通用VPC堆栈-该堆栈根据公司的标准创建VPC及其组件。
VPC对等堆栈-此堆栈用于对等VPC。
VPC对等角色堆栈-此堆栈创建对等所需的VPC角色。
特定于团队的堆栈:
ELB堆栈-它依赖于通用VPC 堆栈,并从中导入导出的值,例如 VPCId 。
服务特定堆栈-它依赖于通用VPC 堆栈和 ELB堆栈,并导入各种导出的值。每个微服务都有一个堆栈,其中包含将服务带入就绪状态所需的所有内容。它包括s3个存储桶,SQS,InstanceRole等。
这是我们管理IAM角色和策略的地方。更易于管理和审核。
但是,事后看来,我会为IAM策略保留一个单独的堆栈,这些堆栈在其他角色中经常使用和引用,以避免重复的内联策略。