电话
400 9058 355
在 google app engine 中,绝不能将 pem 私钥文件作为静态资源(如通过 `static_dir`)暴露,否则会被公开下载;正确做法是将其作为应用源码的一部分直接打包部署,并通过本地文件路径读取,确保不被 web 服务对外暴露。
Google App Engine 的安全模型明确区分了「静态文件」与「应用文件」:
假设你的项目结构如下:
my-app/ ├── app.yaml ├── main.go └── service-account-key.pem ← 放在根目录或子目录(如 ./keys/),但不被 static 规则覆盖
在 app.yaml 中不要为 PEM 文件配置静态路由:
# ❌ 错误:禁止这样写! # - url: /files # static_dir: files # ✅ 正确:不声明任何静态规则指向 PEM 所在路径
在 Go 代码中安全读取(推荐使用相对路径 + embed 或显式路径):
package main
import (
"io/ioutil"
"log"
"os"
)
func loadPEM() []byte {
// 方式1:直接读取(确保文件随应用部署且路径正确)
pemBytes, err := ioutil.ReadFile("service-account-key.pem")
if err != nil {
log.Fatal("Failed to read PEM file:", err)
}
return pemBytes
}
// 方式2(Go 1.16+ 推荐):使用 embed 防止运行时路径错误
// //go:embed service-account-key.pem
// var pemFS embed.FS
//
// func loadPEM() []byte {
// data, _ := pemFS.ReadFile("service-account-key.pem")
// return data
// }
url, err := storage.SignedURL("my-bucket", "my-object.txt", &storage.SignedURLOptions{
Method: "GET",
Expires: time.Now().Add(15 * time.Minute),
})综上,安全的核心原则只有一条:让 PEM 成为“不可被 HTTP 访问的内部资源”,而非“可被浏览器请求的静态资产”。遵循此原则,配合 Secret Manager 或 OAuth2 自动鉴权,即可兼顾安全性与可维护性。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...