Craft Secert Manager で機密情報を管理する
Craft Secret Manager は機密データの管理機能です。Secret Managerを使うことで、Craft Functions内でAPIキー、パスワード、証明書などの機密情報を安全に扱うことができます。
シークレットを作成する
- シークレット一覧画面で「作成」を選択します。
- 次の項目を入力します。
- シークレット名: コード内で利用する名前を指定します。英数大文字およびアンダースコア
_
のみ入力可能です。 - データ: 機密データを入力します。作成後は管理画面からは閲覧できません。
- シークレット名: コード内で利用する名前を指定します。英数大文字およびアンダースコア
- 「保存」を選択します。
作成したシークレットの情報は変更できません。データを変更する場合はシークレットを削除して新たに作り直してください。
シークレットを削除する
- シークレット一覧画面で対象のシークレットの[…]メニューから[シークレットの削除]を選択します。
Function内でSecretを利用する
MODULES.secret.get
でSecretの値を取得します。
- 引数には
keys
をキーに持つオブジェクトを渡しますkeys
の値として、Craft Secret Manager作成したSecretの名前を配列として渡します。
- Secretの名前をキーにもつオブジェクトが返却されます。
//// KARTE_SECRET_KEY という名前のSecretの値を取得するconst { secret } = MODULES;const secretValues = await secret.get({ keys: [ 'KARTE_SECRET_KEY' ] })
// "KARTE_SECRET_KEY is {{ Secret Managerで設定した値 }}"logger.log(`KARTE_SECRET_KEY is ${secretValues.KARTE_SECRET_KEY}`)
//// 分割代入の例const { KARTE_SECRET_KEY: secretKey } = await secret.get({ keys: [ 'KARTE_SECRET_KEY' ] })
// "KARTE_SECRET_KEY is {{ Secret Managerで設定した値 }}"logger.log(`KARTE_SECRET_KEY is ${secretKey}`)
サンプルコード
KARTEのサーバーサイドAPI (API v2) を使う場合の例です。
- Appのアクセストークンをシークレット
KARTE_API_TOKEN
として保存します - デプロイ時にpackagesでapiモジュールを指定します
// ファンクション作成・編集時にpackagesでapiを取り込んでおくimport api from 'api';
export default async function (data, { MODULES }) { const { initLogger, secret } = MODULES; const logger = initLogger({logLevel: 'DEBUG'});
// 管理画面で KARTE_API_TOKEN をあらかじめ設定しておく。 const { KARTE_API_TOKEN: token } = await secret.get({ keys: [ 'KARTE_API_TOKEN' ] });
// api() の引数はAPIv2リファレンスを参照。 // https://developers.karte.io/reference/post_v2-track-event-write const insight = api('@dev-karte/vx.y#zzzzzzzzzzzzzz'); insight.auth(token);
// API呼び出しは省略。 // ...}