当前位置: 首页 > 知识库问答 >
问题:

我如何从AWS Lambda调用AWS_IAM授权的API网关endpoint,谁的执行角色有权限这样做?

左恺
2023-03-14

我想调用一个AWS API网关endpoint,该endpoint的授权设置为AWS_。

我是否可以使用 Lambda 的当前执行角色对 API Gateway 的 HTTPS 请求进行签名?

编辑:

看看 http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我也许可以使用SDK调用AcsuceRole来承担有权执行Api Gateway的角色,然后提取可用于对请求进行签名的密钥。

共有2个答案

陈阳舒
2023-03-14

正如@Abhigna Nagaraja指出的,您可以用环境变量检索lambda执行的凭证。

如果使用Python,可以使用aws_requests_auth库对请求进行签名。您还可以查看文档,了解如何签署请求的完整示例。

以下是关于如何签署来自lambda的请求的片段:

import json
import requests
import os
from aws_requests_auth.aws_auth import AWSRequestsAuth


def lambda_handler(event, context):
    api_id = 'XXXXXXXXX'  # Replace with your API Gateway Id
    api_url = 'https://{}.execute-api.eu-west-1.amazonaws.com/dev/hello'.format(api_id)

    aws_access_key_id = os.environ['AWS_ACCESS_KEY_ID']
    aws_secret_access_key = os.environ['AWS_SECRET_ACCESS_KEY']
    aws_session_token = os.environ['AWS_SESSION_TOKEN']

    auth = AWSRequestsAuth(aws_access_key=aws_access_key_id,
                           aws_secret_access_key=aws_secret_access_key,
                           aws_token=aws_session_token,
                           aws_host='{}.execute-api.eu-west-1.amazonaws.com'.format(api_id),
                           aws_region='eu-west-1',
                           aws_service='execute-api')

    response = requests.get(api_url, auth=auth)
    return {
        'statusCode': response.status_code,
        'body': json.dumps(response.json())
    }

希望有帮助。

戚良弼
2023-03-14

可以从环境变量(AWS_SESSION_TOKEN、AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY)中检索 lambda 执行角色的凭证。

您可以使用上述凭据对请求进行签名。用于签名的文档在这里http://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html.您还可以查看执行此操作的第三方库。

请注意,由于您有会话令牌,因此您需要按照此处所述进行处理 http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html#RequestWithSTS

 类似资料:
  • 在我的第一个nodejs应用程序中实现授权时,我遇到了一个问题,该应用程序使用expressjs、sequelize和jsonwebtoken进行身份验证。在内部,我想禁止/允许不同用户的路由,我不想使用另一个包,如oauth2或为我处理授权的东西。 目前,我已经创建了一个jsonwebtoken,它的有效负载中包含权限角色: 否我想在“GET/user”这样的调用中检查是否允许经过身份验证的用户

  • 我有下面的CloudFormation堆栈。2个lambda(问候和Auth),API网关配置为使用Auth lambda进行授权。 我的lambdas的代码如下: 我尝试在GET请求的头中发送此输入。响应为“未经授权”,没有来自Auth lambda CloudWatch日志中的任何日志。 发生什么事了?

  • 我正在尝试构建一个微服务架构。我已经了解了API网关的一些好处,比如:负载平衡、调用多个微服务并聚合结果、缓存管理等。所以我决定将它包含在我的系统中。 我的问题是,我应该在网关层还是在每个微服务endpoint单独实现授权?例如,在网关上验证用户,并以解密的形式将用户声明传递给每个服务调用的授权逻辑。 在调用每个服务之前授权一些聚合似乎是有意义的,并且节省了处理时间。然而,授权逻辑实际上是单个服务

  • 我有一个使用Swagger定义的API,它定义了以下API密钥授权程序: 有人能说说这件事吗?当使用带有Cloudformation的Swagger时,这是一个bug吗?

  • Using a delegation key The collaborator can now push to the repository using Docker Content Trust. Docker will automatically choose and pick the right key for the targets/release role. Edit the file o

  • 我创建了一些Lambda函数,并使用SAM进行了部署。部署是成功的,但当试图到达endpoint时,我总是获得 即使我使用头发送正确的承载令牌。然后,如果我去Authorizer并运行测试,它会很好地通过并在CloudWatch中生成日志,但是当我从前端应用程序或REST客户端应用程序运行到endpoint的请求时,我会得到未经授权的消息,并且检查CloudWatch,就不会执行Authorize