|
1 |
| -import { expect } from '@aws-cdk/assert'; |
| 1 | +import { expect, haveResource } from '@aws-cdk/assert'; |
2 | 2 | import iam = require('@aws-cdk/aws-iam');
|
3 | 3 | import kms = require('@aws-cdk/aws-kms');
|
4 | 4 | import cdk = require('@aws-cdk/cdk');
|
5 | 5 | import { Test } from 'nodeunit';
|
6 | 6 | import s3 = require('../lib');
|
7 |
| -import { Bucket } from '../lib'; |
8 | 7 |
|
9 | 8 | // to make it easy to copy & paste from output:
|
10 | 9 | // tslint:disable:object-literal-key-quotes
|
@@ -963,7 +962,7 @@ export = {
|
963 | 962 |
|
964 | 963 | 'urlForObject returns a token with the S3 URL of the token'(test: Test) {
|
965 | 964 | const stack = new cdk.Stack();
|
966 |
| - const bucket = new Bucket(stack, 'MyBucket'); |
| 965 | + const bucket = new s3.Bucket(stack, 'MyBucket'); |
967 | 966 |
|
968 | 967 | new cdk.Output(stack, 'BucketURL', { value: bucket.bucketUrl });
|
969 | 968 | new cdk.Output(stack, 'MyFileURL', { value: bucket.urlForObject('my/file.txt') });
|
@@ -1059,5 +1058,111 @@ export = {
|
1059 | 1058 | });
|
1060 | 1059 |
|
1061 | 1060 | test.done();
|
| 1061 | + }, |
| 1062 | + |
| 1063 | + 'grantPublicAccess': { |
| 1064 | + 'by default, grants s3:GetObject to all objects'(test: Test) { |
| 1065 | + // GIVEN |
| 1066 | + const stack = new cdk.Stack(); |
| 1067 | + const bucket = new s3.Bucket(stack, 'b'); |
| 1068 | + |
| 1069 | + // WHEN |
| 1070 | + bucket.grantPublicAccess(); |
| 1071 | + |
| 1072 | + // THEN |
| 1073 | + expect(stack).to(haveResource('AWS::S3::BucketPolicy', { |
| 1074 | + "PolicyDocument": { |
| 1075 | + "Statement": [ |
| 1076 | + { |
| 1077 | + "Action": "s3:GetObject", |
| 1078 | + "Effect": "Allow", |
| 1079 | + "Principal": "*", |
| 1080 | + "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "bC3BBCC65", "Arn" ] }, "/", "*" ] ] } |
| 1081 | + } |
| 1082 | + ], |
| 1083 | + "Version": "2012-10-17" |
| 1084 | + } |
| 1085 | + })); |
| 1086 | + test.done(); |
| 1087 | + }, |
| 1088 | + |
| 1089 | + '"keyPrefix" can be used to only grant access to certain objects'(test: Test) { |
| 1090 | + // GIVEN |
| 1091 | + const stack = new cdk.Stack(); |
| 1092 | + const bucket = new s3.Bucket(stack, 'b'); |
| 1093 | + |
| 1094 | + // WHEN |
| 1095 | + bucket.grantPublicAccess('only/access/these/*'); |
| 1096 | + |
| 1097 | + // THEN |
| 1098 | + expect(stack).to(haveResource('AWS::S3::BucketPolicy', { |
| 1099 | + "PolicyDocument": { |
| 1100 | + "Statement": [ |
| 1101 | + { |
| 1102 | + "Action": "s3:GetObject", |
| 1103 | + "Effect": "Allow", |
| 1104 | + "Principal": "*", |
| 1105 | + "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "bC3BBCC65", "Arn" ] }, "/", "only/access/these/*" ] ] } |
| 1106 | + } |
| 1107 | + ], |
| 1108 | + "Version": "2012-10-17" |
| 1109 | + } |
| 1110 | + })); |
| 1111 | + test.done(); |
| 1112 | + }, |
| 1113 | + |
| 1114 | + '"allowedActions" can be used to specify actions explicitly'(test: Test) { |
| 1115 | + // GIVEN |
| 1116 | + const stack = new cdk.Stack(); |
| 1117 | + const bucket = new s3.Bucket(stack, 'b'); |
| 1118 | + |
| 1119 | + // WHEN |
| 1120 | + bucket.grantPublicAccess('*', 's3:GetObject', 's3:PutObject'); |
| 1121 | + |
| 1122 | + // THEN |
| 1123 | + expect(stack).to(haveResource('AWS::S3::BucketPolicy', { |
| 1124 | + "PolicyDocument": { |
| 1125 | + "Statement": [ |
| 1126 | + { |
| 1127 | + "Action": [ "s3:GetObject", "s3:PutObject" ], |
| 1128 | + "Effect": "Allow", |
| 1129 | + "Principal": "*", |
| 1130 | + "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "bC3BBCC65", "Arn" ] }, "/", "*" ] ] } |
| 1131 | + } |
| 1132 | + ], |
| 1133 | + "Version": "2012-10-17" |
| 1134 | + } |
| 1135 | + })); |
| 1136 | + test.done(); |
| 1137 | + }, |
| 1138 | + |
| 1139 | + 'returns the PolicyStatement which can be then customized'(test: Test) { |
| 1140 | + // GIVEN |
| 1141 | + const stack = new cdk.Stack(); |
| 1142 | + const bucket = new s3.Bucket(stack, 'b'); |
| 1143 | + |
| 1144 | + // WHEN |
| 1145 | + const statement = bucket.grantPublicAccess(); |
| 1146 | + statement.addCondition('IpAddress', { "aws:SourceIp": "54.240.143.0/24" }); |
| 1147 | + |
| 1148 | + // THEN |
| 1149 | + expect(stack).to(haveResource('AWS::S3::BucketPolicy', { |
| 1150 | + "PolicyDocument": { |
| 1151 | + "Statement": [ |
| 1152 | + { |
| 1153 | + "Action": "s3:GetObject", |
| 1154 | + "Effect": "Allow", |
| 1155 | + "Principal": "*", |
| 1156 | + "Resource": { "Fn::Join": [ "", [ { "Fn::GetAtt": [ "bC3BBCC65", "Arn" ] }, "/", "*" ] ] }, |
| 1157 | + "Condition": { |
| 1158 | + "IpAddress": { "aws:SourceIp": "54.240.143.0/24" } |
| 1159 | + } |
| 1160 | + } |
| 1161 | + ], |
| 1162 | + "Version": "2012-10-17" |
| 1163 | + } |
| 1164 | + })); |
| 1165 | + test.done(); |
| 1166 | + } |
1062 | 1167 | }
|
1063 | 1168 | };
|
0 commit comments