使用 AWS CDK 外观和逃生舱口自定义默认角色名称 - AWS Prescriptive Guidance

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 AWS CDK 外观和逃生舱口自定义默认角色名称

由 SANDEEP SINGH (AWS) 和詹姆斯·雅各布 (AWS) 创作

代码存储库:cdk-aspects-override-example

环境:生产

技术:基础架构 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您可以使用逃生舱口来定义自定义角色名称,并使用方面将自定义名称应用于所有角色,以确保遵守组织的政策和限制。

先决条件和限制

先决条件

限制

  • Aspects 根据资源类型筛选资源,因此所有角色共享相同的前缀。如果您需要为不同的角色添加不同的角色前缀,则需要根据其他属性进行额外筛选。例如,要为与 AWS Lambda 函数关联的角色分配不同的前缀,您可以按特定的角色属性或标签进行筛选,为与 Lambda 相关的角色应用一个前缀,为其他角色应用不同的前缀。

  • IAM角色名称的最大长度为 64 个字符,因此必须修剪修改后的角色名才能满足此限制。

  • 有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅AWS 服务 按地区划分。有关特定终端节点,请参阅服务终端节点和配额页面,然后选择服务的链接。

架构

目标技术堆栈

  • AWS CDK

  • AWS CloudFormation

目标架构

使用逃生舱口和外观来自定义AWSCDK分配的角色名称的架构。
  • 一个 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 应用程序进行交互。该CLIcdk命令是与您的 AWS CDK 应用程序交互的主要工具。它运行您的应用程序,查询您定义的应用程序模型,并生成和部署由生成的 CloudFormation 模板。 AWS CDK

  • AWS CloudFormation帮助您设置 AWS 资源,快速一致地配置资源,并在资源的整个生命周期中跨地区对其 AWS 账户 进行管理。

代码存储库

此模式的源代码和模板可在 Aspects O verride GitHub CDK 存储库中找到。

最佳实践

请参阅AWS 规范性指南网站上使用 AWS CDK 中的 TypeScript 创建 IaC 项目的最佳实践

操作说明

任务描述所需技能

安装 AWS CDK CLI。

要 AWS CDK CLI全局安装,请运行以下命令:

npm install -g aws-cdk
AWS DevOps

验证 版本。

运行命令:

cdk --version

确认您使用的是的版本 2 AWS CDK CLI。

AWS DevOps

引导 AWS CDK 环境。

在部署 AWS CloudFormation 模板之前,请准备好要 AWS 区域 使用的账户和账户。运行命令:

cdk bootstrap <account>/<Region>

有关更多信息,请参阅AWS CDK 文档中的引导。 AWS

AWS DevOps
任务描述所需技能

设置项目。

  1. 将此模式的 GitHub 存储库克隆到您的本地计算机:

    git clone https://github.com/aws-samples/cdk-aspects-override
  2. 导航到本地计算机上的项目目录。

  3. 安装项目依赖项:

    npm ci
AWS DevOps

使用由分配的默认角色名称部署堆栈。 AWS CDK

部署两个包含 Lambda 函数及其关联角色的 CloudFormation 堆栈(ExampleStack1ExampleStack2):

npm run deploy:ExampleAppWithoutAspects

该代码没有显式传递角色属性,因此角色名称将由 AWS CDK.

有关输出示例,请参阅 “其他信息” 部分。

AWS DevOps

部署包含各个方面的堆栈。

在此步骤中,您可以通过为 AWS CDK 项目中部署的所有IAM角色添加前缀来应用强制执行角色名称约定的方面。该方面在lib/aspects.ts文件中定义。该方面使用逃生舱口通过添加前缀来覆盖角色名称。该坡向应用于bin/app-with-aspects.ts文件中的堆栈。本示例中使用的角色名称前缀是dev-unicorn

  1. 编辑 bin/app-with-aspects.ts 文件。

  2. 在文件中,ROLE_NAME_PREFIX使用dev-unicorn以下前缀更新变量:

    const app = new cdk.App(); // Define a prefix for the role names const ROLE_NAME_PREFIX = 'dev-unicorn'; // Instantiate the RoleNamingConventionAspect with the desired prefix const roleNamingConventionAspect = new RoleNamingConventionAspect(ROLE_NAME_PREFIX);
  3. 通过以下方面部署 AWS CDK 应用程序:

    npm run deploy:ExampleAppWithAspects

有关输出示例,请参阅 “其他信息” 部分。

AWS DevOps
任务描述所需技能

删除您的 AWS CloudFormation 堆栈。

使用完此模式后,运行以下命令来清理资源,以免产生额外费用:

cdk destroy --all -f && cdk --app npx ts-node bin/app-with-aspects.ts' destroy --all -f
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