我正在编写一个python脚本来查询Qualys API的漏洞元数据。我在AWS中将其作为lambda函数执行。我在控制台中设置了我的环境变量,但是当我执行我的函数时,我收到以下错误:
module initialization error: name 'QUALYS_USERNAME' is not defined
我正在使用这个os模块在我的处理函数中的代码中调用它们:
import os
import requests
import time
import lxml
import tinys3
from lxml import etree
def lambda_handler(event, context):
QUALYS_USERNAME = os.environ('QUALYS_USERNAME')
QUALYS_PASSWORD = os.environ('QUALYS_PASSWORD')
ACCESS_KEY = os.environ('ACCESS_KEY')
SECRET_KEY = os.environ('SECRET_KEY')
s = requests.Session()
s.headers.update({'X-Requested-With':QUALYS_USERNAME})
def login(s):
payload = {'action':'login', 'username':QUALYS_USERNAME,
'password':QUALYS_PASSWORD}
r = s.post('https://qualysapi.qualys.com/api/2.0/fo/session/',
data=payload)
def launchReport(s, polling_delay=120):
payload = {'action':'launch', 'template_id':'X',
'output_format':'xml', 'report_title':'X'}
r = s.post('https://qualysapi.qualys.com/api/2.0/fo/report/', data=payload)
global extract_id
extract_id = etree.fromstring(r.content).find('.//VALUE').text
print("Report ID = %s" % extract_id)
time.sleep(polling_delay)
return extract_id
def bucket_upload(s):
conn = tinys3.Connection(ACCESS_KEY,SECRET_KEY)
payload = {'action': 'fetch', 'id': extract_id}
r = s.post('https://qualysapi.qualys.com/api/2.0/fo/report/',
data=payload)
os.chdir('/tmp')
with open(extract_id + '.xml', 'w') as file:
file.write(r.content)
f = open(extract_id + '.xml','rb')
conn.upload(extract_id + '.xml',f,'X-bucket')
login(s)
launchReport(s)
bucket_upload(s)
以下是我在Lambda中定义的环境变量:
我不确定为什么会收到此错误。
答案 0 :(得分:4)
可能的原因:函数外部的内联代码在事件处理程序之前运行。
不相关:您应该使用IAM角色获取AWS凭据,并将参数存储用于其他非AWS凭证,而不是将环境变量用于凭据。
答案 1 :(得分:1)
您需要以字典形式而不是函数调用形式来访问环境变量。
QUALYS_USERNAME = os.environ["QUALYS_USERNAME"]
QUALYS_PASSWORD = os.environ["QUALYS_PASSWORD"]