मैं इवेंटब्रिज ईवेंट बनाने वाला लैम्ब्डा चाहता हूं लेकिन लैम्ब्डा को कॉल करते समय मुझे यह त्रुटि मिलती है:

User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action

मैंने नीतियां जोड़ी हैं लेकिन कोई बदलाव नहीं।

लैम्ब्डा कॉलिंग इवेंटब्रिज यहां है।


import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';

const eventBridge = new EventBridgeClient({ region: 'eu-north-1' });

export const post: APIGatewayProxyHandler = async (): Promise<APIGatewayProxyResult> => {
    const event = new PutEventsCommand({
        Entries: [{
            EventBusName: 'MyApiEventBus',
            Source: 'MyApiEventBus.OrderCreated',
            DetailType: 'OrderCreated',
            Detail: JSON.stringify({ description: 'order has been created' }),
        }]
    });
        eventBridge.send(event);

    return {
        statusCode: 200,
        body: '',
    };
};

यहाँ सीडीके विन्यास है। दो नीतियां हैं (संलग्न इनलाइन पॉलिसी, एडटॉरोल पॉलिसी) क्योंकि मैंने दोनों का परीक्षण किया है।

import {
    RestApi,
    DomainName,
    BasePathMapping,
    LambdaIntegration,
    Model,
} from '@aws-cdk/aws-apigateway';
import { EventBus, Rule } from '@aws-cdk/aws-events';
import { NodejsFunction } from '@aws-cdk/aws-lambda-nodejs';
import { Policy, PolicyStatement } from '@aws-cdk/aws-iam';

const MyApi = new RestApi(this, `RestApi`, {
  restApiName: 'My API',
  description: 'The My API',
});

// Add an Event Bus
const bus = new EventBus(this, `EventBus`, {
  eventBusName: 'MyApiEventBus',
});

// Add API endpoint
const ordersResource = MyApi.root.addResource('orders');

const ordersPostFunction = new NodejsFunction(this, `OrdersPostFunction`, {
  entry: './lambda.ts',
  handler: 'post',
});

// Allow lambda to create events
ordersPostFunction.addToRolePolicy(
  new PolicyStatement({
    actions: ['events:PutEvents'],
    resources: [bus.eventBusArn],
  }),
);

ordersPostFunction.role?.attachInlinePolicy(
  new Policy(this, `OrdersPostEventBusPolicy`, {
    statements: [
      new PolicyStatement({
        actions: ['events:PutEvents'],
        resources: [bus.eventBusArn],
      }),
    ],
  }),
);

// Role to allow for creating event (not working?)
bus.grantPutEventsTo(ordersPostFunction);

लैम्ब्डा भूमिका दस्तावेज़

{
  "sdkResponseMetadata": null,
  "sdkHttpMetadata": null,
  "partial": false,
  "permissionsBoundary": null,
  "policies": [
    {
      "arn": null,
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Action": "events:PutEvents",
            "Resource": "arn:aws:events:eu-west-1:120293923901:event-bus/MyApiEventBus",
            "Effect": "Allow"
          }
        ]
      },
      "id": null,
      "name": "MyApiOrdersPostEventBusPolicyACA51C2D",
      "type": "inline"
    },
    {
      "arn": null,
      "document": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Action": "events:PutEvents",
            "Resource": "arn:aws:events:eu-west-1:120293923901:event-bus/MyApiEventBus",
            "Effect": "Allow"
          }
        ]
      },
      "id": null,
      "name": "MyApiOrdersPostFunctionServiceRoleDefaultPolicyE7615F17",
      "type": "inline"
    },
0
Patrik 22 नवम्बर 2021, 16:52
कंसोल में लैम्ब्डा की नीति की जाँच करें - क्या इसमें सही कथन शामिल है?
 – 
gshpychka
22 नवम्बर 2021, 16:56
क्या आप लैम्ब्डा भूमिका से जुड़ी नीतियों का निरीक्षण कर सकते हैं, क्या उनमें वास्तव में त्रुटि संदेश में सूचीबद्ध इवेंटबस का क्रम है?
 – 
luk2302
22 नवम्बर 2021, 16:56
संपादित और जोड़ी गई लैम्ब्डा नीतियां और एआरएन शून्य प्रतीत होता है।
 – 
Patrik
22 नवम्बर 2021, 17:04
aws lambda get-policy ईवेंट नीतियों को वापस नहीं करता है
 – 
Patrik
22 नवम्बर 2021, 17:16

1 उत्तर

सबसे बढ़िया उत्तर

आपकी इवेंट बस eu-west-1 क्षेत्र में स्थित है, जैसा कि जेनरेट की गई नीति द्वारा दिखाया गया है, लेकिन आप इसे eu-north-1 से एक्सेस करने का प्रयास कर रहे हैं। क्षेत्र बदलें और यह काम करेगा।

1
gshpychka 22 नवम्बर 2021, 18:33