概要
エンタープライズキー管理(EKM)を使用すると、お客様が管理するマスターキーを使用して、OpenAI がデータを暗号化できます。このドキュメントでは、OpenAI に KMS での限定的な権限を付与するための GCP アカウントを設定する方法について説明します。

手順
1. OpenAI 用のフェデレーション ID を作成する
OpenAI は、OpenAI が所有する GCP アカウントから以下のような ID トークンを発行します。
azp と sub は、GCP における OpenAI のサービスアカウント ID です。
aud は OpenAI の組織 ID です。OpenAI のプロジェクト ID などの別の対象を選択することもできます。以下の手順を参照してください。
{
"aud": "org-xxxx",
"azp": "105900137572174660365",
"exp": 1747876928,
"iat": 1747873328,
"iss": "https://accounts.google.com",
"sub": "105900137572174660365"
}この手順では、ID トークンに含まれるクレームを認識し、その ID トークンが指定された場合に GCP STS がアクセストークンを発行できるようにします。
「IAM と管理 -> ワークロードアイデンティティフェデレーション」に移動し、「プールを作成」をクリックします。

「アイデンティティプールを作成」の手順で、「プール名」に任意の名前を入力します。
これは後に OpenAI に登録する必要があるため、覚えておいてください。
「プールにプロバイダーを追加」の手順では、以下を実行します。
「プロバイダーを選択」で「OpenID Connect(OIDC)」を選択します。
「プロバイダー名」には任意の名前を入力します。
「発行者(URL)」セクションに「https://accounts.google.com」を入力します。
「オーディエンス」セクション:
「許可されているオーディエンス」を選択します。
OpenAI がトークンを渡す際に指定するオーディエンスを入力します。
ChatGPT または API の場合:「OpenAI API 組織 ID(org-xxx)」を指定できます。
API の場合:より細かく設定するために特定の「API プロジェクト ID」を指定できます。

「属性マッピング」セクション:
「google.subject」に「assertion.sub」を入力します。

「属性条件」セクション:
assertion.sub == "105900137572174660365"を指定します。
これで、 https://console.cloud.google.com/iam-admin/workload-identity-pools ページに「ワークロードアイデンティティプール」と「ワークロードアイデンティティプロバイダー」が表示されるはずです。
ワークロードアイデンティティプール ID

ワークロードアイデンティティプロバイダー ID

2. KMS が有効になっていることを確認する
https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview にアクセスし、KMS を有効にします。OpenAI のフェデレーション ID を認識した GCP プロジェクトと同じ GCP プロジェクトに KMS を作成する必要はありません。ただし、プロジェクトが異なる場合は、少なくとも両方のプロジェクトで KMS 製品を有効化する必要があります。
3. 新規 KMS キーを作成する
「セキュリティ -> データ保護 -> キー管理」に移動します。
「概要」タブで「キーリングを作成」をクリックします。
キーリングには任意の名前を設定します。
「目的とアルゴリズム」には「対称暗号化/復号化」を選択します。

キーリングを作成すると、「キーリング」タブに表示されます。キーリングをクリックします。
キーリングの詳細で、「キーを作成」をクリックします。
キーには任意の名前を設定します。
4. KMS での暗号化/復号化用の制限付きロールを作成する
「IAM と管理 -> ロール -> ロールを作成」に移動します。
ロール名と ID には任意の名前を入力します。
「権限を追加」をクリックし、次に以下を追加します。
cloudkms.cryptoKeyVersions.useToDecrypt
cloudkms.cryptoKeyVersions.useToEncrypt
5. 暗号化/復号化用の制限付き KMS ロールに OpenAI のフェデレーション ID を割り当てる
「セキュリティ -> データ保護 -> キー管理」に移動します。
「キーリング名」をクリックしてから「キー名」をクリックし、キーの詳細ページに移動します。
ページが存在しない場合は、「KMS を作成する」セクションに戻ります。
「権限」タブをクリックし、次に「アクセスを許可」ボタンをクリックします。

先ほど作成したカスタムロールに OpenAI のフェデレーション ID を割り当てます。
「プリンシパルを追加」セクションには、principal://iam.googleapis.com/projects/<YOUR_GCP_PROJECT_NUMBER>/locations/global/workloadIdentityPools/<YOUR_GCP_WORKLOAD_IDENTITY_POOL>/subject/105900137572174660365 と入力します。
ここでの YOUR_GCP_PROJECT_NUMBER は、YOUR_GCP_WORKLOAD_IDENTITY_POOL を作成することで OpenAI のフェデレーション ID を認識したプロジェクトです。KMS が存在する同じプロジェクト内に配置することもできますが、必須ではありません。
プロジェクトが異なる場合は、https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview にアクセスして、少なくとももう一方のプロジェクトで KMS が有効になっていることを確認してください。
「ロールの割り当て」セクションで、制限付き EKM 権限用に前の手順で作成したカスタムロールを選択します。
6. 独自のセキュリティ慣行に沿って追加の制限を適用する
上記は、OpenAI が EKM を設定するために必要な最小限の情報です。OpenAI がお客様の KMS で暗号化および復号化操作を呼び出せる限り、お客様独自の社内セキュリティ慣行に沿って、追加のキーポリシーや制限を自由に適用できます。以下で説明する OpenAI のキー登録エンドポイントを呼び出すと、設定を検証します。
上記の手順を完了した後
ChatGPT Enterprise
OpenAI の担当者にご連絡いただき、以下の内容を共有してください。
"workload_identity_project_number": "123456789012"
OpenAI のワークロードアイデンティティを登録した12桁の GCP プロジェクト番号
"workload_identity_pool_id": "openai-azure"
OpenAI 用に登録したワークロードアイデンティティプロバイダーを含むプール
"workload_identity_provider_id": "openai-ekm-service-role"
OpenAI 用に登録したワークロードアイデンティティプロバイダー
"kms_project_id": "adjective-noun-12345"
KMS が存在する GCP プロジェクトの名前
"kms_key_name": "openai-kms-key"
キー管理システムのマスターキーの名前
"kms_key_ring_name": "openai-kms-key-ring"
お客様が管理するマスターキーを含むキー管理システムのキーリング
"kms_key_location": "us-east1"
キー管理システムのマスターキーが格納されているリージョン
お客様の ChatGPT 組織またはワークスペース用に EKM を有効化します。
API
OpenAI に外部キーを登録する
この API リファレンス「Management API の外部キー」に記載された手順に従ってください。
まず、OpenAI の組織レベルで外部キーを登録します。すると、外部キー ID が生成されます。
このステップでは、GCP 上で KMS に認証できるかどうかを確認することで、設定の妥当性を検証します。
この作業によって OpenAI プロジェクトに EKM が追加されることはありません。
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/external_keys" \
-d '{
"type": "gcp",
"name": "GCP EKM Config",
"workload_identity_project_number": "123456789012",
"workload_identity_pool_id": "openai-azure",
"workload_identity_provider_id": "openai-ekm-service-role",
"audience": <your org id or project id>,
"kms_project_id": "adjective-noun-12345",
"kms_key_name": "openai-kms-key",
"kms_key_ring_name": "openai-kms-key-ring",
"kms_key_location": "us-east1"
}'次に、外部キーに関連付けられた OpenAI プロジェクトを作成します。この後、プロジェクトで EKM が有効になります。
curl -X POST \
-H "Content-type: application/json" \
-H "Authorization: Bearer $TOKEN" \
"https://api.openai.com/v1/organization/projects" \
-d '{
"name": "Some Project",
"external_key_id": "extkey_xxxx"
}'