我正在开发一个使用一些敏感API密钥的react网站。
我在Google上托管应用程序,通过一个容器运行。
我想通过谷歌云秘密管理器访问API密钥,但我不能。当我尝试访问它们时,返回是“未定义的”。
下面是我的代码片段:
console.log(process.env.REACT_APP_API_KEY)以及Dockerfile:
FROM node:14-alpine AS builder
WORKDIR /app
COPY package.json ./
COPY yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build
FROM nginx:1.19-alpine AS server
COPY ./nginx.conf /etc/nginx/conf.d/default.conf
COPY --from=builder ./app/build /usr/share/nginx/html我使用gcloud命令部署应用程序:
gcloud run deploy test-gcr-react \
--image gcr.io/test-gcr-react-app/test-gcr-react \
--region=southamerica-east1 \
--set-secrets=REACT_APP_API_KEY=REACT_APP_API_KEY:latest \
--allow-unauthenticatedPS:我已经赋予了对服务帐户“默认计算服务帐户”的适当访问权限,使其成为秘密REACT_APP_API_KEY的“秘密管理器秘密访问器”。
发布于 2022-10-01 18:29:47
这是个常见的问题。考虑一下每个层的角色和行为:
因此,永远不要读env var (您的秘密)。NGINX不关心它,用户浏览器无法访问。
这里的诀窍是在构建时(在您的dockerfile中)在您的react应用程序的conf文件中设置API键。在运行时之前,秘密必须在JS中。NGINX只为JS服务,不更新/更改JS。
发布于 2022-10-01 17:50:54
我猜你指的是Secret Manager Secret Accessor角色。
为了做到这一点,您可以这样做:
gcloud secrets add-iam-policy-binding secret-id \
--member="serviceAccount:<project-number>-compute@developer.gserviceaccount.com" \
--role="roles/secretmanager.secretAccessor"但是,确保您的云运行是,如果没有将上面命令中的member字段更改为,则将其更正为适当的服务帐户。
https://stackoverflow.com/questions/73919156
复制相似问题