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 年前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南