0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Karateでシークレット情報を扱う

Posted at

はじめに

APIテストではAPIキーやトークンなどの機密性の高いシークレット情報を使うケースが多々あります。
そこで今回はKarateでのシークレット情報の取り扱い方に触れてみたいと思います。

注意点

Karateが公開しているテンプレートではLogbackが使われており、テスト実行時のリクエスト/レスポンス内容がログファイルやテスト結果レポートに出力される場合があります。
また、テストスクリプトを記述するfeatureファイルや実行時の設定を記述するkarate-config.jsでは任意の内容をログ出力する処理を記述することもできます。
もし、その中にシークレット情報を使ったテストがあった場合、特に対策せずにテスト実行をするとセキュア情報がログファイルなどにそのまま出力されてしまいます。

対策

KarateのHttpLogModifierの実装クラスを作成し、セキュア情報のマスキングを行います。

実装クラスの作成

以下はKarateが公開している実装例です。
このheaderメソッドでは、リクエストヘッダーに”xss-protection”が含まれる情報がログ出力される際に”***”に変換するという処理が記述されています。
この実装例を参考に必要な箇所・必要な情報に対してマスキング処理を実装してください。

DemoLogModifier.java
package demo.headers;

import com.intuit.karate.http.HttpLogModifier;

/**
 *
 * @author pthomas3
 */
public class DemoLogModifier implements HttpLogModifier {
    
    public static final HttpLogModifier INSTANCE = new DemoLogModifier();

    @Override
    public boolean enableForUri(String uri) {
        return uri.contains("/headers");
    }

    @Override
    public String uri(String uri) {
        return uri;
    }        

    @Override
    public String header(String header, String value) {
        if (header.toLowerCase().contains("xss-protection")) {
            return "***";
        }
        return value;
    }

    @Override
    public String request(String uri, String request) {
        return request;
    }

    @Override
    public String response(String uri, String response) {
        // you can use a regex and find and replace if needed
        return "***";
    }

}

実装クラスの適用

次に、HttpLogModifierの実装クラスが動作するように設定します。

  • テストスクリプト毎に個別の設定をしたい場合
    対象のfeatureファイルにHttpLogModifierの実装クラスのインスタンスを作成する処理を記述してください。
.feature
* def LM = Java.type('demo.headers.DemoLogModifier')
* configure logModifier = new LM()
  • 全体に設定したい場合
    karate-config.jsにHttpLogModifierの実装クラスのインスタンスを作成する処理を記述してください。
karate-config.js
var LM = Java.type('demo.headers.DemoLogModifier');
karate.configure('logModifier', new LM());

この様な処理を実装することでKarateで安全にシークレット情報を取り扱ってAPIテストを実行することができます。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?