标题可能很模糊,所以让我澄清一下。我目前正在尝试启用AWSConfig规则,为了做到这一点,帐户必须有AWSConfigurationRecorder和AWSDeliveryChannel。问题在于,当帐户已启用此功能时,它将在尝试部署时将整个堆栈出错。我试图找出一种方法来创建逻辑,从本质上检查AWSConfigurationRecorder或AWSDeliveryChannel是否已经存在,以及它们是否要跳过它,只部署规则,而visa则相反。以下是代码:
export class fullConfigStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const globalConfigRole = new iam.Role(this, 'globalConfigRole', {
assumedBy: new iam.ServicePrincipal('config.amazonaws.com'), // required
});
globalConfigRole.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('service-role/AWSConfigRoleForOrganizations'));
globalConfigRole.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('ReadOnlyAccess'));
const globalConfigRecorder = new config.CfnConfigurationRecorder(this, 'globalConfigRecorder',{
roleArn: globalConfigRole.roleArn,
name: 'globalConfigRecorder',
recordingGroup: {
allSupported: true,
includeGlobalResourceTypes: true
}
});
const globalConfigBucket = new s3.Bucket(this, 'globalConfigBucket',{
accessControl: s3.BucketAccessControl.LOG_DELIVERY_WRITE
});
const cisConfigDeliveryChannel = new config.CfnDeliveryChannel(this,'cisConfigDeliveryChannel',{
s3BucketName: globalConfigBucket.bucketName,
configSnapshotDeliveryProperties: {
deliveryFrequency: 'TwentyFour_Hours'
}
});
const generalConfigRole = new iam.Role(this, 'generalConfigRole',{
assumedBy: new iam.ServicePrincipal('config.amazonaws.com')
});
const cloudTrailEnabledRule = new ManagedRule(this, 'cloudTrailEnabledRule', {
identifier: 'CLOUD_TRAIL_ENABLED'
});因此,为了再次澄清,我想在cisConfigDeliveryChannel和globalConfigRecorder中添加一些if/ out逻辑,以避免整个堆栈出错!如果有其他办法解决这个问题,我没有看到,请告诉我!
发布于 2020-10-21 20:15:52
在AWS CloudFormation模板中,您可以使用一个函数来检查您的资源是否存在。然后,此Lambda函数返回CloudFormation的标识符,以确定是否需要创建资源。
https://stackoverflow.com/questions/64470966
复制相似问题