断言资源没有属性
Assert resources do not have properties
您好,我想知道是否有推荐的模式来断言某些资源在 CDK 中没有属性。例如,如果您正在定义 IAM 策略,并且您希望在使用 CDK 中的 /assertions 包的测试中强制不定义通配符,那么“正确”的方法是什么?根据 Matcher.objectLike 创建您自己的匹配器,它执行相反的操作?
示例 IAM 定义
// this would be fine
const secretsManagerReadAccess = new iam.PolicyStatement({
actions: ['SecretsManager:GetSecretValue'],
resources: ['arn:aws:secretsmanager:us-east-1:ACCOUNTID:secret:SECRET_NAME'],
});
// this should blow up in a test
const secretsManagerWildcardAccess = new iam.PolicyStatement({
actions: ['SecretsManager:*'],
resources: ['arn:aws:secretsmanager:us-east-1:ACCOUNTID:secret:*'],
});
// the worst possible, probably not written correctly but you get the idea
const everything = new iam.PolicyStatement({
actions: ['*:*'],
resources: ['arn:aws:*:us-east-1:ACCOUNTID:*:*'],
});
编辑:我想更好的表达方式是,您如何将 CDK 定义中的某些模式列入黑名单?
您可以链接 Matchers,并且可以使用 Captures 构建模式过滤器。
const actionCapture = new Capture();
template.hasResourceProperties(
"AWS::IAM::Role",
Match.not(Match.objectLike({
PolicyDocument: {
Statement: [
{
Action: actionCapture,
},
],
},
}))
);
expect(actionCapture.asString()).toEqual(expect.not.stringContaining("*"));
有关更多示例,请参阅 Developer Guide。
您好,我想知道是否有推荐的模式来断言某些资源在 CDK 中没有属性。例如,如果您正在定义 IAM 策略,并且您希望在使用 CDK 中的 /assertions 包的测试中强制不定义通配符,那么“正确”的方法是什么?根据 Matcher.objectLike 创建您自己的匹配器,它执行相反的操作?
示例 IAM 定义
// this would be fine
const secretsManagerReadAccess = new iam.PolicyStatement({
actions: ['SecretsManager:GetSecretValue'],
resources: ['arn:aws:secretsmanager:us-east-1:ACCOUNTID:secret:SECRET_NAME'],
});
// this should blow up in a test
const secretsManagerWildcardAccess = new iam.PolicyStatement({
actions: ['SecretsManager:*'],
resources: ['arn:aws:secretsmanager:us-east-1:ACCOUNTID:secret:*'],
});
// the worst possible, probably not written correctly but you get the idea
const everything = new iam.PolicyStatement({
actions: ['*:*'],
resources: ['arn:aws:*:us-east-1:ACCOUNTID:*:*'],
});
编辑:我想更好的表达方式是,您如何将 CDK 定义中的某些模式列入黑名单?
您可以链接 Matchers,并且可以使用 Captures 构建模式过滤器。
const actionCapture = new Capture();
template.hasResourceProperties(
"AWS::IAM::Role",
Match.not(Match.objectLike({
PolicyDocument: {
Statement: [
{
Action: actionCapture,
},
],
},
}))
);
expect(actionCapture.asString()).toEqual(expect.not.stringContaining("*"));
有关更多示例,请参阅 Developer Guide。