@@ -632,6 +632,24 @@ function getEventBridgeSchedulerPermissions(state) {
632
632
] ;
633
633
}
634
634
635
+ // Because the S3 Bucket parameter can be either a literal name or a reference to an existing S3 bucket we need to resolve
636
+ function resolveS3BucketReference ( bucket , resource ) {
637
+ if ( isIntrinsic ( bucket ) ) {
638
+ return {
639
+ 'Fn::Sub' : [
640
+ resource ,
641
+ { bucket } ,
642
+ ] ,
643
+ } ;
644
+ }
645
+
646
+ return resource . replaceAll ( '${bucket}' , bucket ) ;
647
+ }
648
+
649
+ function resolveS3BucketReferences ( bucket , resources ) {
650
+ return resources . map ( ( resource ) => resolveS3BucketReference ( bucket , resource ) ) ;
651
+ }
652
+
635
653
function getS3ObjectPermissions ( action , state ) {
636
654
const bucket = state . Parameters . Bucket || '*' ;
637
655
const key = state . Parameters . Key || '*' ;
@@ -642,27 +660,27 @@ function getS3ObjectPermissions(action, state) {
642
660
return [
643
661
{
644
662
action : 's3:Get*' ,
645
- resource : [
646
- `arn:aws:s3:::${ bucket } ` ,
647
- `arn:aws:s3:::${ bucket } /*` ,
648
- ] ,
663
+ resource : resolveS3BucketReferences ( bucket , [
664
+ `arn:aws:s3:::\ ${bucket}` ,
665
+ `arn:aws:s3:::\ ${bucket}/*` ,
666
+ ] ) ,
649
667
} ,
650
668
{
651
669
action : 's3:List*' ,
652
- resource : [
653
- `arn:aws:s3:::${ bucket } ` ,
654
- `arn:aws:s3:::${ bucket } /*` ,
655
- ] ,
670
+ resource : resolveS3BucketReferences ( bucket , [
671
+ `arn:aws:s3:::\ ${bucket}` ,
672
+ `arn:aws:s3:::\ ${bucket}/*` ,
673
+ ] ) ,
656
674
} ,
657
675
] ;
658
676
}
659
677
660
678
if ( prefix ) {
661
- arn = `arn:aws:s3:::${ bucket } /${ prefix } /${ key } ` ;
679
+ arn = resolveS3BucketReference ( bucket , `arn:aws:s3:::\ ${bucket}/${ prefix } /${ key } ` ) ;
662
680
} else if ( bucket === '*' && key === '*' ) {
663
681
arn = '*' ;
664
682
} else {
665
- arn = `arn:aws:s3:::${ bucket } /${ key } ` ;
683
+ arn = resolveS3BucketReference ( bucket , `arn:aws:s3:::\ ${bucket}/${ key } ` ) ;
666
684
}
667
685
668
686
return [ {
0 commit comments