Lambda通过C#访问AWS系统参数时遇AccessDeniedException
资源ARN占位符未替换
你配置的IAM资源ARN里的???????????是占位符,必须替换成你的实际AWS账号ID。比如正确格式应该是arn:aws:ssm:你的区域ID:123456789012:parameter/*,如果没替换,权限范围不匹配,直接触发拒绝。Lambda Layer配置错误
确认添加的是AWS官方的Systems Manager Parameter Store扩展层,且Layer版本和你的Lambda运行时(比如.NET 6/7)兼容。如果Layer没正确关联到函数,或者版本不匹配,http://localhost:2773端点无法获取有效凭证,返回401。IAM权限存在隐式拒绝
就算配置了ssm:*,也可能有其他限制:比如账号的SCP(服务控制策略)禁止了SSM访问,或者Lambda角色的信任策略没允许Lambda服务扮演该角色。可以单独显式添加ssm:GetParameter权限,排除通配符带来的潜在问题。参数本身不存在或版本无效
确认/ClinMod/SyncfusionKey这个参数确实存在,且版本1是有效的。AWS有时会用权限拒绝的错误来隐藏资源不存在的事实,避免泄露信息。网络访问限制
如果Lambda部署在私有子网,必须配置NAT网关或者SSM的VPC端点,否则Lambda无法连接到SSM服务,也会返回权限类错误。本地测试的话,要确保本地环境的AWS凭证配置正确(比如~/.aws/credentials)。查看Extension日志
去CloudWatch日志里找Lambda Extension的输出(日志组前缀是/aws/lambda/你的函数名/extensions),里面会有更详细的错误细节,比如凭证获取失败、权限检查的具体原因。
内容的提问来源于stack exchange,提问作者BENBUN Coder

