セキュリティ系@パッケージ¶
はじめに¶
本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。
01. SOPS¶
インストール¶
▼ brewリポジトリから¶
$ brew install sops
SOPSの構成要素¶
▼ 平文ファイル¶
yaml
ファイル、.env
ファイルなどを暗号化できる。
暗号化すると、secrets
ファイルになる。
▼ secrets
ファイル¶
SOPSによって暗号化されたファイルであり、キーバリュー型ストアとして機能する。
sops
キー以下に暗号化の設定値が記載される。
他のキーバリュー型ストア (例:Hashicorp Vaultなど) よりも安全で、またクラウドキーバリュー型ストア (例:AWS パラメーターストアなど) よりも簡単に変数を管理できる。
*実装例*
ここでは、yaml
ファイルを暗号化する。
# 平文ファイル
$ cat foo-values.yaml
DB_USERNAME: hiroki-it
DB_PASSWORD: password
# 平文ファイルを暗号化する。
$ sops -e ./values/foo-values.yaml > ./secrets/foo-secrets.yaml
# 暗号化されたファイル
$ cat ./secrets/foo-secrets.yaml
# キーバリュー型ストア
DB_USERNAME: ENC[AES256...
DB_PASSWORD: ENC[AES256...
# SOPSの暗号化の設定
sops:
# AWS KMS
kms:
- arn: arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/<KMSのID>
created_at: '2021-01-01T12:00:00Z'
enc: *****
aws_profile: ""
# Google Cloud CKM
gcp_kms: []
# Azure Key Vault
azure_kv: []
# HashiCorp Vault
hc_vault: []
lastmodified: '2021-01-01T12:00:00Z'
mac: ENC[AES256...
pgp: []
unencrypted_suffix: _unencrypted
# 暗号化に使用したSOPSのバージョン
version: 3.6.1
▼ .sops.yaml
ファイルを使用する場合¶
sops
コマンドのパラメーターを定義する。
コマンドを実行するディレクトリに配置しておく必要がある。
creation_rules:
# 特定の平文ファイル名を設定する。
- path_regex: ./values/value\.yaml
# AWS KMSを暗号化キーとして使用する。
kms: "arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/*****"
creation_rules:
# ワイルドカードで平文ファイルを再帰的に指定できる。
- path_regex: ./values/*\.yaml
# Google Cloud CKMを暗号化キーとして使用する。
gcp_kms: "projects/foo-project/locations/global/keyRings/sops/cryptoKeys/sops-key"
# ファイル名が path_regexキーのルールに該当するため、AWS KMSを使用して暗号化される。
$ sops -e ./values/foo-values.yaml
▼ .sops.yaml
ファイルを使用しない場合¶
.sops.yaml
ファイルを使用しない場合は、環境変数でパラメーターを渡す必要がある。
$ export SOPS_KMS_ARN="arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/*****"
$ sops -e ./values/foo-values.yaml -k $SOPS_KMS_ARN
環境変数¶
EnvVar
キーの定義された項目を参照せよ。
サブコマンド無し¶
▼ -d¶
yaml
ファイルやjson
ファイルの値の部分を復号化する。
標準出力に出力されるため、ファイルに書き出すようにすると良い。
$ sops -d <暗号化された.yamlファイル/.jsonファイル> > <復号化された.yamlファイル/.jsonファイル>
*例*
$ sops -d ./secrets/foo-secrets.yaml > ./values/foo-values.yaml
▼ -e¶
外部の暗号化キー (例:AWS KMS、Google Cloud CKM、GPG、PGPなど) に基づいて、yaml
ファイルやjson
ファイルの値の部分を暗号化する。
環境変数や.sops.yaml
ファイルで暗号化ルールを定義しておく必要がある。
標準出力に出力されるため、ファイルに書き出すようにすると良い。
# AWS KMSを暗号化キーとして使用する。
$ export SOPS_KMS_ARN="arn:aws:kms:ap-northeast-1:<AWSアカウントID>:key/*****"
$ sops -e <平文の.yamlファイル/.jsonファイル> > <暗号化された.yamlファイル/.jsonファイル>
外部の暗号化キーを使用する場合、そのサービスの認証を済ませておく必要がある。
# AWS KMSを暗号化キーとして使用する場合
Failed to call KMS encryption service: AccessDeniedException: status code: 400, request id: *****
*例*
$ sops -e ./values/foo-values.yaml > ./secrets/foo-secrets.yaml