@@ -2035,4 +2035,76 @@ describe('#compileIamRole', () => {
20352035 '*limited*' ,
20362036 ] ) ;
20372037 } ) ;
2038+
2039+ it ( 'should give sagemaker batch transform permissions' , ( ) => {
2040+ const genStateMachine = id => ( {
2041+ id,
2042+ definition : {
2043+ StartAt : 'A' ,
2044+ States : {
2045+ A : {
2046+ Type : 'Task' ,
2047+ Resource : 'arn:aws:states:::sagemaker:createTransformJob.sync' ,
2048+ Parameters : {
2049+ ModelName : 'a-model-name' ,
2050+ TransformInput : {
2051+ CompressionType : 'None' ,
2052+ ContentType : 'text/csv' ,
2053+ DataSource : {
2054+ S3DataSource : {
2055+ S3DataType : 'S3Prefix' ,
2056+ S3Uri : 's3://your-bucket' ,
2057+ } ,
2058+ } ,
2059+ } ,
2060+ TransformOutput : {
2061+ S3OutputPath : 's3://your-bucket/TrasformOutputPath' ,
2062+ } ,
2063+ TransformResources : {
2064+ InstanceCount : 1 ,
2065+ InstanceType : 'ml.m4.xlarge' ,
2066+ } ,
2067+ TransformJobName : 'your-job-name' ,
2068+ } ,
2069+ End : true ,
2070+ } ,
2071+ } ,
2072+ } ,
2073+ } ) ;
2074+
2075+ serverless . service . stepFunctions = {
2076+ stateMachines : {
2077+ myStateMachine1 : genStateMachine ( 'StateMachine1' ) ,
2078+ } ,
2079+ } ;
2080+
2081+ serverlessStepFunctions . compileIamRole ( ) ;
2082+ const statements = serverlessStepFunctions . serverless . service
2083+ . provider . compiledCloudFormationTemplate . Resources . StateMachine1Role
2084+ . Properties . Policies [ 0 ] . PolicyDocument . Statement ;
2085+
2086+ const transformPermissions = statements . filter ( s => _ . isEqual ( s . Action , [ 'sagemaker:CreateTransformJob' , 'sagemaker:DescribeTransformJob' , 'sagemaker:StopTransformJob' ] ) ) ;
2087+ expect ( transformPermissions ) . to . have . lengthOf ( 1 ) ;
2088+ expect ( transformPermissions [ 0 ] . Resource ) . to . deep . eq ( [
2089+ {
2090+ 'Fn::Sub' : [
2091+ 'arn:aws:sagemaker:${AWS::Region}:${AWS::AccountId}:transform-job/your-job-name*' ,
2092+ { } ,
2093+ ] ,
2094+ } ,
2095+ ] ) ;
2096+
2097+ const listTagPermission = statements . filter ( s => _ . isEqual ( s . Action , [ 'sagemaker:ListTags' ] ) ) ;
2098+ expect ( listTagPermission ) . to . have . lengthOf ( 1 ) ;
2099+ expect ( listTagPermission [ 0 ] . Resource ) . to . equal ( '*' ) ;
2100+
2101+ const eventPermissions = statements . filter ( s => _ . isEqual ( s . Action , [ 'events:PutTargets' , 'events:PutRule' , 'events:DescribeRule' ] ) ) ;
2102+ expect ( eventPermissions ) . to . has . lengthOf ( 1 ) ;
2103+ expect ( eventPermissions [ 0 ] . Resource ) . to . deep . eq ( [ {
2104+ 'Fn::Sub' : [
2105+ 'arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/StepFunctionsGetEventsForSageMakerTransformJobsRule' ,
2106+ { } ,
2107+ ] ,
2108+ } ] ) ;
2109+ } ) ;
20382110} ) ;
0 commit comments