LoginSignup
0
0

Securely manage .env containing sensitive information in VSCode: SOPS

Last updated at Posted at 2023-06-28

2023年6月4回目です。

「積読」ならぬ、「積Issue」を減らす個人的なメモです。

Local の .env に password などの機密情報を残した経験はありますか?
それを commit してしまい、履歴から消した経験はありますか??

ぼく自身経験があります。
また、同僚のcommitで見かけることがあります。

developer が安全に開発に集中できる環境を提供するため、統一した対策を developer に提供する必要があります。

具体的には、SOPS:Secrets OPerationS について調べます。

今回使用した Code は、こちらです。

Installation

SOPS

  • dev container の Dockerfile に設定しています。

age

  • 暗号化ツールです。
  • 依存なしに構成するため、age を使います。
  • Cloud KMS なども使えます。--gcp-kms [value]
  • dev container の Dockerfile に設定しています。

# key を作成します。
age-keygen -o keys.txt
mkdir -p $XDG_CONFIG_HOME/sops/age
mv keys.txt $XDG_CONFIG_HOME/sops/age/.

Let's encrypt

暗号化前

root ➜ /workspaces/go-ent-example (main) $ cat sample.json 
{
        "hello": "Welcome to SOPS! Edit this file as you please!",
        "example_key": "example_value",
        "example_array": ["example_value1", "example_value2"],
        "example_number": 1234.56789,
        "example_booleans": [true, false]
}
root ➜ /workspaces/go-ent-example (main) $ 

暗号化

root ➜ /workspaces/go-ent-example (main) $ sops -e --age age1d2ku3ya3xa5ravmzvjvtl7sr40zyxfu4xrsp0g60xhje9wgr83dqqy7xra sample.json > enc.json
root ➜ /workspaces/go-ent-example (main) $ cat enc.json 
{
        "hello": "ENC[AES256_GCM,data:K6CADCb1t7V7wdCEPb20ZI6ixETDLvPaNW6diwhZ+HeeEZzNO0/0k0R7PGuQCA==,iv:CYtyN1j6mw0hjx5ei7oUHvpGBlGncUWhpG4FXdszJq0=,tag:/IA3CwMI/G+9XuTIHvVdog==,type:str]",
        "example_key": "ENC[AES256_GCM,data:b5IQPpp7N3D/fMVkPg==,iv:0cAhm5MTKIuQrVBVsPVoGfll01VFVBeLXHbt2hU39Ho=,tag:DlhZemgREki84DMmBXAiCA==,type:str]",
        "example_array": [
                "ENC[AES256_GCM,data:wo81LwGKjpJCniLIHFE=,iv:/AxPLhEEx4uX5/nTl3YRPWkvyg8PuEbldskE2J39MNw=,tag:oE0s8FcCQqRyGnc3LGZHOA==,type:str]",
                "ENC[AES256_GCM,data:4vEug2JFtJUJ97ZK/WA=,iv:wt4dNuYds5lEDPqx6nQew3KF+wcHQOTblUyzFZu06iE=,tag:DQokgrNGkS00oDx27LfFVA==,type:str]"
        ],
        "example_number": "ENC[AES256_GCM,data:OdOVRGuGYH4f3Q==,iv:P30Fo1W218zbytUsyFMAA6Enw3SLN9KVQBEfLeuHUws=,tag:EwxB63OS6nSl4I3b00biRQ==,type:float]",
        "example_booleans": [
                "ENC[AES256_GCM,data:KZEzDQ==,iv:uQn7bADQp1taReLL0VHdkFzx56HzTbH8sF+hQuRv+DE=,tag:f+y/Xs21Q3f5cdiBS3La4A==,type:bool]",
                "ENC[AES256_GCM,data:3HUKvnk=,iv:86CNbdkew83PSkyu/hBudTKz3mOazo7gxEgYsTSOEFE=,tag:7aq3/qR+YFTKHtA4eDVJDA==,type:bool]"
        ],
        "sops": {
                "kms": null,
                "gcp_kms": null,
                "azure_kv": null,
                "hc_vault": null,
                "age": [
                        {
                                "recipient": "age1d2ku3ya3xa5ravmzvjvtl7sr40zyxfu4xrsp0g60xhje9wgr83dqqy7xra",
                                "enc": "-----BEGIN AGE ENCRYPTED FILE-----\nYWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRV0VLQitkQy9Qd3grSzdj\nME5ZUjJETnFuWEdYRXZteFRWUGNXOEwvQVFvCjVXSE13b2ZCdnNWYzVaL1FUU2th\nRGhPVHh5bkU1djJoWWFpSFBsVlFHcncKLS0tIGZBWndoSmg2QXZUQUQvYkVWNkhl\nNGM0MWt6RndWSWRyYytBZjQ0WFlJTFUKWfJcEL50NQu6zObN/euA/wCuuy2q/FcB\nhL1n/QeD0CWHTD5JQjzIxUjj/pEx87Bwr+UQlN9/RSMW+oT3Bts4+w==\n-----END AGE ENCRYPTED FILE-----\n"
                        }
                ],
                "lastmodified": "2023-06-28T01:07:35Z",
                "mac": "ENC[AES256_GCM,data:T3Qz+zSyz9V5e+hRiNy4pMr4n7vw7GdgncnNY2iToWPxF38Cnlx1/KaKybXWEH5U2idkSZnaN8eH2BKApbB+92Gd/oLJ3iLM+hkZYK5S+2FsfzTV5fNYVdQsqC/ZHtz6sgHZrD3tNHw6BxlSbF6lI5VTMIL2AKAxX0Gd9MmWSgA=,iv:ZhQFkNRjujmeIJX8Rg0AQKJSNaJ+YA+IWcXfXe44eUQ=,tag:3rCZTIEPO0e4WLSQbc3/cQ==,type:str]",
                "pgp": null,
                "unencrypted_suffix": "_unencrypted",
                "version": "3.7.3"
        }
}

復号

root ➜ /workspaces/go-ent-example (main) $ sops -d -i enc.json
root ➜ /workspaces/go-ent-example (main) $ cat enc.json 
{
        "hello": "Welcome to SOPS! Edit this file as you please!",
        "example_key": "example_value",
        "example_array": [
                "example_value1",
                "example_value2"
        ],
        "example_number": 1234.56789,
        "example_booleans": [
                true,
                false
        ]
}root ➜ /workspaces/go-ent-example (main) $ 

Summary

SOPS について書きました。

「Git に credentials が commit されてるから、履歴を消して 😠 !」というのは最もです。

とはいえ、その credentials は rotation してしまえば良いです。

権限も minimum にしておけば事故は防げます。

そして、credentials の利用を可観測な状態にしておけば、大抵のことは問題無いと思います。

「あなたたち literacy ないよね 😤」と否定するのは、開発者の「自己効力感」を無くすことに繋がりかねないと思います。

そこは、「セキュアベース リーダーシップ」が必要だと思いますし、「自己効力感」を育てる声かけが必要だと思います。

Reference

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0