👻

SOPSとKMSを使った暗号化

に公開

SOPS(Secrets OPerationS)は、AWS KMS(Key Management Service)や他の鍵管理システムを使って機密情報を暗号化および管理するためのツールです。ここでは、SOPSを使ってAWS KMSを活用し、ローカルで機密情報を安全に管理する方法を紹介します。

1. 前提条件

  • Mac に aws cli と brew が入っている
  • aws configure で認証情報が設定済み
  • Homebrew で SOPS をインストールする

2. SOPSのインストール

SOPSをインストールするには、Homebrewを使うのが簡単です。

brew install sops

確認:

sops --version

3. KMSキーの作成

次のコマンドで、KMS の暗号化キー(ENCRYPT_DECRYPT 用)を作成します。

aws kms create-key --description "My KMS Key for SOPS" --key-usage ENCRYPT_DECRYPT --output json

✅ 実行結果の例:

{
    "KeyMetadata": {
        "AWSAccountId": "************",
        "KeyId": "********-****-****-****-************",
        "Arn": "arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************",
        ...
}

🔑 Arn の値(例:arn:aws:kms:ap-northeast-1::key/----************)を控えておきましょう。SOPSで使用します

4. 今回作成するディレクトリ構成

my-sops-project/
├── .sops.yaml                # SOPSの設定ファイル
└── secrets/
    └── credentials.json      # 暗号化対象の機密ファイル
  • .sops.yaml:SOPSのルールを定義する設定ファイル。どのディレクトリ・ファイルを暗号化するかなどを記述します。
  • secrets/:今回は、このsecretsディレクトリを暗号化対象とします。

5. .sops.yaml の作成(設定ファイル)

プロジェクトのルートに .sops.yaml ファイルを作成して、使用するKMSキーやファイルパターンを記述します。

creation_rules:
  - path_regex: 'secrets/.*'
    kms: >-
      arn:aws:kms:ap-northeast-1:************:key/********-****-****-****-************
  • path_regex:暗号化の対象となるファイルのパターンを指定します。この例では、secrets/ ディレクトリ内のすべてのファイルが対象です。
  • kms:使用するKMSキーのARN(Amazon Resource Name)を指定します。暗号化方法には、kms以外にも age や gcp などがあります。

6. ファイルの暗号化・復号化

暗号化対象のファイルを作成します。

mkdir secrets
echo '{"password": "supersecret"}' > secrets/credentials.json

AWS KMSからの認証情報を取得できるように、AWS_PROFILEを設定します。

export AWS_PROFILE=your-profile

暗号化:

sops -e -i secrets/credentials.json 

ここで使われているオプションは次の通りです:

  • -e:ファイルを暗号化するオプションです。これを指定することで、指定されたファイルを暗号化します。
  • -i:インプレースでファイルを変更するオプションです。これを使うと、元のファイルが暗号化された内容で上書きされます。
    このコマンドを実行すると、secrets/credentials.json が指定したKMSキーで暗号化されます。

復号化:

$ sops -d secrets/credentials.json      
{
        "password": "supersecret"
}                                              

ここで使われているオプションは次の通りです:

  • -d:ファイルを復号化するオプションです。このオプションを指定することで、暗号化されたファイルを元の形式に復元します。

実行結果として、暗号化されていた credentials.json の内容が元に戻り、セキュアな情報が復号化されます。

Discussion