A Serverless Framework plugin that adds support for IAM role paths to functions created with serverless-iam-roles-per-function.
# NPM
npm install --save-dev serverless-iam-role-path
# Or using the Serverless Framework plugin command
serverless plugin install -n serverless-iam-role-path
- Serverless Framework v3.40.0 or later
- serverless-iam-roles-per-function v3.0.0 or later
Add the plugin to your serverless.yml
file. Make sure it's listed after the serverless-iam-roles-per-function
plugin:
plugins:
- serverless-iam-roles-per-function
- serverless-iam-role-path
To add a default path for all IAM roles:
custom:
iamRolePath:
path: '/my-service/' # Note: Path must start and end with "/"
You can also specify different paths for individual functions:
functions:
hello:
handler: handler.hello
iamRolePath: '/function/specific/path/' # This will override the default path
iamRoleStatements:
- Effect: Allow
Action:
- s3:GetObject
Resource: "arn:aws:s3:::my-bucket/*"
world:
handler: handler.world
# This function will use the default path from custom.iamRolePath.path
iamRoleStatements:
- Effect: Allow
Action:
- dynamodb:GetItem
Resource: '*'
This plugin complements the serverless-iam-roles-per-function
plugin by adding the Path property to all IAM roles created by it. The serverless-iam-roles-per-function
plugin already supports permissions boundaries through the iamPermissionsBoundary
property on functions, but it doesn't support setting a Path.
The plugin will:
- Check if
serverless-iam-roles-per-function
is included in your plugins - Look for IAM roles that match the function names in your service
- Add the specified path to each role (either the default path or function-specific path)
Option | Description |
---|---|
custom.iamRolePath |
Default path as a simple string (e.g., "/my-path/" ) for all IAM roles |
custom.iamRolePath.path |
Default path to assign to all IAM roles (must start and end with a forward slash) |
custom.iamRolePath.skipDefaultRole |
Set to true to skip applying the path to the default IamRoleLambdaExecution role |
functions.[name].iamRolePath |
Function-specific path as a simple string to override the default path |
functions.[name].iamRolePath.path |
Function-specific path defined as an object to override the default path |
You can use a simplified format for both global and function-specific paths:
custom:
iamRolePath: '/my-path/' # Simple string format
functions:
hello:
handler: handler.hello
iamRolePath: '/function-specific-path/' # Simple string format
If you're experiencing permission issues during deployment, you can skip applying the path to the default role:
custom:
iamRolePath:
path: '/my-path/'
skipDefaultRole: true
- IAM paths must start and end with a forward slash (/)
- Path character limit is 512 characters
MIT