コンテンツにスキップ

セキュリティ系@パッケージ

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


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