Эта ошибка возникает в AWS Lambda Function, когда я пытаюсь поместить_item () в DynamoDB.

c_table.put_item(Item={"id": result['conn_id'], "username": payload.get("username"), "created": datetime.utcnow().isoformat()})

WSConnectionTable:
  Type: AWS::DynamoDB::Table
  Properties:
    TableName: my_table_name
    AttributeDefinitions:
      - AttributeName: id
        AttributeType: S
    KeySchema:
      - AttributeName: id
        KeyType: HASH
    BillingMode: PAY_PER_REQUEST
    StreamSpecification:
      StreamViewType: NEW_AND_OLD_IMAGES

ConnectFunction:
  Type: AWS::Serverless::Function
  Properties:
    FunctionName: !Sub ${AWS::StackName}-ConnectFunction
    Description: !Sub
      - Stack ${StackTagName} Environment ${EnvironmentTagName} Function ${ResourceName}
      - ResourceName: ConnectFunction
    CodeUri: sources
    Handler: handlers.connection
    Runtime: python3.7
    MemorySize: 3008
    Timeout: 30
    Tracing: Active
    Policies:
      - AWSXRayDaemonWriteAccess
      - DynamoDBCrudPolicy:
          TableName: !Ref WSConnectionTable
    Environment:
      Variables:
        TABLE_NAME: !Ref WSConnectionTable
        TABLE_ARN: !GetAtt WSConnectionTable.Arn

Все работает хорошо, ожидайте, что после подключения WS я хочу сохранить идентификатор подключения в БД, и вызов put_item () завершится с ошибкой ниже:

[ERROR] ClientError: An error occurred (AccessDeniedException) when calling the PutItem operation: User: arn:aws:sts::74xxxxxxx:assumed-role/websocket-dev-ConnectFunctionRole-1PCCYG1DTLQYW/websocket-dev-ConnectFunction is not authorized to perform: dynamodb:PutItem on resource: arn:aws:dynamodb:us-east-2:74xxxxxxx:table/my_table_name_dev

Буду признателен за любую подсказку, как это исправить

1
Paullo 26 Сен 2020 в 04:45

1 ответ

Лучший ответ

Ваша таблица DdB называется my_table_name:

WSConnectionTable:
  Type: AWS::DynamoDB::Table
  Properties:
    TableName: my_table_name

И ваша Политика разрешает доступ только к этой таблице:

      - DynamoDBCrudPolicy:
          TableName: !Ref WSConnectionTable

Однако в сообщении об ошибке говорится, что вы пытаетесь получить доступ к другой таблице (называемой, my_table_name_dev) и получаете отказ в доступе

1
Marcin 26 Сен 2020 в 02:03