Политика сети AWS lambda и IAM

#kubernetes #aws-lambda #amazon-iam

Вопрос:

Я развертываю лямбда — функцию StatusCheck в своем VPC. Функция развертывается с использованием awscli из одного из модулей, запущенных на рабочих узлах в моем кластере k8s. Я прикрепляю AWSLambdaVPCAccessExecutionRole политику к рабочим узлам k8s, и политика выглядит так

     "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:UnassignPrivateIpAddresses"
            ],
            "Resource": "*"
        }
    ]
}
 

Очевидно, что по умолчанию это также позволит другим блокам в кластере k8s создавать/удалять сетевые интерфейсы, что нежелательно.

Обновление вышеуказанной политики для добавления ресурса не работает.

 {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "ec2:CreateNetworkInterface",
                "ec2:DescribeNetworkInterfaces",
                "ec2:DeleteNetworkInterface",
                "ec2:AssignPrivateIpAddresses",
                "ec2:UnassignPrivateIpAddresses"
            ],
            "Resource": "arn:aws:lambda:*:77777777:function:*StatusCheck*"
        }
    ]
}
 

Ошибка :
StatusCheck. Create Failed. Resource handler returned message: "The provided execution role does not have permissions to call CreateNetworkInterface on EC2 (Service: Lambda, Status Code: 400

Можно ли ограничить создание/удаление ENI только функцией lambda StatusCheck ?

Комментарии:

1. Это может быть полезно: docs.aws.amazon.com/lambda/latest/dg/…

2. Это политика IAM, которую необходимо применить к лямбда-функции, чтобы функция могла правильно работать внутри VPC. Это не политика IAM, необходимая для создания лямбда-функции. Политика, необходимая для создания лямбда-функции, указана здесь . Кроме Resource того, вы вообще неправильно используете.

Ответ №1:

Проблема с вашей политикой заключается в том, что указанные вами действия не работают с ресурсом лямбда-функции. Они используются Lambda для совершения звонков в другие службы (и там для других, не связанных с Lambda ресурсов).

Глядя на CreateNetworkInterface запись в IAM для EC2 действий страницы (который вы получаете сообщение об ошибке в) показывает, что она ориентирована на сетевые интерфейсы и подсети (и, при необходимости, группы безопасности), поэтому вам нужно обработать несколько названий ресурсов (с подстановочными знаками, как вы пытались), чтобы соответствовать те ресурсы, если вы хотите ограничить его подмножество ресурсов.

Ответ №2:

Возникла та же проблема при использовании AWS SAM. Мне также пришлось добавить разрешения «ec2:Описание обстоятельств». Так что моя полная политика такова:

           - Effect: "Allow"
            Action:
              [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents",
                "logs:DescribeLogStreams"
              ]
            Resource: "arn:aws:logs:*:*:*"

          - Effect: "Allow"
            Action: 
              [
                "ec2:DescribeNetworkInterfaces",
                "ec2:CreateNetworkInterface",
                "ec2:AttachNetworkInterface",
                "ec2:DescribeInstances",
                "ec2:DeleteNetworkInterface"
              ]
            Resource: "arn:aws:ec2:*:*:*"