如何使用AWS_IAM授权从lambda函数访问Appsync API

2024-06-01 04:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个GraphQL突变,它受到AWS_IAM授权的保护。我使用AWS_COGNITO_POOL作为主要授权人,AWS_IAM作为附加授权人。我正在使用无服务器appsync插件与AWS appsync集成。这就是突变:

updateUser(user_id: String!): String
@aws_iam

我需要从lambda函数(python)调用这个变异。到目前为止,我已经在无服务器配置中创建了IAM角色:

    UpdateUserMutationRole:
      Type: AWS::IAM::Role
      Properties:
        RoleName: ${self:provider.stage}-UpdateUserMutationRole
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - Effect: Allow
              Principal:
                Service:
                  - lambda.amazonaws.com
              Action:
                - sts:AssumeRole
        Policies:
          - PolicyName: ${self:provider.stage}-UpdateUserMutationLambdaPolicy
            PolicyDocument:
              Version: "2012-10-17"
              Statement:
                - Effect: Allow
                  Action:
                    - appsync:GraphQL
                  Resource:
                    - <GraphQL API>

我已尝试将此分配给lambda函数,但它不起作用:

  updateUserMutation:
    handler: <path-to-handler>
    role: UpdateUserMutationRole

在lambda函数中,我执行以下操作:

    session = requests.Session()
        session.auth = AWS4Auth(
            <Access_key>,
            <Access_Secret>,
            <region>,
            'appsync'
        )
        response = session.request(
            url=APPSYNC_API_ENDPOINT_URL,
            method='POST',
            json={'query': query, "variables": variables}
        )

但是,我不断得到“会话令牌无效”或“未经授权的异常”。到现在为止,我完全不知所措。这里有人能给我指出正确的方向吗。谢谢


Tags: lambda函数self服务器awsstringversionsession