Skip to content

Commit 783e856

Browse files
aster-voidclaude
andcommitted
security: SOPS_AGE_KEY の build ログ漏洩修正 + age 鍵 rekey
Dockerfile: ENV SOPS_AGE_KEY=... を削除し ARG のみに。ENV 経由だと ビルドログとイメージレイヤー履歴に値が焼き込まれてしまうため。 ARG は RUN のシェル環境変数として自動公開されるので sops は引き続き動作。 .sops.yaml + secrets: 旧鍵を破棄し dev/prod 用に新規 age 鍵を発行、 secrets を新鍵で再暗号化。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent cb111ea commit 783e856

4 files changed

Lines changed: 38 additions & 18 deletions

File tree

.sops.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1-
keys:
2-
- &project age1gsn5pg5pkk89zsukc94gqwlu7zyrep0prm7pwc787tcegapgmvgqzeq64c
1+
_:
2+
keys:
3+
- &dev age1npjpcsp6rd7jf3652cnek0yj8kwxr36yukgv6jykfrv0vlpkw4nq5snp2s
4+
- &prod age1yxtlssfn7kjarthk5jyxph55yp2d8ar7tmzy6cvm5mck7kyzrsnsj6hmw4
35

46
creation_rules:
57
- path_regex: secrets\.(dev|prod)\.yaml$
68
key_groups:
79
- age:
8-
- *project
10+
- *dev
11+
- *prod

Dockerfile

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ RUN bun install --frozen-lockfile
2020
COPY . .
2121
RUN bun run prepare
2222

23-
# Build with sops secrets
23+
# SOPS_AGE_KEY: ARG only (no ENV) — ENV bakes the value into image history and build logs.
2424
ARG SOPS_AGE_KEY
2525
ARG SECRETS_FILE=secrets.prod.yaml
26-
ENV SOPS_AGE_KEY=${SOPS_AGE_KEY}
27-
RUN sops exec-env ${SECRETS_FILE} 'bun run build'
26+
RUN sops exec-env "$SECRETS_FILE" 'bun run build'
2827

2928
FROM base AS executor
3029
WORKDIR /app

secrets.dev.yaml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,23 @@ GITHUB_CLIENT_SECRET: ""
1616
PUBLIC_SHOW_DEV_BANNER: ENC[AES256_GCM,data:JL5dRkg=,iv:5hiMfw/jJJRSLyHDV1jhdi1kW7NaN38ToDTJjmzv8pQ=,tag:IqQzEPVrhAxcXI+UXpq2eg==,type:str]
1717
sops:
1818
age:
19-
- recipient: age1gsn5pg5pkk89zsukc94gqwlu7zyrep0prm7pwc787tcegapgmvgqzeq64c
19+
- recipient: age1npjpcsp6rd7jf3652cnek0yj8kwxr36yukgv6jykfrv0vlpkw4nq5snp2s
2020
enc: |
2121
-----BEGIN AGE ENCRYPTED FILE-----
22-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaZ0NjbVpFbVJ5TS8xSlNW
23-
a0hmOXRrQ2xpYkVJWHhVRm9lODRTUldxeTE0CnRGemp4dEZKV29JbjhPL2RVa3lG
24-
WGNTdE9RYmZ0L1BQRjQyQ1dwU0x3dlkKLS0tIFc4NXE4ZFRhYmFtWlR2M3lpWVV1
25-
Y2M0Q3NYeFBVTjZKOFNIS0x6dnRPUEEKCt8q9U5HaLS0Mm2JNmODlECAYjN8nn+1
26-
zlbwhcAUqbhFd8HteSbp8jTgp14PUuig/c2c3JDOmgQfiITZaxLayQ==
22+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBoVDNLZVh1Y21OWnVrQ0JV
23+
V3VYM0xtRWJrTU00L2daY1A5VFIrM1ZaQVhBCkxQUGFPQzZ5ZmU0QnZKYTFidnQx
24+
eXFZZVQ4ZFZPdVRWdnpDK2pUUlRrYncKLS0tIGtxWmUrQ25TakpENUJ5ZzBOd2tC
25+
VW1melRsZ3dMTHR6ZE93dm9JSjdhQVUKLdPeJOrWUEcV1SQLBAd22ijAoFYgFhgY
26+
4gYMBsa+nT6nb+/0sAKdes5HQHe/nYPbe1iuq/NINKJLrV1g3VKShQ==
27+
-----END AGE ENCRYPTED FILE-----
28+
- recipient: age1yxtlssfn7kjarthk5jyxph55yp2d8ar7tmzy6cvm5mck7kyzrsnsj6hmw4
29+
enc: |
30+
-----BEGIN AGE ENCRYPTED FILE-----
31+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnTXIxTGxBNlJpWk05SWg0
32+
N2ZKT0lSaU1kU1AxM1o5V0RTSitVZjE5SkNFCm5EQ0tCNG5BVkVlKzRWaG9aL29X
33+
dzM5YXA1eUdwY3JnUXlabEowVW5XZlUKLS0tIG04YUMrUHgzRGFPRlNwQWk5bWly
34+
S2RXU0N6K3NaK1hVZXRzZWJ5bEpBNW8KlxFm+4quPo2Zk2qMnK5FaxMcgbXgDloe
35+
28SfxVFH6CIKLhz+XNA8bqSn1uwspePNBtwwyNUnmChbHMft5aWCZw==
2736
-----END AGE ENCRYPTED FILE-----
2837
lastmodified: "2025-12-25T07:13:10Z"
2938
mac: ENC[AES256_GCM,data:dMmT+ETtHZD5UDoeZkgbwq/KFkzk84IBqMpIjqGf+TnjCP3CPqCMXI8kUMqu0oDgMREyHFulg2jaOyM6AJi3ijoLREz91jLrFyuPob2hz2N+pG3StBv05gdwiEixVLt57EKQ8YNMoYaeCVG68aGoSs5qxB6sweiVmfnZLALO6Yw=,iv:HMl7nMLCmfLEIRNi6j2k0FcT+F/qvram1PAK/wA24TU=,tag:pPDWrQhryRouksHAHsWL6g==,type:str]

secrets.prod.yaml

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,23 @@ CLOUDFLARE_API_TOKEN: ENC[AES256_GCM,data:G1mLIuB0vbB6r2arvlxwy5bMmRRYi4p+EQC1Jq
1313
PUBLIC_SHOW_DEV_BANNER: ENC[AES256_GCM,data:7We5Qg==,iv:wDk1hniVqw6QIh2k8uWeo0RqGwql7MJH7bv5B+LLEtM=,tag:3p46YbNP7HIEzxZ6pNBQ1g==,type:str]
1414
sops:
1515
age:
16-
- recipient: age1gsn5pg5pkk89zsukc94gqwlu7zyrep0prm7pwc787tcegapgmvgqzeq64c
16+
- recipient: age1npjpcsp6rd7jf3652cnek0yj8kwxr36yukgv6jykfrv0vlpkw4nq5snp2s
1717
enc: |
1818
-----BEGIN AGE ENCRYPTED FILE-----
19-
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwRWovR2lYZjk5UzQ0Y2Ri
20-
QXAxam5LaEY2S3hFREVEUHJzdDNQbCs2T3hnCkprMDNlamZPQmhvTXh1SUdOUHNX
21-
OEhTYWlLMVdsaVRuUDdPRVZvRmc3VkEKLS0tIGlOK1JScmJtQVJPWXErZkc2VVNR
22-
NHZSdEp1WGc4S2ppK1ZKcDZnU0JRQmMKJj4n6DBAozt2DTlYFIhd1jWWLGMYalAM
23-
+Txthl+D2hQNSITfK7jzVXIhk4z3g2ahNXscRmgrU9u4V0Jj6Gzz/g==
19+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwb2NRbWtvd3Y5RkdHSUZN
20+
YVE5aHFkRlV3Qzl3dXZONXF2RE9DaDVHRXpvCmZ6cis5N290NWFnbWgyWENnQm1S
21+
SVk0TjlqQzFIMUR3M24xNlJXZy92TzgKLS0tIHRkaTZrbFN2T0pDVG1kRUU2alp4
22+
ZklUSkVEVXFLMGMzSnQ5ODlPS0M3aEUKGVzjwNtKHgQ+unSL6eE6ZjQWKGKiL2SY
23+
2ahOSYUwM2V4kpGKZK5GfOSct0T9tQeEHx8Vs0fpla0RLtBd92R6uQ==
24+
-----END AGE ENCRYPTED FILE-----
25+
- recipient: age1yxtlssfn7kjarthk5jyxph55yp2d8ar7tmzy6cvm5mck7kyzrsnsj6hmw4
26+
enc: |
27+
-----BEGIN AGE ENCRYPTED FILE-----
28+
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBMQlVTVmh0ZlJ5d09qRU9N
29+
Ym1neTB5NDZ1N0tuQjR3RVJBN3R0Ykd0bnprCnhqSGlRUThPUTVwVmc3M2VUNlJS
30+
VWtnWTlvUlJYaWhQYjBNeVEyMEp3aU0KLS0tIFFJMm5OSFpyQ2UwdDN1Wk1iMURu
31+
dkpGc0E5TllENzAxbWxEeU1VYmdiUGcKL2iQoVETAdYQNqPnzPc9Iwh5fVzwbIkb
32+
h/H7rb/ekOJHWSyeUJeH1D/O5PICUN3bfpu7q3EdL0O9o1sN7O6fyQ==
2433
-----END AGE ENCRYPTED FILE-----
2534
lastmodified: "2025-12-24T15:07:19Z"
2635
mac: ENC[AES256_GCM,data:+f8qInhzG3mqaKSGPORLCJ42LeNyfSTtisyz3FURV68uogxSFo0m4sxwkDBQMAUdlhBFzYYIBq0y6gI7C8sk3yxpUjdOgvXj8UhACRpthRe71IxiAcG0VssyQv6oV2+0amLE/rUlTUeSkXq+aT/9zPn5698MPm7M2yQw5gf0jFE=,iv:pHXF12m/vqVpJvURSlzkH33zxZl/pOyV+7Kbettb+IM=,tag:/uLx/ZQiKEocfV1/T7CUDQ==,type:str]

0 commit comments

Comments
 (0)