调用SSM SendCommand针对资源组所需IAM权限配置问题排查
以资源组为目标执行SSM SendCommand的权限配置方案
问题根源
你当前的IAM策略存在两个核心问题:
- 调用
ssm:SendCommand时指定了资源组作为目标,但资源组的ARN未被纳入该操作的资源列表,AWS会拒绝未授权的资源访问 - 过度开放了
resource-groups:*权限,且未明确限定必要的资源组操作——实际上仅需resource-groups:ListGroupResources权限(SSM会调用该API获取资源组内的EC2实例)
修正后的CDK权限代码
// 允许针对指定文档、实例和资源组发送SSM命令 ssmSenderlambdaRole.addToPolicy(new PolicyStatement({ effect: Effect.ALLOW, actions: ['ssm:SendCommand'], resources: [ linuxDocumentArn, windowsDocumentArn, `arn:aws:ec2:${Aws.REGION}:${Aws.ACCOUNT_ID}:instance/*`, // 替换为你的目标资源组ARN,支持多个或通配符(按需使用) `arn:aws:resource-groups:${Aws.REGION}:${Aws.ACCOUNT_ID}:group/your-resource-group-name` ], })); // 仅授予获取资源组成员的最小权限 ssmSenderlambdaRole.addToPolicy(new PolicyStatement({ effect: Effect.ALLOW, actions: ['resource-groups:ListGroupResources'], resources: [ `arn:aws:resource-groups:${Aws.REGION}:${Aws.ACCOUNT_ID}:group/your-resource-group-name` ], }));
补充注意事项
- 若需支持多个资源组,可在资源列表中添加对应ARN,或使用
arn:aws:resource-groups:${Aws.REGION}:${Aws.ACCOUNT_ID}:group/*通配符,但建议仅开放业务所需的资源组以遵循最小权限原则 - 确保目标EC2实例已安装并运行SSM Agent,且实例关联的IAM角色包含
AmazonSSMManagedInstanceCore托管策略(否则实例无法接收SSM命令)
内容的提问来源于stack exchange,提问作者Sam Fakhreddine
相关产品推荐
相关产品推荐

