需要编写一个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函数中实现业务逻辑。