如何批量移除所有AWS Lambda函数的Lambda Basic Execution Role并禁止用户选择该角色?
批量移除所有Lambda函数的Lambda Basic Execution Role
针对大量Lambda函数,可通过AWS CLI或Python SDK批量操作,以下是具体实现:
AWS CLI 脚本
通过bash脚本批量识别并移除使用Basic Execution Role的Lambda函数:
# 获取所有Lambda函数名称(以空格分隔) FUNCTIONS=$(aws lambda list-functions --query 'Functions[*].FunctionName' --output text) # 循环处理每个函数 for FUNCTION in $FUNCTIONS; do # 获取当前函数绑定的执行角色 CURRENT_ROLE=$(aws lambda get-function --function-name $FUNCTION --query 'Configuration.Role' --output text) # 仅处理使用Basic Execution Role的函数 if [[ $CURRENT_ROLE == *"lambda_basic_execution"* ]]; then echo "移除函数 $FUNCTION 的Basic Execution Role" aws lambda update-function-configuration --function-name $FUNCTION --role "" fi done
注意事项:
- 确保执行脚本的身份拥有
lambda:ListFunctions、lambda:GetFunction、lambda:UpdateFunctionConfiguration权限 - 若函数依赖该角色运行,移除后会触发权限错误,需提前确认这些函数已无需该角色或已配置替代权限方案
Python Boto3 脚本
适合跨区域、分页处理大量函数的场景:
import boto3 # 初始化Lambda客户端(如需跨区域,可指定region_name参数) lambda_client = boto3.client('lambda') def get_all_lambda_functions(): functions = [] response = lambda_client.list_functions() functions.extend(response['Functions']) # 处理分页结果(单次list最多返回100个函数) while 'NextMarker' in response: response = lambda_client.list_functions(Marker=response['NextMarker']) functions.extend(response['Functions']) return functions # 获取所有函数并批量更新 for func in get_all_lambda_functions(): func_name = func['FunctionName'] current_role = func.get('Role', '') if 'lambda_basic_execution' in current_role.lower(): print(f"更新函数 {func_name}:移除Basic Execution Role") lambda_client.update_function_configuration( FunctionName=func_name, Role='' )
阻止用户选择Lambda Basic Execution Role
可通过IAM权限策略或组织SCP实现,从权限层面限制该角色的使用:
IAM 权限策略
创建拒绝策略并附加到目标IAM用户/组/角色,阻止创建或更新Lambda函数时指定该角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Resource": "*", "Condition": { "StringLike": { "lambda:Role": "*lambda_basic_execution*" } } } ] }
当用户尝试选择Basic Execution Role时,操作会被直接拒绝。
AWS Organizations 服务控制策略(SCP)
若管理多账户环境,可通过SCP在组织层面批量限制:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:CreateFunction", "lambda:UpdateFunctionConfiguration" ], "Resource": "*", "Condition": { "StringLike": { "lambda:Role": "*lambda_basic_execution*" } } } ] }
将该SCP附加到目标组织单元(OU)或账户,即可限制整个范围内的用户使用该角色。
额外:禁用角色的Lambda信任关系
若要彻底让该角色无法被Lambda使用,可修改其信任策略,拒绝Lambda服务的角色假设请求:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
即使有人绕过权限限制指定该角色,Lambda也无法正常使用它。
内容的提问来源于stack exchange,提问作者user20723032
相关产品推荐
相关产品推荐

