跨AWS账号Lambda权限控制:仅允许Lambda B调用Lambda A
解决方案:限制跨账号Lambda调用权限至最小范围
你的问题核心在于Lambda B通过Assume Role直接获取了RoleA的完整权限,而RoleA本身包含S3、Secret Manager的访问权限,导致权限溢出。要解决这个问题,需遵循IAM最小权限原则,创建一个仅允许调用Lambda A的专用跨账号角色,替代直接让RoleB Assume RoleA。
步骤1:在AWS账号#111创建专用跨账号调用角色
创建名为CrossAccountLambdaInvokeRole的IAM角色,仅授予调用Lambda A的权限,且仅允许账号#222的RoleB扮演该角色。
1.1 设置信任策略(Trust Policy)
该策略指定仅账号#222的RoleB可Assume此角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::222:role/RoleB" }, "Action": "sts:AssumeRole" } ] }
1.2 设置权限策略(Permission Policy)
该策略仅授予调用Lambda A的权限,无其他资源访问权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:111:function:<LambdaA的函数名>" } ] }
步骤2:修改账号#222中RoleB的权限
更新RoleB的权限策略,移除原允许Assume RoleA的权限,替换为允许Assume上述新创建的专用角色:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111:role/CrossAccountLambdaInvokeRole" }, // 保留RoleB原有的其他必要权限(若有) { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "<RoleB自身需调用的其他Lambda资源(若有)>" } ] }
步骤3:验证Lambda A的资源策略(可选)
若Lambda A之前设置了外部调用的资源策略,确保该策略允许CrossAccountLambdaInvokeRole调用它:
{ "Version": "2012-10-17", "Id": "LambdaAPermission", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111:role/CrossAccountLambdaInvokeRole" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:<区域>:111:function:<LambdaA的函数名>" } ] }
方案说明
- 专用角色
CrossAccountLambdaInvokeRole仅拥有调用Lambda A的权限,从根源避免了S3、Secret Manager的权限溢出。 - RoleB只能Assume该专用角色,无法获取RoleA的完整权限,严格遵循最小权限安全原则。
内容的提问来源于stack exchange,提问作者ashraf dasa
相关产品推荐
相关产品推荐

