AWS Lambda:提供的执行角色无权调用EC2上的DescribeNetworkInterfaces

时间:2016-12-16 05:45:19

标签: amazon-web-services aws-lambda amazon-iam policy role

今天我有一个新的AWS Lambda问题,在谷歌的任何地方找不到。

我新增了一个Lambda函数,毫无疑问。 但是当我在这个函数中输入任何代码时[例如。 console.log();]并单击“保存”,出现错误: “提供的执行角色没有权限在EC2上调用DescribeNetworkInterfaces”

exports.handler = (event, context, callback) => {
    callback(null, 'Hello from Lambda');
    console.log();  // here is my code   
}; 

我使用Role绑定了该函数:lambda_excute_execution(Policy:AmazonElasticTranscoderFullAccess) 此功能现在不与任何触发器绑定。

然后,我赋予角色“AdministratorAccess”策略,我可以正确保存我的源代码。

此角色可以在今天之前成功运行函数。

有人知道这个错误吗?

非常感谢!

7 个答案:

答案 0 :(得分:8)

如果您使用的是Terraform,只需添加:

Value1.1 (T1.ID=1, T2.ID=1) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2)  = (1000 * 10%) + (5000*5%) = 350
Value1.2(T1.ID=1, T2.ID=2) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2)  = (1000 * 15%) + (5000*2%) = 250
Value1.3 (T1.ID=1, T2.ID=3) = (T1.Value1 * T2.Perc1) + (T1.Value2 * T2.Perc2)  = (1000 * 20%) + (5000*8%) = 600

Value2.1 (T1.ID=1, T2.ID=1, T3.ID=1) = (1000 * 8%) + (5000*3%) = 230 < Value1.1 -> MaybeMax1= Value2.1 = 230
Value2.2 (T1.ID=1, T2.ID=2, T3.ID=2) = (1000 * 10%) + (5000*8%) = 500 > Value1.2 -> MaybeMax2 = Value1.2 = 500
Value2.3 (T1.ID=1, T2.ID=3, T3.ID=3) = (1000 * 9%) + (5000*7%) = 440 > Value1.3 -> MaybeMax3 = Value2.3 = 440

**MaxValue**
MaxValue(T1.ID=1)=Max(230, 500, 440) = 500

答案 1 :(得分:2)

通过AWS CLI使用托管策略

  • 授予我的Lambda必要的权限以挖掘生产RDS数据库所在的VPC。
  • 如上面@portatlas所述,AWSLambdaVPCAccessExecutionRole托管策略就像手套一样适合(并且我们都知道IAM托管策略是AWS推荐的最佳实践)。
  • 这是针对已附加服务角色的Lambda。

1。取得Lambda服务角色

  • aws lambda get-function-configuration输出到grep中以生成角色 (可能是更简洁/更精简/更简单的方式)

    aws lambda get-function-configuration \
        --function-name <<your function name or ARN here>> \
        | grep "Role"
    
  • 返回

    "Role": "arn:aws:iam::000000000000:role/service-role/your-service-role-name",
    
  • 在角色ARN的最后斜杠 your-service-role-name 到#2

    之后取值

2。将托管策略AWSLambdaVPCAccessExecutionRole附加到服务角色

aws iam attach-role-policy \
    --role-name your-service-role-name \
    --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

答案 2 :(得分:2)

这是一种快速而肮脏的解决错误的方法。

在 AWS 控制台上打开 IAM,选择附加到 Lambda 函数的角色并为其授予 EC2FullAccess 权限。

这将允许您通过授予 EC2 控制访问权限来更新 Lambda VPC。 一定要去掉角色的权限,函数还是可以运行的。

是否比永久附加某些权限更安全?值得商榷。

答案 3 :(得分:2)

似乎已经有很多不同的方式回答了这个问题,但截至本文发布时,AWS 有一个托管策略。如果您只是搜索 AWSLambdaVPCAccessExecutionRole,您将能够附加它,并且此方法对我有用。

这是arn:

arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole

答案 4 :(得分:1)

如果您尝试在VPC中部署Lambda,并为该Lambda提供所需的网络接口相关权限let additionalCssStyle = document.getElementById('additionalCss'); if (! additionalCssStyle) { additionalCssStyle = document.createElement("style"); additionalCssStyle.id = 'additionalCss'; document.head.appendChild(additionalCssStyle); } additionalCssStyle.innerText = cssCode; ec2:DescribeNetworkInterfacesec2:CreateNetworkInterface(请参阅{{3 }}。

例如,此策略允许将Lambda部署到VPC:

ec2:DeleteNetworkInterface

答案 5 :(得分:1)

这实际上是一个常见问题。

您可以通过在“权限”选项卡下的Lambda执行角色中添加自定义内联策略来解决此问题。

只需添加:

  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ec2:DescribeNetworkInterfaces",
        "ec2:CreateNetworkInterface",
        "ec2:DeleteNetworkInterface",
        "ec2:DescribeInstances",
        "ec2:AttachNetworkInterface"
      ],
      "Resource": "*"
    }
  ]
}

如果您需要更多信息或感到困惑,请在此处找到带有图片的完整教程:https://ao.gl/the-provided-execution-role-does-not-have-permissions-to-call-createnetworkinterface-on-ec2/

答案 6 :(得分:-1)

这绝对是一个奇怪的错误,但您确定您添加的示例代码是您在lambda中使用的代码吗?

因为在您的代码中,您在通过回调返回控件后尝试在lambda中记录某些内容。换句话说,首先你告诉你的lambda你已经完成了。接下来,当它忙于关闭并返回结果时,您尝试进行一些记录...

首先,我试试这个:

exports.handler = (event, context, callback) => {
    console.log('this is a test');
    // do stuff
    callback(null, 'Hello from Lambda'); // only do a callback *after* you've run all your code
};

看看是否能解决问题。