gpt4 book ai didi

amazon-web-services - 如何检查我的 CDK 堆栈中的所有资源是否都具有某些属性?

转载 作者:行者123 更新时间:2023-12-05 06:21:29 25 4
gpt4 key购买 nike

我是 AWS CDK 的新手。我刚刚发现了 aws-cdk/assert 模块,这是我深入研究测试驱动开发的一个很好的理由。我现在的主要困难是我不完全了解如何测试某种类型的所有资源是否都通过了测试。我只能测试是否有任何资源匹配。

现在我有 expectCDK(stack).to(countResources('AWS::S3::Bucket', 2)) 的组合,看看我是否产生了预期数量的桶,接下来是两个单独的测试,以检查它们是否都是私有(private)和加密的。

如果我使用下面的代码,它将通过,因为它只是查找任何匹配的资源(二选一)

expectCDK(stack).to(haveResource('AWS::S3::Bucket', {
"AccessControl": "Private",
"BucketEncryption": {
"ServerSideEncryptionConfiguration": [
{
"ServerSideEncryptionByDefault": {
"SSEAlgorithm": "AES256"
}
}
]
},
"VersioningConfiguration": {
"Status": "Enabled"
}
}))

现在只有两个测试桶,但我想稍后对 IAM 角色进行“最小权限原则”检查。鉴于解决方案可以有很多不同的角色,我不想跳过其中任何一个。

有没有一种聪明的方法来测试我的所有存储桶是否都是私有(private)和加密的?我不介意编写测试合成模板,但我觉得 expectCDK 更接近源代码。

最佳答案

我能够稍微复杂一点地完成此任务:

  test("no s3 buckets should be public", () => {
expect(stack).not.toHaveResourceLike("AWS::S3::Bucket", {
PublicAccessBlockConfiguration: ABSENT,
});

expect(stack).not.toHaveResourceLike("AWS::S3::Bucket", {
PublicAccessBlockConfiguration: notMatching(
exactValue({
BlockPublicAcls: true,
BlockPublicPolicy: true,
IgnorePublicAcls: true,
RestrictPublicBuckets: true,
})
),
});
});

test("all s3 buckets should be s3_managed encrypted", () => {
expect(stack).not.toHaveResourceLike("AWS::S3::Bucket", {
BucketEncryption: ABSENT,
});

expect(stack).not.toHaveResourceLike("AWS::S3::Bucket", {
BucketEncryption: notMatching(
exactValue({
ServerSideEncryptionConfiguration: [
{
ServerSideEncryptionByDefault: {
SSEAlgorithm: "AES256",
},
},
],
})
),
});
});

关于amazon-web-services - 如何检查我的 CDK 堆栈中的所有资源是否都具有某些属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59832223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com