@@ -62,24 +62,31 @@ const FASTLY_LOG_FORMAT = `{
6262 "time_to_first_byte": "%{time.to_first_byte}V"
6363}` ;
6464const CDN_TRANSFORMATIONS = {
65- 'byocdn-fastly' : ( payload ) => ( {
66- 'Bucket Name' : payload . bucketName ,
67- Domain : `s3.${ payload . region } .amazonaws.com` ,
68- Path : `${ payload . allowedPaths ?. [ 0 ] || '' } %Y/%m/%d/%H/` ,
69- 'Timestamp Format' : '%Y-%m-%dT%H:%M:%S.000' ,
70- Placement : 'Format Version Default' ,
71- 'Log format' : FASTLY_LOG_FORMAT ,
72- 'Access method' : 'User credentials' ,
73- ...transformCredentialFields ( payload ) ,
74- Period : 300 ,
75- 'Log line format' : 'Blank' ,
76- Compression : 'Gzip' ,
77- 'Redundancy level' : 'Standard' ,
78- ACL : 'None' ,
79- 'Server side encryption' : 'None' ,
80- 'Maximum bytes' : 0 ,
81- HelpUrl : 'https://www.fastly.com/documentation/guides/integrations/logging-endpoints/log-streaming-amazon-s3/' ,
82- } ) ,
65+ 'byocdn-fastly' : ( payload ) => {
66+ const authMethodLabel = payload . authMethod === 'iam_role' ? 'IAM Role' : 'User credentials' ;
67+ const authFields = payload . authMethod === 'iam_role'
68+ ? { 'Role ARN' : payload . roleArn }
69+ : transformCredentialFields ( payload ) ;
70+
71+ return {
72+ 'Bucket Name' : payload . bucketName ,
73+ Domain : `s3.${ payload . region } .amazonaws.com` ,
74+ Path : `${ payload . allowedPaths ?. [ 0 ] || '' } %Y/%m/%d/%H/` ,
75+ 'Timestamp Format' : '%Y-%m-%dT%H:%M:%S.000' ,
76+ Placement : 'Format Version Default' ,
77+ 'Log format' : FASTLY_LOG_FORMAT ,
78+ 'Access method' : authMethodLabel ,
79+ ...authFields ,
80+ Period : 300 ,
81+ 'Log line format' : 'Blank' ,
82+ Compression : 'Gzip' ,
83+ 'Redundancy level' : 'Standard' ,
84+ ACL : 'None' ,
85+ 'Server side encryption' : 'None' ,
86+ 'Maximum bytes' : 0 ,
87+ HelpUrl : 'https://www.fastly.com/documentation/guides/integrations/logging-endpoints/log-streaming-amazon-s3/' ,
88+ } ;
89+ } ,
8390 'byocdn-akamai' : ( payload ) => ( {
8491 'Bucket Name' : payload . bucketName ,
8592 Region : payload . region ,
@@ -238,7 +245,22 @@ const prettifyLogForwardingConfig = (payload) => {
238245 throw new Error ( 'allowedPaths is required in payload' ) ;
239246 }
240247
241- if ( payload . logSource === 'byocdn-fastly' || payload . logSource === 'byocdn-akamai' || payload . logSource === 'byocdn-other' ) {
248+ if ( payload . logSource === 'byocdn-fastly' ) {
249+ if ( payload . authMethod === 'user_credentials' ) {
250+ if ( ! payload . accessKey && ! payload . currentAccessKey ) {
251+ throw new Error ( 'accessKey or currentAccessKey is required in payload' ) ;
252+ }
253+ if ( ! payload . secretKey && ! payload . currentSecretKey ) {
254+ throw new Error ( 'secretKey or currentSecretKey is required in payload' ) ;
255+ }
256+ } else if ( payload . authMethod === 'iam_role' ) {
257+ if ( ! payload . roleArn ) {
258+ throw new Error ( 'roleArn is required in payload when authMethod is iam_role' ) ;
259+ }
260+ }
261+ }
262+
263+ if ( payload . logSource === 'byocdn-akamai' || payload . logSource === 'byocdn-other' ) {
242264 if ( ! payload . accessKey && ! payload . currentAccessKey ) {
243265 throw new Error ( 'accessKey or currentAccessKey is required in payload' ) ;
244266 }
0 commit comments