背景
Salesforce Data Cloud と Amazon S3 を組み合わせることで、PDF、画像、ログなどの非構造ファイルを効率的に取り込み、RAG(Retrieval-Augmented Generation)による検索・分析に活用できます。本記事では、Salesforce公式の手順を基に、公式ドキュメントに記載が少ない S3 コネクター設定、DLO 作成、Lambda によるファイル通知、接続アプリの OAuth 設定などの実務上のポイントを補足解説します。手順通り実行すれば、S3 のファイルが Data Cloud に自動取り込まれ、RAG による検索・分析が可能になります。
手順
こちらの公式ドキュメントをベースに、実運用で必要な細かい設定や注意点を補足しながら進めます。
S3コネクターの作成
Salesforce と S3 を接続するために、まずコネクターを作成します。
- 接続名:自由入力
- 接続の API 参照名:英数字(日本語不可)
- 認証の詳細:Access Key/Secret Based を推奨
- AWS アクセスキー:IAMユーザのアクセスキー
もしまだ作成してなければ以下のステップで作成できます- IAMメニューを選択し → 対象となるIAMユーザを選択し → 「Security credentials」のタブ選択する
- 下の方にスクロールし、「Access keys」のセクションで「Create access key」ボタンから作成できる
- デフォルトのままで作成する(自分は現状2つ作成したので、新たに作成することができないため、スクリーンショットを省略させていただく)
- 注意事項:アクセスキーのシークレットは作成した後参照することができないため、作成したら必ずすぐにCSVファイルとして保存した方がおすすめする
- AWS シークレットアクセスキー:作成時に表示されるシークレット
- バケット名:既存または新規作成したバケット
注意事項: 上記作成したアクセスキーのユーザは必ずこのバケットにアクセス権があることを確認してください。「AmazonS3FullAccess」のアクセス権持ってれば使用できるが、特定のバケットのみアクセス権を付与したい場合、以下のようなコードで付与できます:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListBucketAccessTestCsHarmos",
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": "arn:aws:s3:::<バケット名>"
},
{
"Sid": "ObjectReadWriteAccessTestCsHarmos",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject",
"s3:GetObjectVersion",
"s3:DeleteObjectVersion"
],
"Resource": "arn:aws:s3:::<バケット名>/*"
},
]
}
DLO(データレイクオブジェクト)の作成
非構造データ取り込み用の DLO を作成します。
- Salesforce で Data Cloud アプリを開く
- データレイクオブジェクトタブに「新規」ボタンをクリックし、「外部ファイルから」を選択する
- 次へ → Amazon S3
- 接続先は先程作成したS3コネクターで、「ディレクトリ」はこのDLOが同期できるディレクトリ範囲、ファイル名パターンはワイルドカードで設定
- 次へクリックして、非構造化データレイクオブジェクトのフォームに適切な値を入力

注意事項: ここで「オブジェクト API 参照名」、「オブジェクト名」と「オブジェクト API 参照名」を同じ名前で入力すると、後々検索しやすくなる - 次へクリックして、検索インデックス設定にはデフォルトのままで問題ない
- 最後に保存をクリック
この時点で、作成されたDLOはまだ何もない状況です。これ以降のステップが完了したら、初めてS3からRAG化の処理が実行さます。
ファイル通知とLambda関数の生成(最難関セクション)
DLO 取り込みの自動化には以下の権限が必要です。
IAM
- iam:AttachRolePolicy
Lambda
- iam:CreateRole
- lambda:CreateFunction
- lambda:InvokeFunction
Secrets Manager
- secretsmanager:CreateSecret
- secretsmanager:PutResourcePolicy
S3(公式ヘルプページには記載がないけど、こちらの権限がないとS3のデータ操作ができない)
- s3:GetObject
- s3:PutObject
- s3:DeleteObject
- s3:GetObjectVersion
- s3:DeleteObjectVersion
必要な S3 バケット
- 非構造データ保管用バケット
- Lambda 関数 zip を配置するバケット(ソースコード保管用)
事前準備(PC)
以下のツールそれぞれ事前にダウンロードしインストールします。
認証用の鍵の作成
S3からSalesforceへのデータ転送は、接続アプリを介して行われます。このプロセスには認証の発行が必要となるため、本セクションでは、認証鍵の生成方法について説明いたします。鍵の保存先ディレクトリに移動し、以下のコマンドを順番に実行してください。
-
openssl genrsa -out keypair.pem 2048
プライベートと公開鍵のkeypairを作成 -
openssl req -new -x509 -nodes -sha256 -days 365 -key keypair.pem -out certificate.crt
デジタル証明書を作成
質問に従って回答してください。例:
❯ openssl req -new -x509 -nodes -sha256 -days 365 -key keypair.pem -out certificate.crt
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SF
Organizational Unit Name (eg, section) []:DU
Common Name (e.g. server FQDN or YOUR name) []:ARU
Email Address []:aru@example.com
-
openssl pkcs8 -topk8 -nocrypt -in keypair.pem -out private.key
pkcs8 秘密キーを作成
S3ファイル通知インストーラーのスクリプトと関数をダウンロード
以下のソースコードをPCにダウンロードしてください:
- S3 ファイル通知インストーラ スクリプトをダウンロード(ファイル数:3つ)
- aws_lambda_function.zip をダウンロードして解凍
接続アプリとOAuth設定
S3 からのデータ投入には、接続アプリの作成が必須となります。以下に、接続アプリの作成手順を詳細に説明します。
接続アプリの作成
- まずは接続アプリケーションの作成を許可
設定画面のクリック検索に「外部クライアントアプリケーション」を検索し、設定を選択し、スイッチをオンにする - そして同じ画面にある「新規接続アプリケーション」のボタンをクリックする
- 基本情報の入力箇所に適切な情報を入力し
- 「OAuth 設定の有効化」をチェックし
- 「コールバック URL」に 「https://salesforce.com 」を入力し
- 「デジタル署名を使用」をチェックし
- 上記作成されたCRTファイルを選択して
- 「選択した OAuth 範囲」に以下の範囲を選択し:
- API を使用してユーザーデータを管理 (api)
- Data Cloud の取り込み API データを管理 (cdp_ingest_api)
- いつでも要求を実行 (refresh_token, offline_access)
- その他の入力箇所はデフォルトのままで良い
保存ができたら、「コンシューマーの詳細を管理」ボタンをクリックし、コンシューマー鍵とコンシューマーの秘密を保管してください。
OpenID ConnectとOAuthの設定
クイック検索から「OAuth および OpenID Connect 設定」を検索し、「OAuth ユーザー名パスワードフローを許可」をオンにしてください。

コールバックURLの確認
API統合のOAuth設定の有効化で作成したコンシューマーキーとコールバックURLを使用し、次のURLをブラウザに貼り付けてください。
<YOUR_ORG_URL>/services/oauth2/authorize?response_type=code&client_id=<YOUR_CONSUMER_KEY>&scope=api refresh_token cdp_ingest_api&redirect_uri=<YOUR_CALLBACK_URL>&code_challenge=SHA256
- YOUR_ORG_URL: SF環境のログイン後のURL
例:https://orgfarm-39a0766dc9-dev-ed.develop.my.salesforce-setup.com/ - YOUR_CONSUMER_KEY: 接続アプリから取得されたコンシューマー鍵
- YOUR_CALLBACK_URL: 「https://salesforce.com 」を入力してください
ファイル通知処理の実行
上記でダウンロードしたS3 ファイル通知インストーラ スクリプトのディレクトリに移動し、input_parameters_s3.confのファイルを開きます。
こちらのファイルの中にはファイル通知処理に必要は環境変数があり、個人の環境に基づいて記載します。
環境変数の解説
- SF_USERNAME: Salesforceログインユーザ名
- SF_LOGIN_URL: Salesforce組織のログインURL。本番環境は
https://login.salesforce.comで入力する。サンドボックス環境はhttps://test.salesforce.com - SF_AUDIENCE_URL: Salesforce組織のログインURLと同様な値で問題ない
- AWS_ACCOUNT_ID: AWSアカウントID
- REGION: 上記AWSアカウントIDのリージョン
- EVENT_S3_SOURCE_BUCKET: 非構造データの保管先のS3バケット。必ず上記作成したS3コネクターと同様な値で記載する
- EVENT_S3_SOURCE_KEY:
EVENT_S3_SOURCE_BUCKETに記載したバケット内の対象とするディレクトリ。必ず上記作成したDLOと一致する。(例:pdfのディレクトリ名など) - LAMBDA_FUNC_S3_BUCKET: 一時的にaws_lambda_function.zipを保管するS3バケットの名前
- LAMBDA_FUNC_LOC_S3_KEY:
LAMBDA_FUNC_S3_BUCKETに使用するディレクトリ名 - SOURCE_CODE_LOCAL_PATH: 上記ダウンロードしたaws_lambda_function.zipのPCローカルパス
- LAMBDA_ROLE: アルファベットの自由入力。AWS上でユニークなID
- LAMBDA_FUNC_NAME: 自動的に作成する予定のLambda関数名
- CONSUMER_KEY_NAME: 作成した接続アプリのコンシューマーキーの環境変数の保存先。アルファベットの自由入力。AWS上でユニークなID
- CONSUMER_KEY_VALUE上記作成して接続アプリのコンシューマー鍵
- RSA_PRIVATE_KEY_NAME: アルファベットの自由入力。AWS上でユニークなID
- PEM_FILE_PATH: 上記作成したPEMファイルのPCPCローカルパス
実行前の事前準備
AWSのセッションを発行するためには以下のコマンドを実行する:
aws configure
上記のコマンドで質問されたことを適切に回答する。
例:
❯ aws configure
AWS Access Key ID [****************VC75]: <上記作成したAWSのIAMユーザのアクセスキー>
AWS Secret Access Key [****************ijFZ]: <上記作成したAWSのIAMユーザのシークレットアクセスキー>
Default region name [ap-northeast-1]: ap-northeast-1
Default output format [json]: json
成功したら以下のコマンドでAWSのセッショントークンを取得する:
aws sts get-session-token
もし使用されてるAWSのユーザがMFA連携をされてるのであれば、以下のコマンドでセッショントークンを取得できる:
aws sts get-session-token \
--serial-number <IAMユーザのシリアル番号> \
--token-code <MFAのコード>
注意事項: シリアル番号はIAMユーザの詳細ページから「Security credentials」タブにある「Multi-factor authentication (MFA)」の箇所を参照してください。
上記のコマンドで一時的なアクセス情報が発行されたので、PCのローカル環境に実行する必要があります。
Mac OSの場合こちらです:
export AWS_ACCESS_KEY_ID=<取得された一時的なアクセスキー>
export AWS_SECRET_ACCESS_KEY=<取得された一時的なシークレットアクセスキー>
export AWS_SESSION_TOKEN=<取得された一時的なセッショントークン>
Windowsの場合、PowerShellやsetコマンドでexport代わりに実行できそう(Windows環境を持ってないため、まだ試してない)
PowerShell:
$env:AWS_ACCESS_KEY_ID = "<取得された一時的なアクセスキー>"
$env:AWS_SECRET_ACCESS_KEY = "取得された一時的なシークレットアクセスキー>"
$env:AWS_SESSION_TOKEN = "<取得された一時的なセッショントークン>"
set:
set AWS_ACCESS_KEY_ID=your_access_key
set AWS_SECRET_ACCESS_KEY=your_secret_key
set AWS_SESSION_TOKEN=your_session_token
ファイル通知処理実行
最後に、以下のコマンドを実行する:
chmod +x setup_s3_file_notification.sh
./setup_s3_file_notification.sh input_parameters_s3.conf
上記のコマンドで出てきた質問に全て「yes」を回答してください。
もし以下のエラーが発生されたら:
An error occurred (ExpiredToken) when calling the GetSessionToken operation: The security token included in the request is expired
少し時間を置いてもう一度aws sts get-session-tokenのコマンドを実行してください。
実行処理の確認
-
スクリプト
上記のshellスクリプトの実行が終わりましたら、以下のようにステップ16まで進んだことを必ず確認してください。
-
AWS
この時点でLambda関数は自動的に作成されたので、AWS側にもうまく処理されてるかどうかを必ず確認してください。
確認方法はAWS Consoleをログイン → Lambdaメニューを選択 →input_parameters_s3.confに記載された関数名を選択 → MonitorタブにCloudwatchをクリックします。
以下のようにログに記載があったら、ファイル通知スクリプトの実行が成功しました。
-
Salesforce
Salesforce側にも確認できる所があるので、input_parameters_s3.confに記載されたユーザ設定詳細画面のログイン履歴に以下のような履歴があったら問題ありません。
全ての確認が完了次第、自動ファイル通知の構築は完了となります。
非構造ファイルのRAG化の流れ
以下の構成でS3にある非構造ファイルのRAG化処理が実行されると思います。

PDFファイル投入(実践)
実際にPDFファイルを対象となるバケットに入れてみましょう!
RAG化処理はかなり時間がかかるため、10〜30分ほどを待ちます。
RAG化の処理が成功したら、DataCloudに「データエクスプローラ」でChunkとIndeksができたのを確認してください。







