@aws-cdk-testing/cli-integ 3.28.0 → 3.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -8
- package/lib/assertions.d.ts +14 -0
- package/lib/assertions.js +29 -0
- package/lib/shell.d.ts +6 -0
- package/lib/shell.js +2 -2
- package/lib/with-sam.js +3 -8
- package/npm-shrinkwrap.json +110 -179
- package/package.json +2 -3
- package/resources/cdk-apps/guard-hook-app/app.js +99 -0
- package/resources/cdk-apps/guard-hook-app/cdk.json +4 -0
- package/resources/cdk-apps/nested-stack-with-iam/app.js +38 -0
- package/resources/cdk-apps/nested-stack-with-iam/cdk.json +7 -0
- package/resources/cdk-apps/tty-app/app.js +29 -0
- package/resources/cdk-apps/tty-app/cdk.json +4 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.js +19 -0
- package/tests/cli-integ-tests/deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.js +36 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.js +13 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-doubly-nested-stacks.integtest.js +16 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---method-change-set-with-nested-stacks-through-full-lifecycle.integtest.js +30 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only--method-change-set-detects-security-changes-in-nested-stacks.integtest.js +15 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/diff/cdk-cdk-diff---security-only-detects-security-changes-in-nested-stacks.integtest.js +15 -0
- package/tests/cli-integ-tests/output/cdk-apps-must-have-terminal.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/output/cdk-apps-must-have-terminal.integtest.js +11 -0
- package/tests/cli-integ-tests/output/cdk-ci-output-to-stderr.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/output/cdk-ci-true-output-to-stdout.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-idempotent-and-force.integtest.js +18 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-then-deploy.integtest.js +17 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.d.ts +1 -0
- package/tests/cli-integ-tests/publish-assets/cdk-publish-assets-without-deploying.integtest.js +15 -0
- package/tests/telemetry-integ-tests/cdk-synth-telemetry.integtest.js +4 -1
- package/tests/cli-integ-tests/deploy/cdk-fast-deploy.integtest.js +0 -33
- /package/tests/cli-integ-tests/{ci-output/cdk-ci-output-to-stderr.integtest.d.ts → deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.d.ts} +0 -0
- /package/tests/cli-integ-tests/{ci-output/cdk-ci-true-output-to-stdout.integtest.d.ts → deploy/cdk-deploy-skips-unnecessary-updates-for-nested-stacks.integtest.d.ts} +0 -0
- /package/tests/cli-integ-tests/{deploy/cdk-fast-deploy.integtest.d.ts → diff/cdk-cdk-diff---method-change-set-can-be-run-twice-on-a-new-stack.integtest.d.ts} +0 -0
- /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-output-to-stderr.integtest.js +0 -0
- /package/tests/cli-integ-tests/{ci-output → output}/cdk-ci-true-output-to-stdout.integtest.js +0 -0
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk-testing/cli-integ",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.29.0",
|
|
4
4
|
"lockfileVersion": 1,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"dependencies": {
|
|
@@ -646,16 +646,6 @@
|
|
|
646
646
|
"tslib": "^2.6.2"
|
|
647
647
|
}
|
|
648
648
|
},
|
|
649
|
-
"axios": {
|
|
650
|
-
"version": "1.14.0",
|
|
651
|
-
"integrity": "sha512-3Y8yrqLSwjuzpXuZ0oIYZ/XGgLwUIBU3uLvbcpb0pidD9ctpShJd43KSlEEkVQg6DS0G9NKyzOvBfUtDKEyHvQ==",
|
|
652
|
-
"resolved": "https://registry.yarnpkg.com/axios/-/axios-1.14.0.tgz#7c29f4cf2ea91ef05018d5aa5399bf23ed3120eb",
|
|
653
|
-
"requires": {
|
|
654
|
-
"follow-redirects": "^1.15.11",
|
|
655
|
-
"form-data": "^4.0.5",
|
|
656
|
-
"proxy-from-env": "^2.1.0"
|
|
657
|
-
}
|
|
658
|
-
},
|
|
659
649
|
"chalk": {
|
|
660
650
|
"version": "4.1.2",
|
|
661
651
|
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
|
|
@@ -884,11 +874,6 @@
|
|
|
884
874
|
"pac-proxy-agent": "8.0.0"
|
|
885
875
|
},
|
|
886
876
|
"dependencies": {
|
|
887
|
-
"proxy-from-env": {
|
|
888
|
-
"version": "1.1.0",
|
|
889
|
-
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
|
890
|
-
"resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
|
891
|
-
},
|
|
892
877
|
"https-proxy-agent": {
|
|
893
878
|
"version": "8.0.0",
|
|
894
879
|
"integrity": "sha512-YYeW+iCnAS3xhvj2dvVoWgsbca3RfQy/IlaNHHOtDmU0jMqPI9euIq3Y9BJETdxk16h9NHHCKqp/KB9nIMStCQ==",
|
|
@@ -1988,28 +1973,6 @@
|
|
|
1988
1973
|
"@smithy/types": "^4.13.1"
|
|
1989
1974
|
}
|
|
1990
1975
|
},
|
|
1991
|
-
"follow-redirects": {
|
|
1992
|
-
"version": "1.15.11",
|
|
1993
|
-
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
|
1994
|
-
"resolved": "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340"
|
|
1995
|
-
},
|
|
1996
|
-
"form-data": {
|
|
1997
|
-
"version": "4.0.5",
|
|
1998
|
-
"integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==",
|
|
1999
|
-
"resolved": "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053",
|
|
2000
|
-
"requires": {
|
|
2001
|
-
"asynckit": "^0.4.0",
|
|
2002
|
-
"combined-stream": "^1.0.8",
|
|
2003
|
-
"es-set-tostringtag": "^2.1.0",
|
|
2004
|
-
"hasown": "^2.0.2",
|
|
2005
|
-
"mime-types": "^2.1.12"
|
|
2006
|
-
}
|
|
2007
|
-
},
|
|
2008
|
-
"proxy-from-env": {
|
|
2009
|
-
"version": "2.1.0",
|
|
2010
|
-
"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
|
|
2011
|
-
"resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz#a7487568adad577cfaaa7e88c49cab3ab3081aba"
|
|
2012
|
-
},
|
|
2013
1976
|
"ansi-styles": {
|
|
2014
1977
|
"version": "4.3.0",
|
|
2015
1978
|
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
|
@@ -3360,6 +3323,11 @@
|
|
|
3360
3323
|
"ms": "^2.1.3"
|
|
3361
3324
|
}
|
|
3362
3325
|
},
|
|
3326
|
+
"proxy-from-env": {
|
|
3327
|
+
"version": "1.1.0",
|
|
3328
|
+
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
|
3329
|
+
"resolved": "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
|
|
3330
|
+
},
|
|
3363
3331
|
"agent-base": {
|
|
3364
3332
|
"version": "8.0.0",
|
|
3365
3333
|
"integrity": "sha512-QT8i0hCz6C/KQ+KTAbSNwCHDGdmUJl2tp2ZpNlGSWCfhUNVbYG2WLE3MdZGBAgXPV4GAvjGMxo+C1hroyxmZEg==",
|
|
@@ -3827,46 +3795,6 @@
|
|
|
3827
3795
|
"integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==",
|
|
3828
3796
|
"resolved": "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa"
|
|
3829
3797
|
},
|
|
3830
|
-
"asynckit": {
|
|
3831
|
-
"version": "0.4.0",
|
|
3832
|
-
"integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",
|
|
3833
|
-
"resolved": "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
|
3834
|
-
},
|
|
3835
|
-
"combined-stream": {
|
|
3836
|
-
"version": "1.0.8",
|
|
3837
|
-
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
|
3838
|
-
"resolved": "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f",
|
|
3839
|
-
"requires": {
|
|
3840
|
-
"delayed-stream": "~1.0.0"
|
|
3841
|
-
}
|
|
3842
|
-
},
|
|
3843
|
-
"es-set-tostringtag": {
|
|
3844
|
-
"version": "2.1.0",
|
|
3845
|
-
"integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",
|
|
3846
|
-
"resolved": "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d",
|
|
3847
|
-
"requires": {
|
|
3848
|
-
"es-errors": "^1.3.0",
|
|
3849
|
-
"get-intrinsic": "^1.2.6",
|
|
3850
|
-
"has-tostringtag": "^1.0.2",
|
|
3851
|
-
"hasown": "^2.0.2"
|
|
3852
|
-
}
|
|
3853
|
-
},
|
|
3854
|
-
"hasown": {
|
|
3855
|
-
"version": "2.0.2",
|
|
3856
|
-
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
|
3857
|
-
"resolved": "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003",
|
|
3858
|
-
"requires": {
|
|
3859
|
-
"function-bind": "^1.1.2"
|
|
3860
|
-
}
|
|
3861
|
-
},
|
|
3862
|
-
"mime-types": {
|
|
3863
|
-
"version": "2.1.35",
|
|
3864
|
-
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
|
3865
|
-
"resolved": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a",
|
|
3866
|
-
"requires": {
|
|
3867
|
-
"mime-db": "1.52.0"
|
|
3868
|
-
}
|
|
3869
|
-
},
|
|
3870
3798
|
"color-convert": {
|
|
3871
3799
|
"version": "2.0.1",
|
|
3872
3800
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
@@ -5432,51 +5360,6 @@
|
|
|
5432
5360
|
"integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==",
|
|
5433
5361
|
"resolved": "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3"
|
|
5434
5362
|
},
|
|
5435
|
-
"delayed-stream": {
|
|
5436
|
-
"version": "1.0.0",
|
|
5437
|
-
"integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
|
|
5438
|
-
"resolved": "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
|
5439
|
-
},
|
|
5440
|
-
"es-errors": {
|
|
5441
|
-
"version": "1.3.0",
|
|
5442
|
-
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
|
5443
|
-
"resolved": "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
|
5444
|
-
},
|
|
5445
|
-
"get-intrinsic": {
|
|
5446
|
-
"version": "1.3.0",
|
|
5447
|
-
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
|
5448
|
-
"resolved": "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01",
|
|
5449
|
-
"requires": {
|
|
5450
|
-
"call-bind-apply-helpers": "^1.0.2",
|
|
5451
|
-
"es-define-property": "^1.0.1",
|
|
5452
|
-
"es-errors": "^1.3.0",
|
|
5453
|
-
"es-object-atoms": "^1.1.1",
|
|
5454
|
-
"function-bind": "^1.1.2",
|
|
5455
|
-
"get-proto": "^1.0.1",
|
|
5456
|
-
"gopd": "^1.2.0",
|
|
5457
|
-
"has-symbols": "^1.1.0",
|
|
5458
|
-
"hasown": "^2.0.2",
|
|
5459
|
-
"math-intrinsics": "^1.1.0"
|
|
5460
|
-
}
|
|
5461
|
-
},
|
|
5462
|
-
"has-tostringtag": {
|
|
5463
|
-
"version": "1.0.2",
|
|
5464
|
-
"integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
|
|
5465
|
-
"resolved": "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc",
|
|
5466
|
-
"requires": {
|
|
5467
|
-
"has-symbols": "^1.0.3"
|
|
5468
|
-
}
|
|
5469
|
-
},
|
|
5470
|
-
"function-bind": {
|
|
5471
|
-
"version": "1.1.2",
|
|
5472
|
-
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
|
5473
|
-
"resolved": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
|
5474
|
-
},
|
|
5475
|
-
"mime-db": {
|
|
5476
|
-
"version": "1.52.0",
|
|
5477
|
-
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
5478
|
-
"resolved": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
|
5479
|
-
},
|
|
5480
5363
|
"color-name": {
|
|
5481
5364
|
"version": "1.1.4",
|
|
5482
5365
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
@@ -6260,6 +6143,14 @@
|
|
|
6260
6143
|
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
|
6261
6144
|
"resolved": "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
|
6262
6145
|
},
|
|
6146
|
+
"mime-types": {
|
|
6147
|
+
"version": "2.1.35",
|
|
6148
|
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
|
6149
|
+
"resolved": "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a",
|
|
6150
|
+
"requires": {
|
|
6151
|
+
"mime-db": "1.52.0"
|
|
6152
|
+
}
|
|
6153
|
+
},
|
|
6263
6154
|
"whatwg-url": {
|
|
6264
6155
|
"version": "5.0.0",
|
|
6265
6156
|
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
|
|
@@ -6440,52 +6331,6 @@
|
|
|
6440
6331
|
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
|
|
6441
6332
|
"resolved": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
|
6442
6333
|
},
|
|
6443
|
-
"call-bind-apply-helpers": {
|
|
6444
|
-
"version": "1.0.2",
|
|
6445
|
-
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
|
6446
|
-
"resolved": "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6",
|
|
6447
|
-
"requires": {
|
|
6448
|
-
"es-errors": "^1.3.0",
|
|
6449
|
-
"function-bind": "^1.1.2"
|
|
6450
|
-
}
|
|
6451
|
-
},
|
|
6452
|
-
"es-define-property": {
|
|
6453
|
-
"version": "1.0.1",
|
|
6454
|
-
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
|
6455
|
-
"resolved": "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
|
6456
|
-
},
|
|
6457
|
-
"es-object-atoms": {
|
|
6458
|
-
"version": "1.1.1",
|
|
6459
|
-
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
|
6460
|
-
"resolved": "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1",
|
|
6461
|
-
"requires": {
|
|
6462
|
-
"es-errors": "^1.3.0"
|
|
6463
|
-
}
|
|
6464
|
-
},
|
|
6465
|
-
"get-proto": {
|
|
6466
|
-
"version": "1.0.1",
|
|
6467
|
-
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
|
6468
|
-
"resolved": "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1",
|
|
6469
|
-
"requires": {
|
|
6470
|
-
"dunder-proto": "^1.0.1",
|
|
6471
|
-
"es-object-atoms": "^1.0.0"
|
|
6472
|
-
}
|
|
6473
|
-
},
|
|
6474
|
-
"gopd": {
|
|
6475
|
-
"version": "1.2.0",
|
|
6476
|
-
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
|
6477
|
-
"resolved": "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
|
6478
|
-
},
|
|
6479
|
-
"has-symbols": {
|
|
6480
|
-
"version": "1.1.0",
|
|
6481
|
-
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
|
6482
|
-
"resolved": "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
|
6483
|
-
},
|
|
6484
|
-
"math-intrinsics": {
|
|
6485
|
-
"version": "1.1.0",
|
|
6486
|
-
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
|
6487
|
-
"resolved": "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
|
6488
|
-
},
|
|
6489
6334
|
"queue-microtask": {
|
|
6490
6335
|
"version": "1.2.3",
|
|
6491
6336
|
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
|
|
@@ -7111,6 +6956,11 @@
|
|
|
7111
6956
|
"integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
|
|
7112
6957
|
"resolved": "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
|
|
7113
6958
|
},
|
|
6959
|
+
"es-errors": {
|
|
6960
|
+
"version": "1.3.0",
|
|
6961
|
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
|
6962
|
+
"resolved": "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
|
|
6963
|
+
},
|
|
7114
6964
|
"object-inspect": {
|
|
7115
6965
|
"version": "1.13.4",
|
|
7116
6966
|
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
|
|
@@ -7148,6 +6998,11 @@
|
|
|
7148
6998
|
"side-channel-map": "^1.0.1"
|
|
7149
6999
|
}
|
|
7150
7000
|
},
|
|
7001
|
+
"mime-db": {
|
|
7002
|
+
"version": "1.52.0",
|
|
7003
|
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
|
7004
|
+
"resolved": "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
|
7005
|
+
},
|
|
7151
7006
|
"tr46": {
|
|
7152
7007
|
"version": "0.0.3",
|
|
7153
7008
|
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
|
|
@@ -7191,16 +7046,6 @@
|
|
|
7191
7046
|
"integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==",
|
|
7192
7047
|
"resolved": "https://registry.yarnpkg.com/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz#a52f61a3d7374833fca945b2549bc30a2dd40d0a"
|
|
7193
7048
|
},
|
|
7194
|
-
"dunder-proto": {
|
|
7195
|
-
"version": "1.0.1",
|
|
7196
|
-
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
|
7197
|
-
"resolved": "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a",
|
|
7198
|
-
"requires": {
|
|
7199
|
-
"call-bind-apply-helpers": "^1.0.1",
|
|
7200
|
-
"es-errors": "^1.3.0",
|
|
7201
|
-
"gopd": "^1.2.0"
|
|
7202
|
-
}
|
|
7203
|
-
},
|
|
7204
7049
|
"is-number": {
|
|
7205
7050
|
"version": "7.0.0",
|
|
7206
7051
|
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
|
@@ -7325,6 +7170,14 @@
|
|
|
7325
7170
|
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
|
|
7326
7171
|
"resolved": "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
|
|
7327
7172
|
},
|
|
7173
|
+
"hasown": {
|
|
7174
|
+
"version": "2.0.2",
|
|
7175
|
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
|
7176
|
+
"resolved": "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003",
|
|
7177
|
+
"requires": {
|
|
7178
|
+
"function-bind": "^1.1.2"
|
|
7179
|
+
}
|
|
7180
|
+
},
|
|
7328
7181
|
"p-locate": {
|
|
7329
7182
|
"version": "4.1.0",
|
|
7330
7183
|
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
|
|
@@ -7352,6 +7205,23 @@
|
|
|
7352
7205
|
"get-intrinsic": "^1.3.0"
|
|
7353
7206
|
}
|
|
7354
7207
|
},
|
|
7208
|
+
"get-intrinsic": {
|
|
7209
|
+
"version": "1.3.0",
|
|
7210
|
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
|
7211
|
+
"resolved": "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01",
|
|
7212
|
+
"requires": {
|
|
7213
|
+
"call-bind-apply-helpers": "^1.0.2",
|
|
7214
|
+
"es-define-property": "^1.0.1",
|
|
7215
|
+
"es-errors": "^1.3.0",
|
|
7216
|
+
"es-object-atoms": "^1.1.1",
|
|
7217
|
+
"function-bind": "^1.1.2",
|
|
7218
|
+
"get-proto": "^1.0.1",
|
|
7219
|
+
"gopd": "^1.2.0",
|
|
7220
|
+
"has-symbols": "^1.1.0",
|
|
7221
|
+
"hasown": "^2.0.2",
|
|
7222
|
+
"math-intrinsics": "^1.1.0"
|
|
7223
|
+
}
|
|
7224
|
+
},
|
|
7355
7225
|
"estraverse": {
|
|
7356
7226
|
"version": "5.3.0",
|
|
7357
7227
|
"integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
|
|
@@ -7409,6 +7279,57 @@
|
|
|
7409
7279
|
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
|
|
7410
7280
|
"resolved": "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
|
7411
7281
|
},
|
|
7282
|
+
"function-bind": {
|
|
7283
|
+
"version": "1.1.2",
|
|
7284
|
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
|
7285
|
+
"resolved": "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
|
|
7286
|
+
},
|
|
7287
|
+
"call-bind-apply-helpers": {
|
|
7288
|
+
"version": "1.0.2",
|
|
7289
|
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
|
7290
|
+
"resolved": "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6",
|
|
7291
|
+
"requires": {
|
|
7292
|
+
"es-errors": "^1.3.0",
|
|
7293
|
+
"function-bind": "^1.1.2"
|
|
7294
|
+
}
|
|
7295
|
+
},
|
|
7296
|
+
"es-define-property": {
|
|
7297
|
+
"version": "1.0.1",
|
|
7298
|
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
|
7299
|
+
"resolved": "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
|
|
7300
|
+
},
|
|
7301
|
+
"es-object-atoms": {
|
|
7302
|
+
"version": "1.1.1",
|
|
7303
|
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
|
7304
|
+
"resolved": "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1",
|
|
7305
|
+
"requires": {
|
|
7306
|
+
"es-errors": "^1.3.0"
|
|
7307
|
+
}
|
|
7308
|
+
},
|
|
7309
|
+
"get-proto": {
|
|
7310
|
+
"version": "1.0.1",
|
|
7311
|
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
|
7312
|
+
"resolved": "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1",
|
|
7313
|
+
"requires": {
|
|
7314
|
+
"dunder-proto": "^1.0.1",
|
|
7315
|
+
"es-object-atoms": "^1.0.0"
|
|
7316
|
+
}
|
|
7317
|
+
},
|
|
7318
|
+
"gopd": {
|
|
7319
|
+
"version": "1.2.0",
|
|
7320
|
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
|
7321
|
+
"resolved": "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
|
|
7322
|
+
},
|
|
7323
|
+
"has-symbols": {
|
|
7324
|
+
"version": "1.1.0",
|
|
7325
|
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
|
7326
|
+
"resolved": "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
|
|
7327
|
+
},
|
|
7328
|
+
"math-intrinsics": {
|
|
7329
|
+
"version": "1.1.0",
|
|
7330
|
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
|
7331
|
+
"resolved": "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
|
|
7332
|
+
},
|
|
7412
7333
|
"sprintf-js": {
|
|
7413
7334
|
"version": "1.0.3",
|
|
7414
7335
|
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
|
|
@@ -7418,6 +7339,16 @@
|
|
|
7418
7339
|
"version": "2.2.0",
|
|
7419
7340
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
|
7420
7341
|
"resolved": "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
|
|
7342
|
+
},
|
|
7343
|
+
"dunder-proto": {
|
|
7344
|
+
"version": "1.0.1",
|
|
7345
|
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
|
7346
|
+
"resolved": "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a",
|
|
7347
|
+
"requires": {
|
|
7348
|
+
"call-bind-apply-helpers": "^1.0.1",
|
|
7349
|
+
"es-errors": "^1.3.0",
|
|
7350
|
+
"gopd": "^1.2.0"
|
|
7351
|
+
}
|
|
7421
7352
|
}
|
|
7422
7353
|
}
|
|
7423
7354
|
}
|
package/package.json
CHANGED
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"organization": true
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@aws-cdk/toolkit-lib": "1.
|
|
42
|
+
"@aws-cdk/toolkit-lib": "1.21.0",
|
|
43
43
|
"@aws-cdk/yarn-cling": "0.0.0",
|
|
44
44
|
"@cdklabs/eslint-plugin": "^1.5.9",
|
|
45
45
|
"@stylistic/eslint-plugin": "^3",
|
|
@@ -84,7 +84,6 @@
|
|
|
84
84
|
"@octokit/rest": "^20",
|
|
85
85
|
"@smithy/types": "^4.13.1",
|
|
86
86
|
"@smithy/util-retry": "^4.2.12",
|
|
87
|
-
"axios": "^1",
|
|
88
87
|
"chalk": "^4",
|
|
89
88
|
"fast-glob": "^3.3.3",
|
|
90
89
|
"fs-extra": "^9",
|
|
@@ -116,7 +115,7 @@
|
|
|
116
115
|
"publishConfig": {
|
|
117
116
|
"access": "public"
|
|
118
117
|
},
|
|
119
|
-
"version": "3.
|
|
118
|
+
"version": "3.29.0",
|
|
120
119
|
"types": "lib/index.d.ts",
|
|
121
120
|
"//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"npx projen\"."
|
|
122
121
|
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
const cdk = require('aws-cdk-lib/core');
|
|
2
|
+
const s3 = require('aws-cdk-lib/aws-s3');
|
|
3
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
4
|
+
const s3deploy = require('aws-cdk-lib/aws-s3-deployment');
|
|
5
|
+
|
|
6
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
7
|
+
if (!stackPrefix) {
|
|
8
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const guardRuleKey = 'rules/AWS_S3_Bucket_AccessControl.guard';
|
|
12
|
+
|
|
13
|
+
const guardRuleContent = `rule AWS_S3_Bucket_AccessControl
|
|
14
|
+
{
|
|
15
|
+
let resources = Resources.*[ Type == "AWS::S3::Bucket" ]
|
|
16
|
+
%resources[*] {
|
|
17
|
+
Properties.AccessControl not exists
|
|
18
|
+
<<
|
|
19
|
+
AccessControl is deprecated
|
|
20
|
+
>>
|
|
21
|
+
}
|
|
22
|
+
}`;
|
|
23
|
+
|
|
24
|
+
// Setup Guard Hook that will evaluate and fail the test stack
|
|
25
|
+
class GuardHookSetupStack extends cdk.Stack {
|
|
26
|
+
constructor(scope, id, props) {
|
|
27
|
+
super(scope, id, props);
|
|
28
|
+
|
|
29
|
+
// S3 bucket for Guard rules
|
|
30
|
+
const rulesBucket = new s3.Bucket(this, 'RulesBucket', {
|
|
31
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
32
|
+
autoDeleteObjects: true,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// S3 bucket for Guard logs
|
|
36
|
+
const logsBucket = new s3.Bucket(this, 'LogsBucket', {
|
|
37
|
+
removalPolicy: cdk.RemovalPolicy.DESTROY,
|
|
38
|
+
autoDeleteObjects: true,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
// Upload Guard rule to rules bucket
|
|
42
|
+
new s3deploy.BucketDeployment(this, 'UploadGuardRule', {
|
|
43
|
+
sources: [s3deploy.Source.data(guardRuleKey, guardRuleContent)],
|
|
44
|
+
destinationBucket: rulesBucket,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// IAM role for Guard Hook execution
|
|
48
|
+
const hookRole = new iam.Role(this, 'GuardHookExecutionRole', {
|
|
49
|
+
assumedBy: new iam.ServicePrincipal('hooks.cloudformation.amazonaws.com'),
|
|
50
|
+
});
|
|
51
|
+
hookRole.addToPolicy(new iam.PolicyStatement({
|
|
52
|
+
effect: iam.Effect.ALLOW,
|
|
53
|
+
actions: ['s3:ListBucket', 's3:GetObject', 's3:GetObjectVersion'],
|
|
54
|
+
resources: [rulesBucket.bucketArn, rulesBucket.arnForObjects('*')],
|
|
55
|
+
}));
|
|
56
|
+
hookRole.addToPolicy(new iam.PolicyStatement({
|
|
57
|
+
effect: iam.Effect.ALLOW,
|
|
58
|
+
actions: ['s3:PutObject'],
|
|
59
|
+
resources: [logsBucket.arnForObjects('*')],
|
|
60
|
+
}));
|
|
61
|
+
|
|
62
|
+
// Guard Hook - activates and configures the AWS Guard Hook in this account/region
|
|
63
|
+
new cdk.CfnGuardHook(this, 'GuardHook', {
|
|
64
|
+
alias: 'Private::Guard::TestHook',
|
|
65
|
+
executionRole: hookRole.roleArn,
|
|
66
|
+
failureMode: 'FAIL',
|
|
67
|
+
hookStatus: 'ENABLED',
|
|
68
|
+
ruleLocation: {
|
|
69
|
+
uri: `s3://${rulesBucket.bucketName}/${guardRuleKey}`,
|
|
70
|
+
},
|
|
71
|
+
logBucket: logsBucket.bucketName,
|
|
72
|
+
targetOperations: ['RESOURCE'],
|
|
73
|
+
stackFilters: {
|
|
74
|
+
filteringCriteria: "ANY",
|
|
75
|
+
stackNames: {
|
|
76
|
+
// Do not evalute this stack with the hook
|
|
77
|
+
exclude: [cdk.Aws.STACK_NAME]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
class GuardHookTestStack extends cdk.Stack {
|
|
85
|
+
constructor(scope, id, props) {
|
|
86
|
+
super(scope, id, props);
|
|
87
|
+
|
|
88
|
+
// This bucket violates the Guard rule by using the deprecated AccessControl property
|
|
89
|
+
new s3.CfnBucket(this, 'NonCompliantBucket', {
|
|
90
|
+
accessControl: 'Private',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const app = new cdk.App();
|
|
96
|
+
new GuardHookSetupStack(app, `${stackPrefix}-guard-hook-setup`);
|
|
97
|
+
new GuardHookTestStack(app, `${stackPrefix}-guard-hook-test`);
|
|
98
|
+
|
|
99
|
+
app.synth();
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const { Stack, App } = require('aws-cdk-lib/core');
|
|
2
|
+
const { NestedStack } = require('aws-cdk-lib/aws-cloudformation');
|
|
3
|
+
const iam = require('aws-cdk-lib/aws-iam');
|
|
4
|
+
const sns = require('aws-cdk-lib/aws-sns');
|
|
5
|
+
|
|
6
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
7
|
+
if (!stackPrefix) {
|
|
8
|
+
throw new Error('the STACK_NAME_PREFIX environment variable is required');
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
class IamNestedStack extends NestedStack {
|
|
12
|
+
constructor(scope, id) {
|
|
13
|
+
super(scope, id);
|
|
14
|
+
new iam.Role(this, 'NestedRole', {
|
|
15
|
+
assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
class NoSecurityNestedStack extends NestedStack {
|
|
21
|
+
constructor(scope, id) {
|
|
22
|
+
super(scope, id);
|
|
23
|
+
new sns.Topic(this, 'Topic');
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class ParentStack extends Stack {
|
|
28
|
+
constructor(scope, id) {
|
|
29
|
+
super(scope, id);
|
|
30
|
+
new IamNestedStack(this, 'IamNested');
|
|
31
|
+
new NoSecurityNestedStack(this, 'NoSecurityNested');
|
|
32
|
+
new IamNestedStack(this, 'AnotherIamNested');
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const app = new App();
|
|
37
|
+
new ParentStack(app, `${stackPrefix}-nested-iam`);
|
|
38
|
+
app.synth();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var cdk = require('aws-cdk-lib');
|
|
2
|
+
var tty = require('tty');
|
|
3
|
+
|
|
4
|
+
const stackPrefix = process.env.STACK_NAME_PREFIX;
|
|
5
|
+
if (!stackPrefix) {
|
|
6
|
+
throw new Error(`the STACK_NAME_PREFIX environment variable is required`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
class MyStack extends cdk.Stack {
|
|
10
|
+
constructor(parent, id, props) {
|
|
11
|
+
super(parent, id, props);
|
|
12
|
+
new cdk.aws_sns.Topic(this, 'topic');
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (!tty.isatty(1) || !tty.isatty(2)) {
|
|
17
|
+
throw new Error('stdout or stderr is not attached to a TTY');
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const app = new cdk.App();
|
|
21
|
+
|
|
22
|
+
const env = {
|
|
23
|
+
account: process.env.CDK_DEFAULT_ACCOUNT,
|
|
24
|
+
region: process.env.CDK_DEFAULT_REGION
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
new MyStack(app, `${stackPrefix}-MyStack`, { env });
|
|
28
|
+
|
|
29
|
+
app.synth();
|
package/tests/cli-integ-tests/deploy/cdk-deploy-guard-hook-failure-displays-annotations.integtest.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lib_1 = require("../../../lib");
|
|
4
|
+
jest.setTimeout(2 * 60 * 60_000);
|
|
5
|
+
(0, lib_1.integTest)('deploy with guard hook failure displays hook annoations', (0, lib_1.withSpecificFixture)('guard-hook-app', async (fixture) => {
|
|
6
|
+
// Deploy the setup stack which creates the Guard Hook via CloudFormation
|
|
7
|
+
await fixture.cdkDeploy('guard-hook-setup');
|
|
8
|
+
// Attempt to deploy non-compliant stack (should fail due to Guard Hook)
|
|
9
|
+
const deployOutput = await fixture.cdkDeploy('guard-hook-test', {
|
|
10
|
+
options: ['--no-rollback'],
|
|
11
|
+
allowErrExit: true,
|
|
12
|
+
});
|
|
13
|
+
expect(deployOutput).toContain('CREATE_FAILED');
|
|
14
|
+
expect(deployOutput).toContain('NonCompliant Rules:');
|
|
15
|
+
expect(deployOutput).toContain('[AWS_S3_Bucket_AccessControl]');
|
|
16
|
+
expect(deployOutput).toContain('• Check was not compliant as property [/Resources/NonCompliantBucket/Properties/AccessControl[L:0,C:91]] existed.');
|
|
17
|
+
expect(deployOutput).toContain('Remediation: AccessControl is deprecated');
|
|
18
|
+
}));
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLWRlcGxveS1ndWFyZC1ob29rLWZhaWx1cmUtZGlzcGxheXMtYW5ub3RhdGlvbnMuaW50ZWd0ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2RrLWRlcGxveS1ndWFyZC1ob29rLWZhaWx1cmUtZGlzcGxheXMtYW5ub3RhdGlvbnMuaW50ZWd0ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0NBQThEO0FBRTlELElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztBQUVqQyxJQUFBLGVBQVMsRUFDUCx5REFBeUQsRUFDekQsSUFBQSx5QkFBbUIsRUFBQyxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDdEQseUVBQXlFO0lBQ3pFLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTVDLHdFQUF3RTtJQUN4RSxNQUFNLFlBQVksR0FBRyxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsaUJBQWlCLEVBQUU7UUFDOUQsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDO1FBQzFCLFlBQVksRUFBRSxJQUFJO0tBQ25CLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsK0JBQStCLENBQUMsQ0FBQztJQUNoRSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUyxDQUFDLG1IQUFtSCxDQUFDLENBQUM7SUFDcEosTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbnRlZ1Rlc3QsIHdpdGhTcGVjaWZpY0ZpeHR1cmUgfSBmcm9tICcuLi8uLi8uLi9saWInO1xuXG5qZXN0LnNldFRpbWVvdXQoMiAqIDYwICogNjBfMDAwKTtcblxuaW50ZWdUZXN0KFxuICAnZGVwbG95IHdpdGggZ3VhcmQgaG9vayBmYWlsdXJlIGRpc3BsYXlzIGhvb2sgYW5ub2F0aW9ucycsXG4gIHdpdGhTcGVjaWZpY0ZpeHR1cmUoJ2d1YXJkLWhvb2stYXBwJywgYXN5bmMgKGZpeHR1cmUpID0+IHtcbiAgICAvLyBEZXBsb3kgdGhlIHNldHVwIHN0YWNrIHdoaWNoIGNyZWF0ZXMgdGhlIEd1YXJkIEhvb2sgdmlhIENsb3VkRm9ybWF0aW9uXG4gICAgYXdhaXQgZml4dHVyZS5jZGtEZXBsb3koJ2d1YXJkLWhvb2stc2V0dXAnKTtcblxuICAgIC8vIEF0dGVtcHQgdG8gZGVwbG95IG5vbi1jb21wbGlhbnQgc3RhY2sgKHNob3VsZCBmYWlsIGR1ZSB0byBHdWFyZCBIb29rKVxuICAgIGNvbnN0IGRlcGxveU91dHB1dCA9IGF3YWl0IGZpeHR1cmUuY2RrRGVwbG95KCdndWFyZC1ob29rLXRlc3QnLCB7XG4gICAgICBvcHRpb25zOiBbJy0tbm8tcm9sbGJhY2snXSxcbiAgICAgIGFsbG93RXJyRXhpdDogdHJ1ZSxcbiAgICB9KTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ0NSRUFURV9GQUlMRUQnKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ05vbkNvbXBsaWFudCBSdWxlczonKTtcbiAgICBleHBlY3QoZGVwbG95T3V0cHV0KS50b0NvbnRhaW4oJ1tBV1NfUzNfQnVja2V0X0FjY2Vzc0NvbnRyb2xdJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCfigKIgQ2hlY2sgd2FzIG5vdCBjb21wbGlhbnQgYXMgcHJvcGVydHkgWy9SZXNvdXJjZXMvTm9uQ29tcGxpYW50QnVja2V0L1Byb3BlcnRpZXMvQWNjZXNzQ29udHJvbFtMOjAsQzo5MV1dIGV4aXN0ZWQuJyk7XG4gICAgZXhwZWN0KGRlcGxveU91dHB1dCkudG9Db250YWluKCdSZW1lZGlhdGlvbjogQWNjZXNzQ29udHJvbCBpcyBkZXByZWNhdGVkJyk7XG4gIH0pLFxuKTtcbiJdfQ==
|