IAM Permissions

June 27, 2026 ยท View on GitHub

Lift constructs are designed to be functional out of the box.

This is why some constructs automatically add permissions to the Lambda functions deployed in the same serverless.yml file.

Note: Lift permissions only apply to Lambda functions deployed in the same stack.

Example

For example, the storage construct deploys a S3 bucket and automatically allows Lambda functions to read and write into the bucket.

In the example below, the IAM role for myFunction will automatically contain permissions to read/write the avatars bucket.

# serverless.yml

constructs:
    avatars:
        type: storage

functions:
    myFunction:
        # ...

This is essentially a shortcut to setting up permissions manually like this:

# serverless.yml
provider:
    iam:
        role:
            statements:
                -   Effect: Allow
                    Action:
                        - s3:PutObject
                        - s3:GetObject
                        - s3:DeleteObject
                        - s3:ListBucket
                        - s3:GetObjectAcl
                        - s3:PutObjectAcl
                        - s3:GetObjectTagging
                        - s3:PutObjectTagging
                        - s3:DeleteObjectTagging
                        - s3:GetObjectAttributes
                        - s3:AbortMultipartUpload
                        - s3:ListMultipartUploadParts
                        - s3:ListBucketMultipartUploads
                        - s3:RestoreObject
                    Resource:
                        - ${construct:avatars.bucketArn}
                        - Fn::Join: ['', ['${construct:avatars.bucketArn}', '/*']]

...

Disabling automatic permissions

In some scenarios, you may prefer to set up IAM permissions manually.

It is possible to disable Lift's automatic IAM permissions:

# serverless.yml

lift:
    automaticPermissions: false