Loading
システム管理者に対するフィッシング耐性MFA・全従業員ユーザーMFAの適用のお知らせ 続きを読む
Salesforce 組織の設定および管理
検索およびデータベース暗号化用の BYOK 秘密を生成するサンプルスクリプト

検索およびデータベース暗号化用の BYOK 秘密を生成するサンプルスクリプト

検索およびデータベース暗号化用の BYOK 素材をアップロードするのに役立つスクリプトが用意されています。検索の場合はアップロード可能な DEK、データベース暗号化の場合はアップロード可能なテナントの秘密が作成されます。スクリプトは秘密として乱数を生成し、証明書の公開鍵を使用して秘密を暗号化します。

必要なエディション

Salesforce Classic (使用できない組織もあります) および Lightning Experience の両方で使用できます。
使用可能なエディション: Salesforce Shield または Shield Platform Encryption ライセンスが付属する Enterprise Edition、Performance Edition、および Unlimited Edition。
Developer Edition で無料で使用できます。
メモ
メモ BYOK 鍵として秘密を使用できるのは 1 回のみです。複数の BYOK 鍵 (検索用とデータベース暗号化用など) が必要な場合は、それぞれに一意の秘密を使用する必要があります。また、このスクリプトはテナントの秘密の BYOK 素材を作成するために使用されるスクリプトとは異なります。代わりにこれらのテナントの秘密を作成する必要がある場合は、「BYOK テナントの秘密を生成するためのサンプルスクリプト」を参照してください。

このスクリプトを使用する前に、BYOK 互換の証明書を作成し、セッショントークンを生成する必要があります。データベースの暗号化と検索インデックスの暗号化では、自己署名証明書のみが必要です。

このスクリプトにより、検索インデックスまたはデータベース暗号化用の BYOK としてアップロードできる payload.bin という名前のファイルが 1 つ作成されます。この種別の BYOK 鍵素材の要件に従ってラップおよびエンコードされます。検索インデックス暗号化用のDEKとデータベース暗号化用のテナントの秘密が作成されます。

  1. スクリプトを含むファイルを作成し、先ほどダウンロードした証明書およびセッショントークンファイルと同じディレクトリに保存します。
  2. スクリプトが chmod 775 で実行可能であることを確認します。
    デフォルトでは、一時ファイルは削除されません。スクリプトの最後の行をコメント解除すると、自動的に削除されます。
  3. 証明書名とセッショントークンファイルを指定してスクリプトを実行します。たとえば、スクリプトに「2025_search_secretgen.sh」という名前を付けていて、証明書ファイルに「2025_search.crt」という名前を付けた場合、./2025_search_secretgen.sh 2025_search.crt を実行します。
  4. このスクリプトでは、payload.bin という名前のファイルが 1 つ生成されます。
    payload.bin と、以前に作成した自己署名証明書のセッショントークンファイルをアップロードします。
例

2025_search_secretgen.shファイルの内容。このスクリプトは Linux または MacO システムで実行できます。

このスクリプトは、Bring Your Own Key(BYOK)というプロセスを使用して、Salesforce Shield Platform Encryption用の安全な鍵を生成します。まず、Salesforce 証明書から公開鍵を抽出します。次に、2 つのランダムな AES 鍵 (一時鍵と「顧客」鍵) を作成します。一時鍵は、公開鍵と強力な暗号化スキーム (SHA-512 を使用する RSA-OAEP) を使用して暗号化されます。この暗号化された一時鍵は、別の暗号化スキーム (パディングを使用した AES 鍵ラップ) を使用して顧客鍵をラップするために使用されます。最後に、暗号化された一時鍵とラップされた顧客鍵を 1 つのペイロードに結合し、base64 形式でエンコードします。その後、このペイロードを Salesforce にアップロードして、機密データを安全に暗号化できます。

#!/bin/bash
set -euo pipefail

CERT_IN="$1"
OPENSSL="openssl"

# Extract public key from X.509 certificate
$OPENSSL x509 -in "$CERT_IN" -pubkey -noout > byok_public_key.pem

# Generate a random temporary AES key (256 bits)
$OPENSSL rand -out temp_aes_key.bin 32

# Encrypt the temp AES key using RSA-OAEP with SHA-512
$OPENSSL pkeyutl -encrypt \
  -pubin \
  -inkey byok_public_key.pem \
  -in temp_aes_key.bin \
  -out temp_key_wrapped.bin \
  -pkeyopt rsa_padding_mode:oaep \
  -pkeyopt rsa_oaep_md:sha512 \
  -pkeyopt rsa_mgf1_md:sha512

# Generate the actual target AES key to be wrapped
$OPENSSL rand -out target_aes_key.bin 32

# Convert temp AES key to hex format for the -K parameter
KEY_HEX=$(hexdump -v -e '/1 "%02x"' < temp_aes_key.bin)

# AES Key Wrap with Padding using OpenSSL 3.x
$OPENSSL enc -id-aes256-wrap-pad \
  -iv A65959A6 \
  -K "$KEY_HEX" \
  -in target_aes_key.bin \
  -out target_key_wrapped.bin

# Combine both parts into final payload
cat temp_key_wrapped.bin target_key_wrapped.bin > payload.bin

# Cleanup
rm "$CERT_IN" byok_public_key.pem temp_aes_key.bin target_aes_key.bin temp_key_wrapped.bin target_key_wrapped.bin
 
読み込み中
Salesforce Help | Article