AWS Lambda Secrets Manager Example: 2 Ways to Grant Access | Resource Permissions
YouTube Tutorial
1. Create Secret in AWS Secrets Manager
Create SLACK_BOT_TOKEN secret with random value
Give it a name prod/slack-bot/token-v3
2. Create IAM User with Full Access
Create admin user and place it in Admin IAM group
Configure aws cli aws configure
3. Create IAM Role for AWS Lambda
Create IAM Policy AWSLambdaSecretsAccess
{
"Version" : " 2012-10-17" ,
"Statement" : [
{
"Effect" : " Allow" ,
"Action" : " logs:CreateLogGroup" ,
"Resource" : " arn:aws:logs:us-east-1:424432388155:*"
},
{
"Effect" : " Allow" ,
"Action" : [
" logs:CreateLogStream" ,
" logs:PutLogEvents"
],
"Resource" : " arn:aws:logs:us-east-1:424432388155:log-group:/aws/lambda/secret-access:*"
}
]
}
Create secret-access-role IAM Role
4. Create AWS Lambda Function
Create secret-access folder
Run npm init
Install aws-sdk npm i aws-sdk
Create app.js
Create Dockerfile
5. Deploy Lambda Using Container Image
Create ECR secret-access
Build and push image
aws ecr get-login-password --region us-east-1 | \
docker login --username AWS \
--password-stdin 424432388155.dkr.ecr.us-east-1.amazonaws.com
docker build -t 424432388155.dkr.ecr.us-east-1.amazonaws.com/secret-access:v0.1.0 .
docker push 424432388155.dkr.ecr.us-east-1.amazonaws.com/secret-access:v0.1.0
Deploy lambda
Test with curl (fail)
6. Grant Access for IAM Role
{
"Effect" : " Allow" ,
"Action" : " secretsmanager:GetSecretValue" ,
"Resource" : " arn:aws:secretsmanager:us-east-1:424432388155:secret:prod/slack-bot/token-v3-<id>"
}
7. Create Resource-based Policy for Secret
{
"Version" : " 2012-10-17" ,
"Statement" : [
{
"Effect" : " Allow" ,
"Principal" : {
"AWS" : " arn:aws:sts::424432388155:assumed-role/secret-access-role/secret-access"
},
"Action" : " secretsmanager:GetSecretValue" ,
"Resource" : " arn:aws:secretsmanager:us-east-1:424432388155:secret:prod/slack-bot/token-v3-<id>"
}
]
}
Delete admin IAM user
Delete ECR secret-access
Delete secret-access-role IAM Role
Delete AWSLambdaSecretsAccess IAM Policy
Delete secret-access lambda
Delete secret-access-API API gateway
Delete CloudWatch logs
Delete secrets
Resource-based policies
AWS JSON policy elements: Principal