CDK 企业 IaC
在企业限制范围内使用CDK的公用事业.
安装
字体
npm install @cdklabs/cdk-enterprise-iac
蟒
pip install cdklabs.cdk-enterprise-iac
这个项目是为了谁
在大型企业中,建设者在部署AWS时可能会遇到企业强加的限制.
这可能是一些简单的事情,比如"所有IAM角色必须有一个特定的权限边界附加".
这也可能是更严格的限制,例如严格的职责分离,只允许某些团队部署特定的AWS资源(例如网络团队可以部署VPC,Subnet,和路由表). 安全小组可以部署IAM资源. 开发者可以部署计算. DBA可以部署数据库等)
此类环境非常受限制的企业如能更仔细地审视其政策,看看如何使建筑商能够在较少的摩擦下安全地部署资源,将会获益. 但是,在许多企业,说起来比做起来容易,而且建造者仍然可望交付.
该项目旨在减少在这些企业制约下工作的建筑商的摩擦,而企业则决定何种政策对其组织最有意义,绝不是规范性的.
使用量
有许多工具可用,详情见: API.md。 。 。 .
这些工具的几个例子如下:
在所有生成的 IAM 角色中添加权限边界
示例 AddPermissionBoundary 在 Typescript 工程中.
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-project-stack';
import { Aspects } from 'aws-cdk-lib';
import { AddPermissionBoundary } from '@cdklabs/cdk-enterprise-iac';
const app = new cdk.App();
new MyStack(app, 'MyStack');
Aspects.of(app).add(
new AddPermissionBoundary({
permissionsBoundaryPolicyName: 'MyPermissionBoundaryName',
instanceProfilePrefix: 'MY_PREFIX_', // optional, Defaults to ''
policyPrefix: 'MY_POLICY_PREFIX_', // optional, Defaults to ''
rolePrefix: 'MY_ROLE_PREFIX_', // optional, Defaults to ''
})
);
示例 AddPermissionBoundary 在 Python 项目中.
import aws_cdk as cdk
from cdklabs.cdk_enterprise_iac import AddPermissionBoundary
from test_py.test_py_stack import TestPyStack
app = cdk.App()
TestPyStack(app, "TestPyStack")
cdk.Aspects.of(app).add(AddPermissionBoundary(
permissions_boundary_policy_name="MyPermissionBoundaryName",
instance_profile_prefix="MY_PREFIX_", # optional, Defaults to ""
policy_prefix="MY_POLICY_PREFIX_", # optional, Defaults to ""
role_prefix="MY_ROLE_PREFIX_" # optional, Defaults to ""
))
app.synth()
资源提取
:警告:资源提取处于实验阶段. 在生产中使用前进行测试和验证。 请打开发现的任何问题 这里。 。 。 .
注:必须安装AWS CLI并可供资源提取器工作.
在许多企业中,与部署CDK应用程序的开发者相比,有不同的团队拥有不同的IAM权限.
例如,可能有一个网络小组,有权部署 AWS::EC2::SecurityGroup 财务报告和审定财务报表 AWS::EC2::EIP,或有权部署的安全小组 AWS::IAM::Role 财务报告和审定财务报表 AWS::IAM::Policy,但部署CDK的开发者没有这些权限.
当一个开发者没有权限在其CDK应用程序中部署必要的资源时,当一个 cdk 部署由于无法部署类似的东西而很快出错时,写好代码变得难以管理 AWS::IAM::Role 用于AWS的任何项目的基础.
企业应当 允许 通过 CDK 部署这些资源的构建者 许多原因,并可以使用 允许边界 防止特权升级。 对于尚未使用许可边界的企业 ResourceExtractor 可以让建设者更容易在遵守企业政策的同时写出好的CDK.
使用 ResourceExtractor Spect,开发者可以将CDK代码写成他们拥有足够的IAM权限,但将这些资源取出为单独的堆栈,供外部团队代表他们部署.
Ưμ㼯A
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
const app = new App();
const appStack = new Stack(app, 'MyAppStack');
const func = new Function(appStack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
autoDeleteObjects: true,
removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);
app.synth()
合成的云形包括: 全部 所需AWS资源,包括开发商可能没有权限部署的资源
上述例子包括合成云形中的以下片段
TestLambdaServiceRoleC28C2D9C:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: 'sts:AssumeRole'
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Version: 2012-10-17
# excluding remaining properties
TestLambda2F70C45E:
Type: 'AWS::Lambda::Function'
Properties:
Role: !GetAtt
- TestLambdaServiceRoleC28C2D9C
- Arn
# excluding remaining properties
包括 bucket.grantReadWrite(func) 在CDK应用程序中,确保IAM的作用,对应用程序的IAM政策最不具有特权,IAM资源的创建,如"角色与政策"可能仅限于安全团队,导致被合成的"云形"模板不被开发者部署.
使用 ResourceExtractor,我们可以抽出一个任意的 Cloudform 资源列表 一个开发者 没有 拥有提供权限,并创建一个单独的堆栈,可以发送给安全小组.
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
// Import ResourceExtractor
import { ResourceExtractor } from '@cdklabs/cdk-enterprise-iac';
const app = new App();
const appStack = new Stack(app, 'MyAppStack');
// Set up a destination stack to extract resources to
const extractedStack = new Stack(app, 'ExtractedStack');
const func = new Function(appStack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
autoDeleteObjects: true,
removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);
// Capture the output of app.synth()
const synthedApp = app.synth();
// Apply the ResourceExtractor Aspect
Aspects.of(app).add(
new ResourceExtractor({
// synthesized stacks to examine
stackArtifacts: synthedApp.stacks,
// Array of Cloudformation resources to extract
resourceTypesToExtract: [
'AWS::IAM::Role',
'AWS::IAM::Policy',
'AWS::IAM::ManagedPolicy',
'AWS::IAM::InstanceProfile',
],
// Destination stack for extracted resources
extractDestinationStack: extractedStack,
})
);
// Resynthing since ResourceExtractor has modified the app
app.synth({ force: true });
在上述例子中, 全部 资源创建于 appStack空时 extractedStack 还创建了.
我们应用 ResourceExtractor Spect,指定开发者由于IAM权限不足而无法部署的Cloudform资源类型.
当我们在 CDK 项目中列出堆栈时, 可以看到一个添加的堆栈
$ cdk ls
MyAppStack
ExtractedStack
看看这些合成的堆栈,在 ExtractedStack 我们会找到:
Resources:
TestLambdaServiceRoleC28C2D9C:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: 'sts:AssumeRole'
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Version: 2012-10-17
# excluding remaining properties
Outputs:
ExportAppStackTestLambdaServiceRoleC28C2D9C:
Value:
'Fn::GetAtt':
- TestLambdaServiceRoleC28C2D9C
- Arn
Export:
Name: 'AppStack:TestLambdaServiceRoleC28C2D9C' # Exported name
和内被合成 MyAppStack 模板 :
Resources:
TestLambda2F70C45E:
Type: 'AWS::Lambda::Function'
Properties:
Role: !ImportValue 'AppStack:TestLambdaServiceRoleC28C2D9C' # Using ImportValue instrinsic function to use pre-created IAM role
# excluding remaining properties
在这种情况下,开发者能够向外部安全小组提供足够的IAM权限,以部署 ExtractedStack。 。 。 .
一旦部署,开发者可以运行 cdk deploy MyAppStack 没有因IAM权限不足而出错
价值分享方法
从堆栈取出资源时,必须有一种方法来引用取出的资源.
有三种方法(见 ResourceExtractorShareMethod 页:1
CFN_OUTPUTSSM_PARAMETERAPI_LOOKUP
CFN_OUTPUT
默认共享方法是 CFN_OUTPUT,它使用 Cloudform 导出/导入导出堆栈中的值(参见 产出,并使用 Fn:: 导入值 用于引用这些值的内在函数.
这很好,但一些团队可能更喜欢在外部团队部署的取出堆栈与其它CDK基础设施之间进行松散相接.
SSM_PARAMETER
在这个方法中,所提取的堆栈在 AWS 系统管理器参数存储中生成参数,并修改了 CDK 应用程序以使用 aws_ssm.StringParameter.valueFromLookup() 在合成时间.
使用这种方法的例子:
import { ResourceExtractor, ResourceExtractorShareMethod } from '@cdklabs/cdk-enterprise-iac';
Aspects.of(app).add(
new ResourceExtractor({
stackArtifacts: synthedApp.stacks,
resourceTypesToExtract: [
'AWS::IAM::Role',
'AWS::IAM::Policy',
'AWS::IAM::ManagedPolicy',
'AWS::IAM::InstanceProfile',
],
extractDestinationStack: extractedStack,
valueShareMethod: ResourceExtractorShareMethod.SSM_PARAMETER, // Specify SSM_PARAMETER Method
});
);
API_LOOKUP
这个 API_LOOKUP 共享方法是一项正在进行中的工作,尚未支持
资源部分
一些被提取的资源可能参考了尚未创建的资源.
在我们的例子 CDK 应用程序中包含行
bucket.grantReadWrite(func);
这创造了一个 AWS::IAM::Policy 包括范围扩大到S3桶的必要行动.
当 AWS::IAM::Policy 无法使用 Ref 或者说 Fn::GetAtt 参考S3桶,因为S3桶没有被取出.
在这种情况下,我们用“部分ARN”来取而代之,该“部分ARN”将IAM政策声明中的资源范围扩大到尚未创建的S3桶的ARN.
框外支持有多种资源类型(发现于 createDefaultTransforms) (中文(简体) ). 如果你有资源 还没有支持, 你会收到一个 MissingTransformError。在这种情况下,您可以打开 问题 ,或者您可以包含 additionalTransforms 属性.
审议如下:
const vpc = new Vpc(stack, 'TestVpc');
const db = new DatabaseInstance(stack, 'TestDb', {
vpc,
engine: DatabaseInstanceEngine.POSTGRES,
})
const func = new Function(stack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
db.secret?.grantRead(func)
const synthedApp = app.synth();
Aspects.of(app).add(
new ResourceExtractor({
extractDestinationStack: extractedStack,
stackArtifacts: synthedApp.stacks,
valueShareMethod: ResourceExtractorShareMethod.CFN_OUTPUT,
resourceTypesToExtract: ['AWS::IAM::Role', 'AWS::IAM::Policy'],
additionalTransforms: {
'AWS::SecretsManager::SecretTargetAttachment': `arn:${Aws.PARTITION}:secretsmanager:${Aws.REGION}:${Aws.ACCOUNT_ID}:secret:some-expected-value*`,
},
});
);
app.synth({ force: true });
在这种情况下,有一个 AWS::SecretsManager::SecretTargetAttachment 生成以通过将数据库连接信息添加到秘密 JSON 来完成一个秘密管理器秘密和关联数据库之间的最终链接,该秘密返回生成的秘密的ARN.
在提炼IAM政策方面,我们要告诉 ResourceExtractor 如何处理IAM政策说明中的资源部分,使其范围足够缩小.
在这种情况下,而不是使用 Ref: LogicalIdForTheSecretTargetAttachment 我们建造了我们想要使用的ARN.
详细情况 API.md (英语)
生成的 API.md
生成 API.md 如下:
展开以查看 API 文件
CDK 企业 IaC
在企业限制范围内使用CDK的公用事业.
安装
字体
npm install @cdklabs/cdk-enterprise-iac
蟒
pip install cdklabs.cdk-enterprise-iac
这个项目是为了谁
在大型企业中,建设者在部署AWS时可能会遇到企业强加的限制.
这可能是一些简单的事情,比如"所有IAM角色必须有一个特定的权限边界附加".
这也可能是更严格的限制,例如严格的职责分离,只允许某些团队部署特定的AWS资源(例如网络团队可以部署VPC,Subnet,和路由表). 安全小组可以部署IAM资源. 开发者可以部署计算. DBA可以部署数据库等)
此类环境非常受限制的企业如能更仔细地审视其政策,看看如何使建筑商能够在较少的摩擦下安全地部署资源,将会获益. 但是,在许多企业,说起来比做起来容易,而且建造者仍然可望交付.
该项目旨在减少在这些企业制约下工作的建筑商的摩擦,而企业则决定何种政策对其组织最有意义,绝不是规范性的.
使用量
有许多工具可用,详情见: API.md。 。 。 .
这些工具的几个例子如下:
在所有生成的 IAM 角色中添加权限边界
示例 AddPermissionBoundary 在 Typescript 工程中.
import * as cdk from 'aws-cdk-lib';
import { MyStack } from '../lib/my-project-stack';
import { Aspects } from 'aws-cdk-lib';
import { AddPermissionBoundary } from '@cdklabs/cdk-enterprise-iac';
const app = new cdk.App();
new MyStack(app, 'MyStack');
Aspects.of(app).add(
new AddPermissionBoundary({
permissionsBoundaryPolicyName: 'MyPermissionBoundaryName',
instanceProfilePrefix: 'MY_PREFIX_', // optional, Defaults to ''
policyPrefix: 'MY_POLICY_PREFIX_', // optional, Defaults to ''
rolePrefix: 'MY_ROLE_PREFIX_', // optional, Defaults to ''
})
);
示例 AddPermissionBoundary 在 Python 项目中.
import aws_cdk as cdk
from cdklabs.cdk_enterprise_iac import AddPermissionBoundary
from test_py.test_py_stack import TestPyStack
app = cdk.App()
TestPyStack(app, "TestPyStack")
cdk.Aspects.of(app).add(AddPermissionBoundary(
permissions_boundary_policy_name="MyPermissionBoundaryName",
instance_profile_prefix="MY_PREFIX_", # optional, Defaults to ""
policy_prefix="MY_POLICY_PREFIX_", # optional, Defaults to ""
role_prefix="MY_ROLE_PREFIX_" # optional, Defaults to ""
))
app.synth()
资源提取
:警告:资源提取处于实验阶段. 在生产中使用前进行测试和验证。 请打开发现的任何问题 这里。 。 。 .
在许多企业中,与部署CDK应用程序的开发者相比,有不同的团队拥有不同的IAM权限.
例如,可能有一个网络小组,有权部署 AWS::EC2::SecurityGroup 财务报告和审定财务报表 AWS::EC2::EIP,或有权部署的安全小组 AWS::IAM::Role 财务报告和审定财务报表 AWS::IAM::Policy,但部署CDK的开发者没有这些权限.
当一个开发者没有权限在其CDK应用程序中部署必要的资源时,当一个 cdk 部署由于无法部署类似的东西而很快出错时,写好代码变得难以管理 AWS::IAM::Role 用于AWS的任何项目的基础.
企业应当 允许 通过 CDK 部署这些资源的构建者 许多原因,并可以使用 允许边界 防止特权升级。 对于尚未使用许可边界的企业 ResourceExtractor 可以让建设者更容易在遵守企业政策的同时写出好的CDK.
使用 ResourceExtractor Spect,开发者可以将CDK代码写成他们拥有足够的IAM权限,但将这些资源取出为单独的堆栈,供外部团队代表他们部署.
Ưμ㼯A
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
const app = new App();
const appStack = new Stack(app, 'MyAppStack');
const func = new Function(appStack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
autoDeleteObjects: true,
removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);
app.synth()
合成的云形包括: 全部 所需AWS资源,包括开发商可能没有权限部署的资源
上述例子包括合成云形中的以下片段
TestLambdaServiceRoleC28C2D9C:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: 'sts:AssumeRole'
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Version: 2012-10-17
# excluding remaining properties
TestLambda2F70C45E:
Type: 'AWS::Lambda::Function'
Properties:
Role: !GetAtt
- TestLambdaServiceRoleC28C2D9C
- Arn
# excluding remaining properties
包括 bucket.grantReadWrite(func) 在CDK应用程序中,确保IAM的作用,对应用程序的IAM政策最不具有特权,IAM资源的创建,如"角色与政策"可能仅限于安全团队,导致被合成的"云形"模板不被开发者部署.
使用 ResourceExtractor,我们可以抽出一个任意的 Cloudform 资源列表 一个开发者 没有 拥有提供权限,并创建一个单独的堆栈,可以发送给安全小组.
import { App, Aspects, RemovalPolicy, Stack } from 'aws-cdk-lib';
import { Code, Function, Runtime } from 'aws-cdk-lib/aws-lambda';
import { Bucket } from 'aws-cdk-lib/aws-s3';
// Import ResourceExtractor
import { ResourceExtractor } from '@cdklabs/cdk-enterprise-iac';
const app = new App();
const appStack = new Stack(app, 'MyAppStack');
// Set up a destination stack to extract resources to
const extractedStack = new Stack(app, 'ExtractedStack');
const func = new Function(appStack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
const bucket = new Bucket(appStack, 'TestBucket', {
autoDeleteObjects: true,
removalPolicy: RemovalPolicy.DESTROY,
});
bucket.grantReadWrite(func);
// Capture the output of app.synth()
const synthedApp = app.synth();
// Apply the ResourceExtractor Aspect
Aspects.of(app).add(
new ResourceExtractor({
// synthesized stacks to examine
stackArtifacts: synthedApp.stacks,
// Array of Cloudformation resources to extract
resourceTypesToExtract: [
'AWS::IAM::Role',
'AWS::IAM::Policy',
'AWS::IAM::ManagedPolicy',
'AWS::IAM::InstanceProfile',
],
// Destination stack for extracted resources
extractDestinationStack: extractedStack,
})
);
// Resynthing since ResourceExtractor has modified the app
app.synth({ force: true });
在上述例子中, 全部 资源创建于 appStack空时 extractedStack 还创建了.
我们应用 ResourceExtractor Spect,指定开发者由于IAM权限不足而无法部署的Cloudform资源类型.
当我们在 CDK 项目中列出堆栈时, 可以看到一个添加的堆栈
$ cdk ls
MyAppStack
ExtractedStack
看看这些合成的堆栈,在 ExtractedStack 我们会找到:
Resources:
TestLambdaServiceRoleC28C2D9C:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Action: 'sts:AssumeRole'
Effect: Allow
Principal:
Service: lambda.amazonaws.com
Version: 2012-10-17
# excluding remaining properties
Outputs:
ExportAppStackTestLambdaServiceRoleC28C2D9C:
Value:
'Fn::GetAtt':
- TestLambdaServiceRoleC28C2D9C
- Arn
Export:
Name: 'AppStack:TestLambdaServiceRoleC28C2D9C' # Exported name
和内被合成 MyAppStack 模板 :
Resources:
TestLambda2F70C45E:
Type: 'AWS::Lambda::Function'
Properties:
Role: !ImportValue 'AppStack:TestLambdaServiceRoleC28C2D9C' # Using ImportValue instrinsic function to use pre-created IAM role
# excluding remaining properties
在这种情况下,开发者能够向外部安全小组提供足够的IAM权限,以部署 ExtractedStack。 。 。 .
一旦部署,开发者可以运行 cdk deploy MyAppStack 没有因IAM权限不足而出错
价值分享方法
从堆栈取出资源时,必须有一种方法来引用取出的资源.
有三种方法(见 ResourceExtractorShareMethod 页:1
CFN_OUTPUTSSM_PARAMETERAPI_LOOKUP
CFN_OUTPUT
默认共享方法是 CFN_OUTPUT,它使用 Cloudform 导出/导入导出堆栈中的值(参见 产出,并使用 Fn:: 导入值 用于引用这些值的内在函数.
这很好,但一些团队可能更喜欢在外部团队部署的取出堆栈与其它CDK基础设施之间进行松散相接.
SSM_PARAMETER
在这个方法中,所提取的堆栈在 AWS 系统管理器参数存储中生成参数,并修改了 CDK 应用程序以使用 aws_ssm.StringParameter.valueFromLookup() 在合成时间.
使用这种方法的例子:
import { ResourceExtractor, ResourceExtractorShareMethod } from '@cdklabs/cdk-enterprise-iac';
Aspects.of(app).add(
new ResourceExtractor({
stackArtifacts: synthedApp.stacks,
resourceTypesToExtract: [
'AWS::IAM::Role',
'AWS::IAM::Policy',
'AWS::IAM::ManagedPolicy',
'AWS::IAM::InstanceProfile',
],
extractDestinationStack: extractedStack,
valueShareMethod: ResourceExtractorShareMethod.SSM_PARAMETER, // Specify SSM_PARAMETER Method
});
);
API_LOOKUP
这个 API_LOOKUP 共享方法是一项正在进行中的工作,尚未支持
资源部分
一些被提取的资源可能参考了尚未创建的资源.
在我们的例子 CDK 应用程序中包含行
bucket.grantReadWrite(func);
这创造了一个 AWS::IAM::Policy 包括范围扩大到S3桶的必要行动.
当 AWS::IAM::Policy 无法使用 Ref 或者说 Fn::GetAtt 参考S3桶,因为S3桶没有被取出.
在这种情况下,我们用“部分ARN”来取而代之,该“部分ARN”将IAM政策声明中的资源范围扩大到尚未创建的S3桶的ARN.
框外支持有多种资源类型(发现于 createDefaultTransforms) (中文(简体) ). 如果你有资源 还没有支持, 你会收到一个 MissingTransformError。在这种情况下,您可以打开 问题 ,或者您可以包含 additionalTransforms 属性.
审议如下:
const vpc = new Vpc(stack, 'TestVpc');
const db = new DatabaseInstance(stack, 'TestDb', {
vpc,
engine: DatabaseInstanceEngine.POSTGRES,
})
const func = new Function(stack, 'TestLambda', {
code: Code.fromAsset(path.join(__dirname, 'lambda-handler')),
handler: 'index.handler',
runtime: Runtime.PYTHON_3_11,
});
db.secret?.grantRead(func)
const synthedApp = app.synth();
Aspects.of(app).add(
new ResourceExtractor({
extractDestinationStack: extractedStack,
stackArtifacts: synthedApp.stacks,
valueShareMethod: ResourceExtractorShareMethod.CFN_OUTPUT,
resourceTypesToExtract: ['AWS::IAM::Role', 'AWS::IAM::Policy'],
additionalTransforms: {
'AWS::SecretsManager::SecretTargetAttachment': `arn:${Aws.PARTITION}:secretsmanager:${Aws.REGION}:${Aws.ACCOUNT_ID}:secret:some-expected-value*`,
},
});
);
app.synth({ force: true });
在这种情况下,有一个 AWS::SecretsManager::SecretTargetAttachment 生成以通过将数据库连接信息添加到秘密 JSON 来完成一个秘密管理器秘密和关联数据库之间的最终链接,该秘密返回生成的秘密的ARN.
在提炼IAM政策方面,我们要告诉 ResourceExtractor 如何处理IAM政策说明中的资源部分,使其范围足够缩小.
在这种情况下,而不是使用 Ref: LogicalIdForTheSecretTargetAttachment 我们建造了我们想要使用的ARN.
详细情况 API.md (英语)
生成的 API.md
生成 API.md 如下:
展开以查看 API 文件
API 参考
构造
EcsIso 服务自动缩放器
创建 EcsIsoService自动缩放构建.
此构造允许您在 ISO 中缩放 ECS 服务 区域中可能无法提供经典ECS自动缩放.
初始化剂
import { EcsIsoServiceAutoscaler } from '@cdklabs/cdk-enterprise-iac'
new EcsIsoServiceAutoscaler(scope: Construct, id: string, props: EcsIsoServiceAutoscalerProps)
| 名称 | 类型 | 说明 |
|---|---|---|
scope | constructs.Construct | 没有描述. |
id | string | 没有描述. |
props | EcsIsoServiceAutoscalerProps | 没有描述. |
scope需求
- 类型 : 构造 构造
id需求
- 类型 : 字符串
props需求
- 类型 : EcsIso 服务自动缩放程序
方法
| 名称 | 说明 |
|---|---|
toString | 返回此构造的字符串表达式 . |
toString
public toString(): string
返回此构造的字符串表达式 .
静态函数
| 名称 | 说明 |
|---|---|
isConstruct | 检查是否 x 是一个构造. |
isConstruct
isConstructimport { EcsIsoServiceAutoscaler } from '@cdklabs/cdk-enterprise-iac'
EcsIsoServiceAutoscaler.isConstruct(x: any)
检查是否 x 是一个构造.
x需求
- 类型 : 任意
任何物体.
属性
| 名称 | 类型 | 说明 |
|---|---|---|
node | constructs.Node | 树节. |
ecsScalingManagerFunction | aws-cdk-lib.aws_lambda.Function | 没有描述. |
node需求
public readonly node: Node;
- 类型 : 构造 节点
树节.
ecsScalingManagerFunction需求
public readonly ecsScalingManagerFunction: Function;
- 类型 : aws-cdk-lib.aws lambda (英语). 函数
以配置填充
输入一个基于所提供配置的 VPC 子网.
示例
const mySubnetConfig: SubnetConfig[] = [
{
groupName: 'app',
cidrRange: '172.31.0.0/27',
availabilityZone: 'a',
subnetType: subnetType.PUBLIC,
},
{
groupName: 'app',
cidrRange: '172.31.0.32/27',
availabilityZone: 'b',
subnetType: subnetType.PUBLIC,
},
{
groupName: 'db',
cidrRange: '172.31.0.64/27',
availabilityZone: 'a',
subnetType: subnetType.PRIVATE_WITH_EGRESS,
},
{
groupName: 'db',
cidrRange: '172.31.0.96/27',
availabilityZone: 'b',
subnetType: subnetType.PRIVATE_WITH_EGRESS,
},
{
groupName: 'iso',
cidrRange: '172.31.0.128/26',
availabilityZone: 'a',
subnetType: subnetType.PRIVATE_ISOLATED,
},
{
groupName: 'iso',
cidrRange: '172.31.0.196/26',
availabilityZone: 'b',
subnetType: subnetType.PRIVATE_ISOLATED,
},
];
new PopulateWithConfig(this, "vpcPopulater", {
vpcId: 'vpc-abcdefg1234567',
privateRouteTableId: 'rt-abcdefg123456',
localRouteTableId: 'rt-123456abcdefg',
subnetConfig: mySubnetConfig,
})
初始化剂
import { PopulateWithConfig } from '@cdklabs/cdk-enterprise-iac'
new PopulateWithConfig(scope: Construct, id: string, props: PopulateWithConfigProps)
| 名称 | 类型 | 说明 |
|---|---|---|
scope | constructs.Construct | 没有描述. |
id | string | 没有描述. |
props | PopulateWithConfigProps | 没有描述. |
scope需求
- 类型 : 构造 构造
id需求
- 类型 : 字符串
props需求
- 类型 : 使用配置配置
方法
| 名称 | 说明 |
|---|---|
toString | 返回此构造的字符串表达式 . |
toString
public toString(): string
返回此构造的字符串表达式 .
静态函数
| 名称 | 说明 |
|---|---|
isConstruct | 检查是否 x 是一个构造. |
isConstruct
isConstructimport { PopulateWithConfig } from '@cdklabs/cdk-enterprise-iac'
PopulateWithConfig.isConstruct(x: any)
检查是否 x 是一个构造.
x需求
- 类型 : 任意
任何物体.
属性
| 名称 | 类型 | 说明 |
|---|---|---|
node | constructs.Node | 树节. |
node需求
public readonly node: Node;
- 类型 : 构造 节点
树节.
分割 Vpc 偶数
将一个 VPC 平分到一个指定的 AZ 数( 如果没有定义 ) 之间, 并附上一个指定的路由表和标签 .
示例
// with more specific properties
new SplitVpcEvenly(this, 'evenSplitVpc', {
vpcId: 'vpc-abcdefg123456',
vpcCidr: '172.16.0.0/16',
routeTableId: 'rt-abcdefgh123456',
cidrBits: '10',
numberOfAzs: 4,
subnetType: subnetType.PRIVATE_ISOLATED,
});
初始化剂
import { SplitVpcEvenly } from '@cdklabs/cdk-enterprise-iac'
new SplitVpcEvenly(scope: Construct, id: string, props: SplitVpcEvenlyProps)
| 名称 | 类型 | 说明 |
|---|---|---|
scope | constructs.Construct | 没有描述. |
id | string | 没有描述. |
props | SplitVpcEvenlyProps | 没有描述. |
scope需求
- 类型 : 构造 构造
id需求
- 类型 : 字符串
props需求
- 类型 : 分割 VpcEvenly 程序
方法
| 名称 | 说明 |
|---|---|
toString | 返回此构造的字符串表达式 . |
toString
public toString(): string
返回此构造的字符串表达式 .
静态函数
| 名称 | 说明 |
|---|---|
isConstruct | 检查是否 x 是一个构造. |
isConstruct
isConstructimport { SplitVpcEvenly } from '@cdklabs/cdk-enterprise-iac'
SplitVpcEvenly.isConstruct(x: any)
检查是否 x 是一个构造.
x需求
- 类型 : 任意
任何物体.
属性
| 名称 | 类型 | 说明 |
|---|---|---|
node | constructs.Node | 树节. |
node需求
public readonly node: Node;
- 类型 : 构造 节点
树节.
字符串
添加Cfninit Proxy 软件
代理服务器使用 Cfn 帮助命令的属性 .
初始化器
import { AddCfnInitProxyProps } from '@cdklabs/cdk-enterprise-iac'
const addCfnInitProxyProps: AddCfnInitProxyProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
proxyHost | string | 您代理服务器的主机 . |
proxyPort | number | 代理端口 . |
proxyCredentials | aws-cdk-lib.aws_secretsmanager.ISecret | 包含 user 财务报告和审定财务报表 password 如果代理机需要证书, 属性将使用 http://user:password@host:port 可能包含敏感数据, 所以使用一个秘密. |
proxyType | ProxyType | 代理类型. |
proxyHost需求
public readonly proxyHost: string;
- 类型 : 字符串
您代理服务器的主机 .
示例
example.com
proxyPort需求
public readonly proxyPort: number;
- 类型 : 编号
代理端口 .
示例
8080
proxyCredentials可选
public readonly proxyCredentials: ISecret;
- 类型 : aws-cdk-lib.aws secretsmanager.ISecret (英语)
包含 user 财务报告和审定财务报表 password 如果代理机需要证书, 属性将使用 http://user:password@host:port 可能包含敏感数据, 所以使用一个秘密.
请注意,虽然 user 财务报告和审定财务报表 password 在云形模板中看不到
他们 将 以简洁的文字在您体内 UserData
示例
const secret = new Secret(stack, 'TestSecret', {
secretObjectValue: {
user: SecretValue,
password: SecretValue,
},
});
proxyType可选
public readonly proxyType: ProxyType;
- 类型 : 代理服务器
- 默认 : 代理服务器. HTTP
代理类型.
示例
ProxyType.HTTPS
添加任务界限
传递给添加边界的属性 .
初始化器
import { AddPermissionBoundaryProps } from '@cdklabs/cdk-enterprise-iac'
const addPermissionBoundaryProps: AddPermissionBoundaryProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
permissionsBoundaryPolicyName | string | 许可边界政策名称,以添加所有IAM角色. |
instanceProfilePrefix | string | IAM IntextProfiles (Default: '') 名称的前缀 . |
policyPrefix | string | IAM 政策和管理政策名称前缀(默认:"'"). |
rolePrefix | string | 一个预置到IAM角色(Default:"'")名称的前缀. |
permissionsBoundaryPolicyName需求
public readonly permissionsBoundaryPolicyName: string;
- 类型 : 字符串
许可边界政策名称,以添加所有IAM角色.
instanceProfilePrefix可选
public readonly instanceProfilePrefix: string;
- 类型 : 字符串
IAM IntextProfiles (Default: '') 名称的前缀 .
policyPrefix可选
public readonly policyPrefix: string;
- 类型 : 字符串
IAM 政策和管理政策名称前缀(默认:"'").
rolePrefix可选
public readonly rolePrefix: string;
- 类型 : 字符串
一个预置到IAM角色(Default:"'")名称的前缀.
EcsIso 服务自动缩放程序
初始化器
import { EcsIsoServiceAutoscalerProps } from '@cdklabs/cdk-enterprise-iac'
const ecsIsoServiceAutoscalerProps: EcsIsoServiceAutoscalerProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
ecsCluster | aws-cdk-lib.aws_ecs.Cluster | 您想要扩展的服务所在的集群 . |
ecsService | aws-cdk-lib.aws_ecs.IService | 您想要扩展的ECS服务 . |
scaleAlarm | aws-cdk-lib.aws_cloudwatch.AlarmBase | 云表警报会引发规模化动作的被引用,无论它是否处于警报状态,都会决定规模上下动作. |
maximumTaskCount | number | 服务将扩展至的最大任务数 . |
minimumTaskCount | number | 服务将承担的最低任务数 . |
role | aws-cdk-lib.aws_iam.IRole | 可选的IAM角色附在所创建的Lambda上以调整ECS服务所期望的计数. |
scaleInCooldown | aws-cdk-lib.Duration | 申请要等多久才能执行另一个行动尺度. |
scaleInIncrement | number | 在提醒状态下规模化的任务数量 . |
scaleOutCooldown | aws-cdk-lib.Duration | 应用程序要等多久才能执行另一个缩放动作 . |
scaleOutIncrement | number | 规模化的提醒状态任务数量 . |
ecsCluster需求
public readonly ecsCluster: Cluster;
- 类型 : aws-cdk-lib.aws ecs. (原始内容存档于2018-10-12). 组
您想要扩展的服务所在的集群 .
ecsService需求
public readonly ecsService: IService;
- 类型 : aws-cdk-lib.aws ecs.IService (英语)
您想要扩展的ECS服务 .
scaleAlarm需求
public readonly scaleAlarm: AlarmBase;
- 类型 : aws-cdk-lib.aws cloudwatch. (原始内容存档于2018-09-27). 提醒库
云表警报会引发规模化动作的被引用,无论它是否处于警报状态,都会决定规模上下动作.
注意: 综合提醒无法在所有地区与 CFN 一起生成, 而允许您在综合提醒创建中通过, 不属于此构造的范围
maximumTaskCount可选
public readonly maximumTaskCount: number;
- 类型 : 编号
- 默认 : 10个
服务将扩展至的最大任务数 .
说明: 这并不能防止超出您账户允许的上限、设置该变量并适当管理账户配额.
minimumTaskCount可选
public readonly minimumTaskCount: number;
- 类型 : 编号
- 默认 : 1个
服务将承担的最低任务数 .
role可选
public readonly role: IRole;
- 类型 : aws-cdk-lib.aws iam (英语). 内弹
- 默认 : 给您创造了一个角色 以最小的特权IAM政策
可选的IAM角色附在所创建的Lambda上以调整ECS服务所期望的计数.
确保这一作用具有适当的特权。 实例IAM政策声明:
{
"PolicyDocument": {
"Statement": [
{
"Action": "cloudwatch:DescribeAlarms",
"Effect": "Allow",
"Resource": "*"
},
{
"Action": [
"ecs:DescribeServices",
"ecs:UpdateService"
],
"Condition": {
"StringEquals": {
"ecs:cluster": "arn:${Partition}:ecs:${Region}:${Account}:cluster/${ClusterName}"
}
},
"Effect": "Allow",
"Resource": "arn:${Partition}:ecs:${Region}:${Account}:service/${ClusterName}/${ServiceName}"
}
],
"Version": "2012-10-17"
}
}
scaleInCooldown可选
public readonly scaleInCooldown: Duration;
- 类型 : aws-cdk-lib (英语). 会期
- 默认 : 60秒钟
申请要等多久才能执行另一个行动尺度.
scaleInIncrement可选
public readonly scaleInIncrement: number;
- 类型 : 编号
- 默认 : 1个
在提醒状态下规模化的任务数量 .
scaleOutCooldown可选
public readonly scaleOutCooldown: Duration;
- 类型 : aws-cdk-lib (英语). 会期
- 默认 : 60秒钟
应用程序要等多久才能执行另一个缩放动作 .
scaleOutIncrement可选
public readonly scaleOutIncrement: number;
- 类型 : 编号
- 默认 : 1个
规模化的提醒状态任务数量 .
使用配置配置
初始化器
import { PopulateWithConfigProps } from '@cdklabs/cdk-enterprise-iac'
const populateWithConfigProps: PopulateWithConfigProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
localRouteTableId | string | 本地路由表ID,线路仅通向当地VPC. |
privateRouteTableId | string | 附有通往企业网络的路线的路线表的路由表ID. |
subnetConfig | SubnetConfig[] | 子网配置列表,用于提供. |
vpcId | string | 人身保护局的身份证规定需要有人居住. |
localRouteTableId需求
public readonly localRouteTableId: string;
- 类型 : 字符串
本地路由表ID,线路仅通向当地VPC.
privateRouteTableId需求
public readonly privateRouteTableId: string;
- 类型 : 字符串
附有通往企业网络的路线的路线表的路由表ID.
双子网Type.PUBLIC和子网Type.PRIVATE WITH EGRESS将使用此属性
subnetConfig需求
public readonly subnetConfig: SubnetConfig[];
- 类型 : 子网连接[
子网配置列表,用于提供.
vpcId需求
public readonly vpcId: string;
- 类型 : 字符串
人身保护局的身份证规定需要有人居住.
删除标签
初始化器
import { RemoveTagsProps } from '@cdklabs/cdk-enterprise-iac'
const removeTagsProps: RemoveTagsProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
cloudformationResource | string | 云形资源类型的名称(例如"AWS:Lambda::Function"). |
tagPropertyName | string | 要从资源中删除的标签属性名称 . |
cloudformationResource需求
public readonly cloudformationResource: string;
- 类型 : 字符串
云形资源类型的名称(例如"AWS:Lambda::Function").
tagPropertyName可选
public readonly tagPropertyName: string;
- 类型 : 字符串
- 默认 : 标记
要从资源中删除的标签属性名称 .
资源外传程序
初始化器
import { ResourceExtractorProps } from '@cdklabs/cdk-enterprise-iac'
const resourceExtractorProps: ResourceExtractorProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
extractDestinationStack | aws-cdk-lib.Stack | 堆栈可移动已找到的提取资源 . |
resourceTypesToExtract | string[] | 要提取的资源类型列表, 如 : AWS::IAM::Role。 。 。 . |
stackArtifacts | aws-cdk-lib.cx_api.CloudFormationStackArtifact[] | 从你的CDK应用程序合成的堆栈文物. |
additionalTransforms | {[ key: string ]: string} | 额外资源转型. |
valueShareMethod | ResourceExtractorShareMethod | 将“ Extraded Stack” 输出资源传递到原始堆栈时使用的共享方法 . |
extractDestinationStack需求
public readonly extractDestinationStack: Stack;
- 类型 : aws-cdk-lib (英语). 堆栈
堆栈可移动已找到的提取资源 .
resourceTypesToExtract需求
public readonly resourceTypesToExtract: string[];
- 类型 : 字符串 []
要提取的资源类型列表, 如 : AWS::IAM::Role。 。 。 .
stackArtifacts需求
public readonly stackArtifacts: CloudFormationStackArtifact[];
- 类型 : aws-cdk-lib.cx api. CloudFormation StackArtifact[] 互联网档案馆的存檔,存档日期2013-12-21
从你的CDK应用程序合成的堆栈文物.
additionalTransforms可选
public readonly additionalTransforms: {[ key: string ]: string};
- 类型 : {[键:字符串]:字符串}
额外资源转型.
valueShareMethod可选
public readonly valueShareMethod: ResourceExtractorShareMethod;
- 类型 : 资源Extractor 共享方法
将“ Extraded Stack” 输出资源传递到原始堆栈时使用的共享方法 .
设置 ApiGateway 终端配置
初始化器
import { SetApiGatewayEndpointConfigurationProps } from '@cdklabs/cdk-enterprise-iac'
const setApiGatewayEndpointConfigurationProps: SetApiGatewayEndpointConfigurationProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
endpointType | aws-cdk-lib.aws_apigateway.EndpointType | API Gateway 端点类型要覆盖到 . |
endpointType可选
public readonly endpointType: EndpointType;
- 类型 : aws-cdk-lib.aws apigateway. EndpointType (英语)
- 默认 : 端点Type.区域
API Gateway 端点类型要覆盖到 .
默认为 EndpointType.regional
分割 VpcEvenly 程序
初始化器
import { SplitVpcEvenlyProps } from '@cdklabs/cdk-enterprise-iac'
const splitVpcEvenlyProps: SplitVpcEvenlyProps = { ... }
属性
| 名称 | 类型 | 说明 |
|---|---|---|
routeTableId | string | 将附加到每个子网的路由表 ID . |
vpcCidr | string | CIDR的VPC范围 你正在流行. |
vpcId | string | 你试图填充的VPC的ID. |
cidrBits | string | cidrBits 参数 Fn::Cidr 云形内在功能. |
numberOfAzs | number | 要平分的 AZ 数 . |
subnetType | aws-cdk-lib.aws_ec2.SubnetType | 没有描述. |
routeTableId需求
public readonly routeTableId: string;
- 类型 : 字符串
将附加到每个子网的路由表 ID .
vpcCidr需求
public readonly vpcCidr: string;
- 类型 : 字符串
CIDR的VPC范围 你正在流行.
vpcId需求
public readonly vpcId: string;
- 类型 : 字符串
你试图填充的VPC的ID.
cidrBits可选
public readonly cidrBits: string;
- 类型 : 字符串
- 默认 : 六号
cidrBits 参数 Fn::Cidr 云形内在功能.