本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS CDK 外观和逃生舱口自定义默认角色名称
由 SANDEEP SINGH (AWS) 和詹姆斯·雅各布 (AWS) 创作
环境:生产 | 技术:基础架构 DevOps;;管理和治理 | |
AWS服务:AWSCDK; AWS CloudFormation; AWS Lambda |
Summary
此模式演示如何自定义由 AWS Cloud Development Kit (AWS CDK) 构造创建的角色的默认名称。如果您的组织有基于命名惯例的特定限制,则通常需要自定义角色名称。例如,您的组织可能会设置 AWS Identity and Access Management (IAM) 权限边界或服务控制策略 (SCPs),要求在角色名称中使用特定的前缀。在这种情况下,由 AWS CDK 构造生成的默认角色名称可能不符合这些约定,因此可能需要更改。此模式通过在中使用逃生舱口和方面来满足这些要求。 AWS CDK您可以使用逃生舱口来定义自定义角色名称,并使用方面将自定义名称应用于所有角色,以确保遵守组织的政策和限制。
先决条件和限制
先决条件
活跃的 AWS 账户
AWS CDK 文档中指定的先决条件
限制
Aspects 根据资源类型筛选资源,因此所有角色共享相同的前缀。如果您需要为不同的角色添加不同的角色前缀,则需要根据其他属性进行额外筛选。例如,要为与 AWS Lambda 函数关联的角色分配不同的前缀,您可以按特定的角色属性或标签进行筛选,为与 Lambda 相关的角色应用一个前缀,为其他角色应用不同的前缀。
IAM角色名称的最大长度为 64 个字符,因此必须修剪修改后的角色名才能满足此限制。
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分
。有关特定终端节点,请参阅服务终端节点和配额页面,然后选择服务的链接。
架构
目标技术堆栈
AWS CDK
AWS CloudFormation
目标架构
一个 AWS CDK 应用程序由一个或多个 AWS CloudFormation 堆栈组成,这些堆栈经过合成和部署以管理 AWS 资源。
要修改第 2 层 (L2) 构造未公开的 AWS CDK托管资源的属性,您可以使用逃生舱口来覆盖底层 CloudFormation 属性(在本例中为角色名称),并在 AWS CDK 堆栈合成过程中使用一个方面将角色应用于 AWS CDK 应用程序中的所有资源。
工具
AWS 服务
AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义和配置 AWS Cloud 基础架构。
AWS CDK 命令行接口 (AWS CDK CLI)(也称为 AWS CDK Toolkit)是一个命令行云开发套件,可帮助您与 AWS CDK 应用程序进行交互。该CLI
cdk
命令是与您的 AWS CDK 应用程序交互的主要工具。它运行您的应用程序,查询您定义的应用程序模型,并生成和部署由生成的 CloudFormation 模板。 AWS CDKAWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。
代码存储库
此模式的源代码和模板可在 Aspects O verride GitHub CDK 存储库中
最佳实践
请参阅AWS 规范性指南网站上使用 AWS CDK 中的 TypeScript 创建 IaC 项目的最佳实践。
操作说明
任务 | 描述 | 所需技能 |
---|---|---|
安装 AWS CDK CLI。 | 要 AWS CDK CLI全局安装,请运行以下命令:
| AWS DevOps |
验证 版本。 | 运行命令:
确认您使用的是的版本 2 AWS CDK CLI。 | AWS DevOps |
引导 AWS CDK 环境。 | 在部署 AWS CloudFormation 模板之前,请准备好要 AWS 区域 使用的账户和账户。运行命令:
有关更多信息,请参阅AWS CDK 文档中的引导。 AWS | AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
设置项目。 |
| AWS DevOps |
使用由分配的默认角色名称部署堆栈。 AWS CDK | 部署两个包含 Lambda 函数及其关联角色的 CloudFormation 堆栈(
该代码没有显式传递角色属性,因此角色名称将由 AWS CDK. 有关输出示例,请参阅 “其他信息” 部分。 | AWS DevOps |
部署包含各个方面的堆栈。 | 在此步骤中,您可以通过为 AWS CDK 项目中部署的所有IAM角色添加前缀来应用强制执行角色名称约定的方面。该方面在
有关输出示例,请参阅 “其他信息” 部分。 | AWS DevOps |
任务 | 描述 | 所需技能 |
---|---|---|
删除您的 AWS CloudFormation 堆栈。 | 使用完此模式后,运行以下命令来清理资源,以免产生额外费用:
| AWS DevOps |
问题排查
问题 | 解决方案 |
---|---|
您在使用时遇到问题 AWS CDK。 | 请参阅 AWS CDK 文档中的常见 AWS CDK 问题疑难解答。 |
相关资源
其他信息
由 AWS CloudFormation 不带任何方面创建的角色名称
Outputs: ExampleStack1WithoutAspects.Function1RoleName = example-stack1-without-as-Function1LambdaFunctionSe-y7FYTY6FXJXA ExampleStack1WithoutAspects.Function2RoleName = example-stack1-without-as-Function2LambdaFunctionSe-dDZV4rkWqWnI ... Outputs: ExampleStack2WithoutAspects.Function3RoleName = example-stack2-without-as-Function3LambdaFunctionSe-ygMv49iTyMq0
由 AWS CloudFormation 使用方面创建的角色名称
Outputs: ExampleStack1WithAspects.Function1RoleName = dev-unicorn-Function1LambdaFunctionServiceRole783660DC ExampleStack1WithAspects.Function2RoleName = dev-unicorn-Function2LambdaFunctionServiceRole2C391181 ... Outputs: ExampleStack2WithAspects.Function3RoleName = dev-unicorn-Function3LambdaFunctionServiceRole4CAA721C