需要编写一个Lambda函数在AWS云上运行,它需要访问企业内部的API获取JSON格式的数据,企业有网关和防火墙,API有公司的okta身份认证,通过公司的域账号来授权访问,现在需要创建一个专用的域账号,让Lambda函数访问Secret Manager,来获取账号密码,然后通过配置访问公司内部API的数据,请写出所有的开发配置步骤,以及完成这一功能的所有的Python源代码,需要确保安全性和可靠性。
一、架构设计
- Lambda函数部署在AWS公有云
- 通过AWS Secrets Manager存储Okta认证凭证
- Lambda通过HTTPS访问企业API网关
- 使用Okta的OAuth 2.0客户端凭证模式获取访问令牌
- 所有通信使用TLS加密
二、配置步骤
1. 创建专用域账号
- 在企业Okta控制台:
- 创建新应用(OAuth 2.0客户端凭证类型)
- 生成Client ID和Client Secret
- 配置API访问权限范围(Scopes)
2. 配置AWS Secrets Manager
aws secretsmanager create-secret --name prod/okta_api_creds \
--secret-string '{
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"token_url": "https://yourcompany.okta.com/oauth2/v1/token",
"api_endpoint": "https://internal-api.yourcompany.com/v1/data"
}'
3. 配置Lambda执行角色
IAM策略示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Resource": "arn:aws:secretsmanager:region:account-id:secret:prod/okta_api_creds-*"
},
{
"Effect": "Allow",
"Action": "logs:CreateLogGroup",
"Resource": "arn:aws:logs:region:account-id:*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": [
"arn:aws:logs:region:account-id:log-group:/aws/lambda/your-function-name:*"
]
}
]
}
4. 网络配置(可选)
如果企业API在私有网络:
- 部署Lambda到VPC私有子网
- 配置安全组出站规则
- 设置VPC对等连接或VPN到企业网络,具体来说,可以使用VPC对等连接连接到已有的可以连接到公司VPN网络,也可以在VPC网络里创建EC2实例安装可以连接到公司VPN的第三方连接软件实现连接,Lambda调用EC2上的Python代码实现,还可以使用AWS Site-to-Site VPN组件直接连接VPN实现,在Lambda函数中实现业务逻辑。