Amazon web services AWS ssm:SendCommand与SNS-限制性IAM策略

Amazon web services AWS ssm:SendCommand与SNS-限制性IAM策略,amazon-web-services,aws-lambda,amazon-sns,amazon-iam,amazon-ssm-agent,Amazon Web Services,Aws Lambda,Amazon Sns,Amazon Iam,Amazon Ssm Agent,我正在尝试创建一个限制性SSM角色IAM策略,该策略能够在SendCommand执行失败时发送SNS通知。我目前有以下策略,该策略允许我在没有其他信息(占位符被替换)的情况下“拒绝访问”: 我还拥有${RoleThatHasSNSPublishPerms}的iam::PassRole权限。我使用python boto3从lambda调用它,方法如下: ssm = boto3.client('ssm') ssm.send_command( I

我正在尝试创建一个限制性SSM角色IAM策略,该策略能够在SendCommand执行失败时发送SNS通知。我目前有以下策略,该策略允许我在没有其他信息(占位符被替换)的情况下“拒绝访问”:

我还拥有${RoleThatHasSNSPublishPerms}的iam::PassRole权限。我使用python boto3从lambda调用它,方法如下:

        ssm = boto3.client('ssm')
        ssm.send_command(
            InstanceIds = [ instance_id ],
            DocumentName = ssm_document_name,
            TimeoutSeconds = 300,
            OutputS3Region = aws_region,
            OutputS3BucketName = output_bucket_name,
            OutputS3KeyPrefix = ssm_document_name,
            ServiceRoleArn = ssm_service_role_arn,
            NotificationConfig = {
                'NotificationArn': sns_arn,
                'NotificationEvents': ['TimedOut', 'Cancelled', 'Failed'],
                'NotificationType': 'Command'
            }
        )
我知道问题在于IAM策略的“资源”部分,因为当我将资源块更改为“*”时,run命令会正确执行。此外,当我删除python命令的NotificationConfig和ServiceRoleArn部分时,send命令也会成功

我不希望这个lambda角色的许可策略只在任何地方和任何东西上执行命令。问题是,我如何限制此策略并在失败时仍发送通知

编辑: 不确定这是新的还是我之前错过了它,但AWS发布了一些关于如何将权限缩小到仅标记的EC2的说明:


这仍然不能回答问题的SNS/S3部分,但至少这是朝着正确方向迈出的一步。

好问题,你有没有找到一个好的解决方案?不幸的是,没有。我不得不妥协,并为此制定了一个宽松的政策。SSM IAM策略的文档非常稀少,我的问题没有得到回答:(对,谢谢你的跟进。我已经在AWS论坛的几个现有线程中尝试再次提出相同的问题:并且。我猜第一个问题是由你(?))发起的。无论如何,再次感谢你的跟进。
        ssm = boto3.client('ssm')
        ssm.send_command(
            InstanceIds = [ instance_id ],
            DocumentName = ssm_document_name,
            TimeoutSeconds = 300,
            OutputS3Region = aws_region,
            OutputS3BucketName = output_bucket_name,
            OutputS3KeyPrefix = ssm_document_name,
            ServiceRoleArn = ssm_service_role_arn,
            NotificationConfig = {
                'NotificationArn': sns_arn,
                'NotificationEvents': ['TimedOut', 'Cancelled', 'Failed'],
                'NotificationType': 'Command'
            }
        )