sopsってなに?
sopsはMozillaが作っているファイル暗号化用のコマンドラインツール。Gitコミットするファイルの暗号化などに使える。
使い方
インストール
brew install sops
利用したいAWS KMS Key ARNを指定
環境変数で指定する。
export SOPS_KMS_ARN="arn:aws:kms:ap-northeast-1:<myawsaccountid>:key/<mykeyid>"
エディタで新規暗号化ファイルを作成する
sops newfile.secret.yaml
$EDITORが開いて、それを保存すると暗号化済みファイルが作成される。KMS KeyのARNがYAMLに含まれているので、復号時にはKey ARNを指定する必要はない。
標準入力の内容から新規暗号化ファイルを作成する
できない。
特定の内容の暗号化ファイルを作成する
一時ファイルを経由する必要がある。
以下のようなYAMLをAWS KMSで暗号化したい場合、
$ k create secret generic testsecret --from-literal=foo=bar --dry-run -o yaml
apiVersion: v1
data:
foo: YmFy
kind: Secret
metadata:
creationTimestamp: null
name: testsecret
k create secret generic testsecret --from-literal=foo=bar --dry-run -o yaml > testsecret.secret.yaml
sops -e <平文ファイル>
を実行すると、平文ファイルを暗号化したものが標準出力に出力される。
$ sops -e testsecret.secret.yaml
[AWSKMS] INFO[0000] Encryption succeeded arn="arn:aws:kms:ap-northeast-1:<myawsaccountid>:key/<mykeyid>"
apiVersion: ENC[AES256_GCM,data:mIc=,iv:O9cnTy4nWRY5CY3BbXLGICt1e0KyC1HDfYMXxM0wRXw=,tag:UQQ2GeaqYD7J4WLyCvl4lw==,type:str]
data:
foo: ENC[AES256_GCM,data:v4P4yw==,iv:T89jBOzcxRE5Y8GVpibyrw5IVzlpJBMrbRQtpWtXSz8=,tag:cNJyGYbLPZXTkbMGcOK7yg==,type:str]
kind: ENC[AES256_GCM,data:XwSilhoU,iv:UYDguHZBotJvQ6iyzcUXDrdkjoaKMY097VACkLzZzL4=,tag:e9szbYBA2OvhFA3aZCFxfQ==,type:str]
metadata:
creationTimestamp: null
name: ENC[AES256_GCM,data:siTU+Lq+zXM6wg==,iv:q0cwXRIJNoam7zAhHAokYFV0rwRZekroUnAgUogsmH8=,tag:nqeeOK9t9vlLa7vaZ1Q3LQ==,type:str]
sops:
kms:
- arn: arn:aws:kms:ap-northeast-1:<myawsaccountid>:key/<mykeyid>
created_at: '2017-12-19T11:02:39Z'
enc: AQICAHj5+CYmKSHMJNh0QQMHsFDjETdV8lkcmL0GEwcYR6rhEQGtPaoRRqxxFtQo1a0hCqItAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMCpsQSf6z3KIrcGyAAgEQgDtNcOq8NJjwdxsHcp0ePon0extUfc3NrOkx5RyUUbB3KyUzi0WpyQy29XGUovRbG58Sisszr53KzJE5hg==
gcp_kms: []
lastmodified: '2017-12-19T11:02:39Z'
mac: ENC[AES256_GCM,data:gyUosrc+BwtiqHKOe9FBNi/3XnHQqDNDazmsDQCjNsRn8efAXNK/0VqI7EOrgy7rGycbB7ZQ0ZZO7AG3m/kpDzlHBMSEDMkB7AyJBXeaqTMXiNfRRrI4Qn6i7FdPBeFOs5w+q6RxDevmiorYFdKpdTQQIFNQW4EPX4WtC4bGkk4=,iv:AZNw88CPip+DkBbPcH6BoG2YYfivoFPNKPyGdsl++cw=,tag:42vXym8ALKDbYy2vyKgfMA==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.0.0
ファイルにリダイレクトする。
$ sops -e testsecret.secret.yaml > testsecret.secret.sops.yaml
[AWSKMS] INFO[0000] Encryption succeeded arn="arn:aws:kms:ap-northeast-1:<myawsaccountid>:key/<mykeyid>
ファイルを復号してパイプする
sops -d <暗号化済みファイル>
を実行すると、復号されたものが標準出力に出力される。
$ sops -d testsecret.secret.sops.yaml | k create -f -
[AWSKMS] INFO[0000] Decryption succeeded arn="arn:aws:kms:ap-northeast-1:<myawsaccountid>:key/<mykeyid>"
[SOPS] INFO[0000] Data key recovered successfully
secret "testsecret" created
暗号化済みファイルを編集する
sops
コマンドをエディタのように使う。具体的には、sops <暗号化済みファイル>
を実行すると、そのファイルを復号してから、環境変数EDITOR
で指定されたエディタ(たいていデフォルトはviになってると思う)で開いてくれる。
sops testsecret.secret.sops.yaml
エディタで内容を編集して、保存、その後にエディタ終了すると、sopsが自動的に結果を再度暗号化してファイルに書き出してくれる。