我想调用一个AWS API Gateway端点,该端点的执行AWS Lambda的授权设置为AWS_IAM,执行角色有权执行该API网关。
我是否仍然使用Lambda的当前执行角色签署API网关的HTTPS请求?
编辑:
查看http://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html,我可以使用SDK调用AssumeRole来承担有权执行Api Gateway的角色,然后提取可用于签署请求的密钥。
答案 0 :(得分:3)
可以从环境变量中检索lambda执行角色的凭据 - AWS_SESSION_TOKEN,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY。
您可以使用上述凭据对请求进行签名。签名文档在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
进行处理答案 1 :(得分:1)
与@Abhigna Nagaraja pointed out一样,您可以使用environment variables检索执行lambda的凭据。
如果您使用的是Python,则可以使用aws_requests_auth库对请求进行签名。您也可以查看文档中的complete example on how to sign the request。
以下是有关如何签署来自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': 200,
'body': json.dumps(response.json())
}
希望有帮助。