How do you grant iot:DescribeEndpoint to a lambda?

0

How do you add an action to a default lambda role?

        const p = new iam.ServicePrincipal('lambda.amazonaws.com');
        const role = new iam.Role(this, "someExecRoleID", {
                roleName: "someExecRole",
                assumedBy: p
            });
        role.grant(p, "iot:DescribeEndpoint");

        const serviceLambda = new nodejs.NodejsFunction(this, "WashnetEndpoints", {
                /* stuff deleted */
                handler: "getMqttEndpoint",
                role: role,
            }
        );

Is this because I'm assuming the lambda.aws.com service principal?

"AccessDeniedException: User: arn:aws:sts::312345678:assumed-role/blah is not authorized to perform: iot:DescribeEndpoint because no identity-based policy allows the iot:DescribeEndpoint action",
profile picture
wz2b
已提问 2 年前660 查看次数
2 回答
1
已接受的回答

Found the documentation (that's often the hardest part!) ... seems like resource '*' is what's required.

profile picture
wz2b
已回答 1 年前
  • Correct! Some IoT APIs will not have resources associated with them, so * is appropriate. I use this page to map API calls to what resources can be included in IAM/IoT Policy actions.

0

Unless there is some security problem with what I did, I think I figured it out:

        const role = new iam.Role(this,
            "myExecRole_id", {
                roleName: "myExecRole",
                assumedBy: p
            });
        role.attachInlinePolicy(new iam.Policy(this, 'describe-endpoint-policy', {
            statements: [new iam.PolicyStatement({
                actions: ['iot:DescribeEndpoint'],
                resources: [*]
            })],
        }));

though I feel like the resource should be something specific to my account, like

resources: [`arn:aws:iot:*:${this.env.account}:*`]`

That, however, is not correct. The ARN service must not be 'iot' . Maybe it does not matter because the action starts iot: but it seems like I should want to specify a more specific resource than * here?

profile picture
wz2b
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则