登录
首页 >  Golang >  Go问答

AWS Lambda Go 函数中敏感数据的保护与管理

来源:stackoverflow

时间:2024-02-16 17:54:23 415浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《AWS Lambda Go 函数中敏感数据的保护与管理》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我有一个可以在本地运行的函数,并且有一个使用 Viper 加载到应用程序中的配置文件,我还设置了 viper.AutomaticEnv()

部署到 AWS Lambda 后,环境变量似乎被忽略了。我转到 Viper 问题页面并发现了这个:https://github.com/spf13/viper/issues/584

看起来 Viper 需要加载配置文件,否则即使我们可以设置环境变量,它也会停止工作。

如何处理 Go 中 lambda 密钥的本地开发与部署?

如果可能的话,我希望避免使用 AWS Secrets Manager


正确答案


如何在 aws lambda 中处理机密有很多选项。我建议不要使用 viper 或任何这些工具。构建一个从环境 lambda 读取配置的 lambda 非常简单。

也就是说,我还建议从 aws ssm 参数存储中读取机密。

ma​​in.go

func (h handler) handleRequest() error {
    fmt.Printf("My secret: %s", h.config.secret)

    return nil
}

type configuration struct {
    secret string
}

type handler struct {
    config configuration
}

func newConfig() (configuration, error) {
    secret, ok := os.LookupEnv("SECRET")
    if !ok {
        return configuration{}, errors.New("can not read environment variable 'SECRET'")
    }

    return configuration{
        secret: secret
    }, nil
}

func main() {
    cfg, err := newConfig()
    if err != nil {
        fmt.Printf("unable to create configuration: %v\n", err)
        os.Exit(1)
    }

    h := handler{
        config: cfg,
    }

    lambda.Start(h.handleRequest)
}

无需使用 viper 并不必要地增加二进制文件的大小。请记住:二进制文件越大,冷启动时间越长。

如何处理 go 中 lambda 密钥的本地开发与部署?

通常,我们只在本地使用单元测试,这些测试使用不需要机密的模拟服务。大多数“集成”测试是在 aws 中完成的。每个开发人员都有自己可以部署的“环境”。为了管理这个,我们使用 terraform。

如果您确实需要在本地测试某些内容,我建议您创建一个测试文件,然后执行“gitignore”以避免提交它。在这个文件中,我只是对秘密进行了硬编码。

例如,您可以有一个 演示_test.go,您可以在 .gitignore 文件中忽略它。

理论要掌握,实操不能落!以上关于《AWS Lambda Go 函数中敏感数据的保护与管理》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>