断言资源没有属性

Posted

技术标签:

【中文标题】断言资源没有属性【英文标题】:Assert resources do not have properties 【发布时间】:2022-01-17 02:44:59 【问题描述】:

您好,我想知道是否有推荐的模式来断言某些资源在 CDK 中没有属性。例如,如果您正在定义 IAM 策略,并且希望在使用 CDK 中的 /assertions 包的测试中强制不定义通配符,那么“正确”的方法是什么?根据 Matcher.object 制作自己的匹配器,反之亦然?

示例 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 定义中的某些模式列入黑名单?

【问题讨论】:

【参考方案1】:

你可以链接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。

【讨论】:

以上是关于断言资源没有属性的主要内容,如果未能解决你的问题,请参考以下文章

<URL> 处的跨站点资源设置为没有 `SameSite` 属性 .NET

资源 'data.template_file.user_data' 没有属性 'rendered'

Laravel API 资源隐藏键

docker上的Spring启动无法从资源中读取属性文件,但可以在没有Docker的情况下使用java -jar

断言错误:传入的类型不是 ComponentType,它没有 'ɵcmp' 属性

如何检索资源的 og/meta 属性?