AWS ssm:带有SNS的SendCommand - 限制性IAM策略

时间:2017-08-06 18:48:03

标签: amazon-web-services aws-lambda amazon-sns amazon-iam amazon-ssm-agent

我尝试创建限制性SSM角色IAM策略,该策略能够在SendCommand命令执行失败时发送SNS通知。我目前有以下政策给我" AccessDenied"没有其他信息(替换占位符):

{
  "Statement": {
    "Effect": "Allow",
    "Action": [ "ssm:SendCommand" ],
    "Resource": [
      "arn:aws:ec2:${AWS::Region}:${AWS::AccountId}:instance/*",
      "arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:document/${DocumentName}",
      "arn:aws:s3:::${S3BucketName}",
      "arn:aws:s3:::${S3BucketName}/*",
      "arn:aws:iam::${AWS::AccountId}:role/${RoleThatHasSNSPublishPerms}",
      "arn:aws:sns:${AWS::RegionId}:${AWS::AccountId}:${SNSTopicName}"
    ]
  }
}

我还拥有$ {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策略的一部分,因为当我将资源块更改为" *"时,运行命令正确执行。此外,当我删除python命令的NotificationConfig和ServiceRoleArn部分时,SendCommand也会成功。

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

编辑: 不确定这是新的还是我之前错过了,但AWS发布了一些关于如何将权限范围缩小到仅标记的EC2的说明: https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-rc-setting-up-cmdsec.html

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

0 个答案:

没有答案