はじめに
「Gemini・Imagen・NotebookLMをエンタープライズで使いたいが、Google Workspaceは導入したくない」「認証はEntra IDで統一しているので、ユーザー管理はGCP側に持ちたくない」—— こうした要件に応える構成を本記事では解説します。
要件整理
| 要件 | 本記事での対応方針 |
|---|
| Gemini・Imagen・NotebookLMを従量課金で利用 | Vertex AI API / Vertex AI Studio(GCP標準機能) |
| IdPはEntra ID、SSOで統一 | Workforce Identity Federation(OIDC) |
| ユーザー・グループ同期なし | 属性ベースアクセス制御(トークンクレームをそのまま利用) |
| Google Workspaceなし・GCPで完結 | GCP単体構成(Workspaceライセン不要) |
| UIはスクラッチ開発なし | Vertex AI Studio(GCP標準Web UI)を利用 |
この構成が有効なケース
- Microsoft 365環境でEntra IDが既存IdP
- GCPを新規導入し、AIサービスを従量課金で試験・本番運用したい
- IT部門がGCPのユーザー管理を最小化したい(HR属性で自動制御)
- SIer・コンサル等でGWSライセンスコストを回避したい
全体アーキテクチャ
graph TB
subgraph "社内環境(既存)"
USER[社員ブラウザ]
ENTRA[Entra ID\n社内IdP]
HR[HR・属性情報\n部署・役職・ライセンス種別]
end
subgraph "GCP 認証・認可レイヤー"
WIF[Workforce Identity\nFederation Pool]
PROVIDER[OIDC Provider\nEntra ID連携]
STS[Security Token Service\nトークン交換]
IAM[Cloud IAM\n属性ベースポリシー]
end
subgraph "GCP サービス(標準UI含む)"
CONSOLE[Google Cloud Console\n管理UI]
VAISTUDIO[Vertex AI Studio\n標準チャット・生成UI]
GEMINI[Vertex AI\nGemini API]
IMAGEN[Vertex AI\nImagen API]
NLM[Vertex AI\nNotebookLM API]
LOGGING[Cloud Audit Logs\n監査・コンプライアンス]
BILLING[Cloud Billing\n従量課金管理]
ORG[Organization Policy\nガバナンス制御]
end
HR -->|属性クレームとして付与| ENTRA
USER -->|1. ブラウザでアクセス| CONSOLE
CONSOLE -->|2. Entra IDにリダイレクト| ENTRA
ENTRA -->|3. OIDC IDトークン発行\n(属性クレーム含む)| WIF
WIF --> PROVIDER --> STS
STS -->|4. GCPアクセストークン発行| IAM
IAM -->|5. 属性条件でアクセス許可| VAISTUDIO
VAISTUDIO --> GEMINI
VAISTUDIO --> IMAGEN
VAISTUDIO --> NLM
GEMINI --> LOGGING
IMAGEN --> LOGGING
NLM --> LOGGING
GEMINI --> BILLING
IMAGEN --> BILLING
NLM --> BILLING
ORG --> IAM
style ENTRA fill:#0078d4,color:#fff
style WIF fill:#ea4335,color:#fff
style VAISTUDIO fill:#1a73e8,color:#fff
style GEMINI fill:#34a853,color:#fff
style IMAGEN fill:#fbbc04,color:#000
style NLM fill:#ea4335,color:#fff
style IAM fill:#4285f4,color:#fff
アーキテクチャの要点
属性ベースアクセス制御のしくみ:
sequenceDiagram
participant U as 社員ブラウザ
participant E as Entra ID
participant W as Workforce ID Federation
participant I as Cloud IAM
participant V as Vertex AI Studio
U->>E: ログイン要求
E->>E: 部署・役職・属性を\nIDトークンに付与
E-->>U: IDトークン(例: department=engineering, role=developer)
U->>W: IDトークン提示
W->>W: 属性マッピング実行\nassert.department → attribute.department
W-->>U: GCPアクセストークン
U->>V: Vertex AI Studio アクセス
V->>I: 権限チェック
I->>I: attribute.department == "engineering" → Gemini利用可
I-->>V: 許可
V-->>U: Vertex AI Studio 表示
Note over I: グループ同期なし\nトークン属性のみで制御
主要コンポーネント解説
Workforce Identity Federation とは
Google Workspaceアカウントなしに、外部IdP(Entra IDなど)の認証情報でGCPリソースへアクセスできる仕組みです。Azureでいう「Entra External ID」や「Federated Identity Credentials」に近い概念です。
graph LR
subgraph "Azure の類似概念"
A1[Federated Identity\nCredentials] -->|外部IdPのトークンを信頼| A2[Azure Resources]
end
subgraph "GCP の対応機能"
B1[Workforce Identity\nFederation] -->|外部IdPのトークンを信頼| B2[GCP Resources]
end
A1 -.対応.- B1
style A1 fill:#0078d4,color:#fff
style B1 fill:#ea4335,color:#fff
グループ同期との比較:
| 方式 | 仕組み | 管理コスト |
|---|
| グループ同期(GCDS等) | Entraグループ → GCPにコピー → IAM紐付け | グループ変更のたびに同期が必要 |
| 属性ベース(本記事) | EntraのIDトークンクレームをそのままIAM条件に利用 | HR属性変更が即座に反映、同期不要 |
属性ベースアクセス制御(ABAC)の設計
GCPのIAMでは principalSet を使って「特定属性値を持つユーザーグループ」にロールを付与できます。
graph TD
TOKEN["EntraIDトークン\n{\n sub: user123,\n email:
[email protected],\n department: engineering,\n jobTitle: SoftwareEngineer,\n extension_aiLicense: premium\n}"]
subgraph "Workforce ID 属性マッピング"
MAP1["attribute.department\n= assertion.department"]
MAP2["attribute.job_title\n= assertion.jobTitle"]
MAP3["attribute.ai_license\n= assertion.extension_aiLicense"]
end
subgraph "IAMポリシー(属性条件)"
P1["principalSet:.../attribute.department/engineering\n→ roles/aiplatform.user"]
P2["principalSet:.../attribute.ai_license/premium\n→ roles/aiplatform.admin"]
P3["principalSet:.../attribute.department/finance\n→ アクセス拒否(バインディングなし)"]
end
TOKEN --> MAP1 --> P1
TOKEN --> MAP2
TOKEN --> MAP3 --> P2
TOKEN -.-> P3
style TOKEN fill:#0078d4,color:#fff
style P1 fill:#34a853,color:#fff
style P2 fill:#fbbc04,color:#000
style P3 fill:#ea4335,color:#fff
標準UI:Vertex AI Studio
スクラッチ開発なしで利用できるGCP標準のAI操作UIです。
| 機能 | Vertex AI Studio での対応 |
|---|
| Gemini チャット | Freeform / Chat モードで対話型プロンプト実行 |
| Gemini API テスト | コード生成・要約・翻訳などを即座に試行 |
| Imagen 画像生成 | テキストから画像を生成するUIを標準提供 |
| モデル比較 | 複数Geminiモデルを並べてプロンプト結果を比較 |
| プロンプト管理 | プロンプトを保存・共有・バージョン管理 |
詳細構築手順
ステップ1:GCPプロジェクトと組織設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| # GCPプロジェクト作成(組織配下に作成を推奨)
gcloud projects create YOUR_PROJECT_ID \
--name="Enterprise AI Platform" \
--organization=YOUR_ORG_ID
gcloud config set project YOUR_PROJECT_ID
# 必要APIを有効化
gcloud services enable \
iam.googleapis.com \
iamcredentials.googleapis.com \
sts.googleapis.com \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudbilling.googleapis.com \
cloudaudit.googleapis.com \
secretmanager.googleapis.com
# 請求アカウントを紐付け
gcloud billing projects link YOUR_PROJECT_ID \
--billing-account=YOUR_BILLING_ACCOUNT_ID
|
ステップ2:Entra ID アプリ登録と属性クレーム設定
Azure Portal での設定(アプリ登録):
- Azure Portal > Microsoft Entra ID > アプリの登録 > 新規登録
- 名前:
GCP Workforce Identity - サポートされているアカウントの種類: この組織ディレクトリのみ
- リダイレクトURIは不要(バックエンド連携のため)
必要なAPIアクセス許可を追加:
| APIアクセス許可 | 種類 | 目的 |
|---|
openid | 委任 | OpenIDConnect基本認証 |
email | 委任 | メールアドレスクレーム |
profile | 委任 | 基本プロファイル情報 |
User.Read | 委任 | ユーザー属性の読み取り |
トークンへの属性クレーム追加(属性ベース制御の核心):
Azure Portal > アプリ登録 > トークン構成 > オプションのクレームを追加
1
2
3
4
5
6
7
8
| // IDトークンに追加するクレーム(トークン構成画面で設定)
{
"idToken": [
{ "name": "email" },
{ "name": "family_name" },
{ "name": "given_name" }
]
}
|
カスタム属性(extension attributes)の設定:
部署や役職などHR属性をトークンに含めるには、Entraのカスタム属性マッピングを使います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| # PowerShell で カスタム属性をトークンに追加
# (オプションのクレームとして department, jobTitle は標準で追加可能)
# カスタムセキュリティ属性またはディレクトリ拡張属性を使用する場合
$TenantId = "YOUR_TENANT_ID"
$AppObjectId = "YOUR_APP_OBJECT_ID"
# ディレクトリ拡張属性の作成(AI利用ライセンス管理用)
Connect-MgGraph -Scopes "Application.ReadWrite.All"
$extensionProperty = New-MgApplicationExtensionProperty `
-ApplicationId $AppObjectId `
-Name "aiLicenseTier" `
-DataType "String" `
-TargetObjects @("User")
# ユーザーへの属性値設定例
Update-MgUser -UserId "[email protected]" `
-AdditionalProperties @{
"extension_APPID_aiLicenseTier" = "premium"
}
|
クレームマッピングポリシー(オプション:部署・役職の明示的マッピング):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # クレームマッピングポリシー作成(department, jobTitleをトークンに追加)
$policy = New-MgPolicyClaimMappingPolicy -Definition @(
'{"ClaimsMappingPolicy": {"Version": 1, "IncludeBasicClaimSet": true,
"ClaimsSchema": [
{"Source": "user", "ID": "department", "JwtClaimType": "department"},
{"Source": "user", "ID": "jobTitle", "JwtClaimType": "jobTitle"},
{"Source": "user", "ID": "extension_APPID_aiLicenseTier", "JwtClaimType": "aiLicenseTier"}
]
}}'
) -DisplayName "GCP-AI-Claims-Policy" -IsOrganizationDefault $false
# アプリのサービスプリンシパルにポリシーを割り当て
New-MgServicePrincipalClaimMappingPolicyByRef `
-ServicePrincipalId "YOUR_SP_OBJECT_ID" `
-OdataId "https://graph.microsoft.com/v1.0/policies/claimsMappingPolicies/$($policy.Id)"
|
ステップ3:Workforce Identity Federation の設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| # Workforce Identity Pool 作成
gcloud iam workforce-pools create "entra-workforce-pool" \
--location="global" \
--display-name="Microsoft Entra ID Pool" \
--description="Entra ID federation for GCP AI services" \
--session-duration="3600s"
# Pool IDを確認
POOL_NAME="locations/global/workforcePools/entra-workforce-pool"
# Entra ID OIDC Provider 登録
# ※ --attribute-mapping が属性ベース制御の核心部分
gcloud iam workforce-pools providers create-oidc "entra-oidc-provider" \
--workforce-pool="entra-workforce-pool" \
--location="global" \
--display-name="Microsoft Entra ID OIDC" \
--issuer-uri="https://login.microsoftonline.com/YOUR_TENANT_ID/v2.0" \
--client-id="YOUR_ENTRA_APP_CLIENT_ID" \
--attribute-mapping="
google.subject=assertion.sub,
google.email=assertion.email,
attribute.department=assertion.department,
attribute.job_title=assertion.jobTitle,
attribute.ai_license_tier=assertion.aiLicenseTier,
attribute.tenant_id=assertion.tid
" \
--attribute-condition="assertion.tid == 'YOUR_TENANT_ID'"
# ↑ 自社テナント以外のトークンを拒否(セキュリティ上重要)
|
設定内容の解説:
| 設定項目 | 値 | 目的 |
|---|
google.subject | assertion.sub | GCP内でのユーザー識別子(必須) |
google.email | assertion.email | Cloud Consoleのメール表示 |
attribute.department | assertion.department | 部署属性(IAM条件で使用) |
attribute.job_title | assertion.jobTitle | 役職属性(IAM条件で使用) |
attribute.ai_license_tier | assertion.aiLicenseTier | AIライセンス区分(カスタム属性) |
attribute-condition | テナントID固定 | 他テナントからの不正アクセス防止 |
ステップ4:IAM 属性ベースポリシーの設定
グループ同期なしで、トークンの属性値に基づいてアクセスを制御します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| PROJECT_ID="YOUR_PROJECT_ID"
POOL_ID="locations/global/workforcePools/entra-workforce-pool"
# =============================================
# 部署別アクセス制御(department 属性ベース)
# =============================================
# エンジニアリング部門:Vertex AI全機能利用可
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.department/engineering" \
--role="roles/aiplatform.user"
# データサイエンス部門:Vertex AI利用可(同様)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.department/data_science" \
--role="roles/aiplatform.user"
# =============================================
# ライセンス区分別アクセス制御(カスタム属性ベース)
# =============================================
# プレミアムライセンス:高性能モデル(Gemini Ultra等)利用可
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.ai_license_tier/premium" \
--role="roles/aiplatform.user"
# スタンダードライセンス:標準モデルのみ
# ※ Cloud IAM Conditionsで特定リソースのみに制限
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.ai_license_tier/standard" \
--role="roles/aiplatform.user" \
--condition="expression=resource.name.startsWith('projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/gemini-1.5-flash'),title=StandardModel,description=Standard license model restriction"
# =============================================
# 管理者権限:特定属性の組み合わせ
# =============================================
# IT管理者ロール(CEL式で複合条件)
cat > /tmp/admin-policy.yaml << 'EOF'
bindings:
- role: roles/aiplatform.admin
members:
- principalSet://iam.googleapis.com/locations/global/workforcePools/entra-workforce-pool/attribute.job_title/IT_Admin
condition:
title: IT Admin Condition
description: AI platform admin access for IT administrators
expression: attribute.job_title == "IT_Admin" && attribute.department == "it"
EOF
gcloud projects set-iam-policy $PROJECT_ID /tmp/admin-policy.yaml
# =============================================
# 監査・ログ閲覧権限(コンプライアンス担当者向け)
# =============================================
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.department/compliance" \
--role="roles/logging.viewer"
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="principalSet://iam.googleapis.com/${POOL_ID}/attribute.department/compliance" \
--role="roles/bigquery.dataViewer"
|
属性ベース制御のアクセスマップ:
graph TD
TOKEN[EntraID トークン\n属性クレーム付き]
subgraph "属性値 → IAMロール マッピング"
D1["attribute.department\n= engineering"]
D2["attribute.department\n= data_science"]
D3["attribute.department\n= finance"]
D4["attribute.department\n= compliance"]
L1["attribute.ai_license_tier\n= premium"]
L2["attribute.ai_license_tier\n= standard"]
end
subgraph "IAMロール(GCPアクセス権)"
R1["roles/aiplatform.user\n全Vertex AIサービス利用可"]
R2["roles/aiplatform.user\n標準モデルのみ(条件付き)"]
R3["アクセス権なし\nVertex AI利用不可"]
R4["roles/logging.viewer\n監査ログ閲覧のみ"]
end
TOKEN --> D1 --> R1
TOKEN --> D2 --> R1
TOKEN --> D3 --> R3
TOKEN --> D4 --> R4
TOKEN --> L1 --> R1
TOKEN --> L2 --> R2
style R1 fill:#34a853,color:#fff
style R2 fill:#fbbc04,color:#000
style R3 fill:#ea4335,color:#fff
style R4 fill:#9aa0a6,color:#fff
ステップ5:Vertex AI Studio へのアクセス設定(標準UI)
Workforce Identity Federationでは、GCPコンソールへのブラウザログインに専用URLを使用します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # ユーザーに展開するログインURL(ブックマーク・イントラ掲載用)
# 形式: https://console.cloud.google.com/?authuser=workforce:POOL:PROVIDER
POOL="entra-workforce-pool"
PROVIDER="entra-oidc-provider"
echo "GCPコンソールログインURL:"
echo "https://console.cloud.google.com/\
?authuser=workforce%3A${POOL}%3A${PROVIDER}"
echo ""
echo "Vertex AI Studioへの直接URL:"
echo "https://console.cloud.google.com/vertex-ai/studio\
?authuser=workforce%3A${POOL}%3A${PROVIDER}\
&project=${PROJECT_ID}"
|
エンドユーザーのアクセスフロー:
sequenceDiagram
participant U as 社員
participant B as ブラウザ
participant C as GCP Console
participant E as Entra ID
participant V as Vertex AI Studio
U->>B: イントラのリンクをクリック\n(ブックマーク済みURL)
B->>C: GCP Console アクセス
C->>B: Entra ID認証にリダイレクト
B->>E: MicrosoftアカウントでSSO
Note over E: MFA・条件付きアクセス適用
E->>B: IDトークン発行(属性クレーム含む)
B->>C: トークン送信
C->>C: Workforce ID Federation で検証
C-->>B: GCP Console 表示
U->>V: Vertex AI Studio を開く
V-->>U: Gemini・Imagen UIが利用可能
Note over U,V: Googleアカウント不要\nグループ同期不要
Vertex AI Studio の主要機能(標準UI):
graph LR
STUDIO[Vertex AI Studio\n標準Web UI]
STUDIO --> G1[Gemini\nFreeformモード\nテキスト生成・要約・翻訳]
STUDIO --> G2[Gemini\nChatモード\n対話型AIアシスタント]
STUDIO --> G3[Gemini\nCode生成\nコード補完・レビュー]
STUDIO --> I1[Imagen\n画像生成\nテキスト→画像]
STUDIO --> I2[Imagen\n画像編集\nインペインティング]
STUDIO --> N1[NotebookLM\nAPI経由\nRAGシステム]
STUDIO --> P1[プロンプト管理\n保存・共有・バージョン管理]
style STUDIO fill:#1a73e8,color:#fff
style G1 fill:#34a853,color:#fff
style G2 fill:#34a853,color:#fff
style G3 fill:#34a853,color:#fff
style I1 fill:#fbbc04,color:#000
style I2 fill:#fbbc04,color:#000
style N1 fill:#ea4335,color:#fff
ステップ6:NotebookLM のエンタープライズ利用設定
GWS不使用の構成では、NotebookLM は Vertex AI API 経由で利用します。標準UIとしては Vertex AI Agent Builder を活用します。
1
2
3
4
5
6
7
| # NotebookLM API(Vertex AI Gemini APIと統合)を有効化
gcloud services enable \
discoveryengine.googleapis.com \
aiplatform.googleapis.com
# Vertex AI Agent Builder でRAG(NotebookLM相当機能)を設定
# Google Cloud Console > Vertex AI > Agent Builder > 新規作成
|
NotebookLM相当機能の構成オプション:
| オプション | 標準度 | GWS要否 | 説明 |
|---|
| Vertex AI Agent Builder | ★★★★★ | 不要 | GCPの標準RAGサービス。管理UIあり |
| Vertex AI Studio(RAGモード) | ★★★★☆ | 不要 | Studio内でドキュメントQAを構成 |
| NotebookLM API(Preview) | ★★★☆☆ | 不要 | API経由で利用、UI別途必要 |
| NotebookLM Web UI | ★★☆☆☆ | 必要 | GWSライセンス必須のため今回対象外 |
Vertex AI Agent Builder(推奨NotebookLM代替):
1
2
3
4
5
6
7
8
9
10
11
12
13
| # データストア(社内文書ナレッジ)作成
gcloud alpha discoveryengine datastores create \
--project=$PROJECT_ID \
--location=global \
--collection=default_collection \
--display-name="社内ナレッジベース" \
--solution-type=SOLUTION_TYPE_SEARCH \
--industry-vertical=GENERIC \
--content-config=CONTENT_REQUIRED
# Search & Conversationアプリ(標準チャットUI)作成
# → Cloud Console UIから作成を推奨(GUIウィザードで設定)
# Console > Vertex AI > Agent Builder > CREATE APP
|
Agent Builderで作成したチャットUIはそのまま社員に展開でき、スクラッチ開発は不要です。
ステップ7:監査ログとガバナンス設定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| # Data Access 監査ログを有効化(Vertex AI API呼び出しを記録)
cat > /tmp/audit-policy.json << 'EOF'
{
"auditConfigs": [
{
"service": "aiplatform.googleapis.com",
"auditLogConfigs": [
{"logType": "DATA_READ"},
{"logType": "DATA_WRITE"},
{"logType": "ADMIN_READ"}
]
},
{
"service": "iam.googleapis.com",
"auditLogConfigs": [
{"logType": "ADMIN_READ"},
{"logType": "DATA_READ"},
{"logType": "DATA_WRITE"}
]
}
]
}
EOF
gcloud projects set-iam-policy $PROJECT_ID \
<(gcloud projects get-iam-policy $PROJECT_ID --format=json | \
jq '.auditConfigs = (.auditConfigs // []) + '"$(cat /tmp/audit-policy.json | jq '.auditConfigs')")
# ログの長期保存(BigQueryエクスポート)
gcloud logging sinks create vertex-ai-audit-sink \
bigquery.googleapis.com/projects/$PROJECT_ID/datasets/ai_audit_logs \
--log-filter='protoPayload.serviceName="aiplatform.googleapis.com"' \
--use-partitioned-tables
# Organization Policy:Vertex AI利用リージョン制限(日本リージョン限定例)
# Console > IAM & Admin > Organization Policies で設定
# 制約: constraints/gcp.resourceLocations
# 許可値: in:asia-northeast1-locations(東京)
|
ガバナンス構成の全体像:
graph TB
subgraph "アクセス制御"
WIF2[Workforce Identity\nFederation]
ABAC[属性ベース IAM\nグループ同期なし]
CA[Entra 条件付きアクセス\nMFA・デバイスコンプライアンス]
end
subgraph "データガバナンス"
AUDIT[Cloud Audit Logs\nData Read/Write]
BQ[BigQuery\n長期ログ保存]
ALERT[Cloud Monitoring\n異常検知アラート]
end
subgraph "コスト管理"
BUDGET[請求アラート\n予算上限設定]
LABEL[リソースラベル\n部署別コスト配賦]
QUOTA[API Quotas\n部署別利用上限]
end
subgraph "ネットワーク制御"
VPC_SC[VPC Service Controls\nAPIアクセス境界]
ORG2[Organization Policy\nリージョン制限]
end
WIF2 --> ABAC
CA --> WIF2
ABAC --> AUDIT
AUDIT --> BQ --> ALERT
ABAC --> BUDGET
ABAC --> LABEL
ABAC --> QUOTA
VPC_SC --> ABAC
ORG2 --> VPC_SC
style WIF2 fill:#ea4335,color:#fff
style ABAC fill:#4285f4,color:#fff
style CA fill:#0078d4,color:#fff
style AUDIT fill:#34a853,color:#fff
style VPC_SC fill:#fbbc04,color:#000
エンドユーザー利用手順
社員への展開時に案内する操作手順です。
初回アクセス手順
graph LR
S1["① イントラのAIポータル\nページを開く"] --> S2["② 「GCPにサインイン」\nボタンをクリック"]
S2 --> S3["③ Microsoftの\nログイン画面が表示\n(社内SSOが起動)"]
S3 --> S4["④ 会社のアカウントで\n認証(MFA含む)"]
S4 --> S5["⑤ Vertex AI Studio\nが開く"]
S5 --> S6["⑥ Gemini / Imagen /\nAgent Builder を利用"]
style S1 fill:#e8f0fe,color:#000
style S5 fill:#34a853,color:#fff
style S6 fill:#1a73e8,color:#fff
展開用ショートカットURL(イントラに掲載):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ## 社内AI利用ポータル
### Gemini(テキスト生成・チャット)
https://console.cloud.google.com/vertex-ai/studio/freeform
?authuser=workforce%3Aentra-workforce-pool%3Aentra-oidc-provider
&project=YOUR_PROJECT_ID
### Imagen(画像生成)
https://console.cloud.google.com/vertex-ai/studio/vision
?authuser=workforce%3Aentra-workforce-pool%3Aentra-oidc-provider
&project=YOUR_PROJECT_ID
### 社内ナレッジ検索(Agent Builder)
https://console.cloud.google.com/gen-app-builder/apps
?authuser=workforce%3Aentra-workforce-pool%3Aentra-oidc-provider
&project=YOUR_PROJECT_ID
|
コスト試算
初期構築コスト(インフラ費用)
| コンポーネント | 費用 | 備考 |
|---|
| Workforce Identity Federation | 無料 | GCPの標準機能 |
| Cloud IAM | 無料 | ポリシー管理は無料 |
| Cloud Audit Logs(最初の50GB/月) | 無料 | 超過分: $0.01/GB |
| GCPプロジェクト | 無料 | 利用量ベース課金 |
運用コスト(API利用量ベース)
| サービス | 料金モデル | 目安 |
|---|
| Gemini 1.5 Flash | 入力100万トークン: $0.075 | 社員1人/日10会話≒約$0.002/日 |
| Gemini 1.5 Pro | 入力100万トークン: $1.25 | 高精度が必要な用途向け |
| Gemini 2.0 Flash | 入力100万トークン: $0.10 | 最新軽量モデル |
| Imagen 3 | 画像1枚あたり $0.02〜$0.04 | 解像度・品質により変動 |
| Vertex AI Agent Builder | 検索1,000クエリ: $2.50 | ナレッジ検索用途 |
50名利用の月額試算例
pie title 月額コスト構成(50名・中程度利用)
"Gemini API (50名×30日)" : 3000
"Imagen API (月間500枚)" : 1500
"Agent Builder (ナレッジ検索)" : 2000
"Cloud Logging/Storage" : 500
"その他(Networking等)" : 300
| 想定 | 月額(概算) |
|---|
| 50名・軽量利用(Gemini Flash中心) | 約 $35〜$80/月(¥5,000〜¥12,000) |
| 50名・標準利用(Flash + Agent Builder) | 約 $150〜$300/月(¥22,000〜¥45,000) |
| 50名・重量利用(Pro + Imagen多用) | 約 $500〜$1,000/月(¥75,000〜¥150,000) |
Google Workspaceとの比較: Workspace Enterprise Plus + Gemini Enterpriseアドオンの場合、50名で約32万〜37万円/月(固定)。従量課金のGCP単体構成は軽量利用であれば大幅に安価になります。
セキュリティ・ガバナンスチェックリスト
Workforce Identity Federation
IAM属性ベース制御
データガバナンス
コスト管理
Entra ID側の属性管理設計
属性ベース制御を安定運用するには、Entra ID側の属性管理が重要です。
graph TB
HR[HR システム\n(人事マスタ)]
subgraph "Entra ID 属性管理"
DEPT[department\n部署コード]
TITLE[jobTitle\n役職]
EXT[extension_aiLicenseTier\nAIライセンス区分]
GRP[グループメンバーシップ\n※GCPには同期しない]
end
subgraph "GCP IAM"
POLICY1["attribute.department/engineering\n→ aiplatform.user"]
POLICY2["attribute.ai_license_tier/premium\n→ aiplatform.user(全モデル)"]
POLICY3["attribute.department/compliance\n→ logging.viewer"]
end
HR -->|入社・異動・退職時に自動更新| DEPT
HR --> TITLE
IT管理者 -->|手動またはLifecycle Workflowsで管理| EXT
DEPT --> POLICY1
EXT --> POLICY2
DEPT --> POLICY3
GRP -.GCPには送らない.- POLICY1
style HR fill:#0078d4,color:#fff
style DEPT fill:#0078d4,color:#fff
style TITLE fill:#0078d4,color:#fff
style EXT fill:#0078d4,color:#fff
style POLICY1 fill:#34a853,color:#fff
style POLICY2 fill:#34a853,color:#fff
style POLICY3 fill:#34a853,color:#fff
ライフサイクル管理の自動化(Entra Lifecycle Workflows):
1
2
3
4
5
6
7
8
9
10
11
12
| # 入社時: AI利用ライセンスを自動付与(Lifecycle Workflow タスク例)
# 入社者のaiLicenseTierを"standard"に設定
# 異動時: 部署属性変更 → GCP側は自動反映(ポリシー変更不要)
Update-MgUser -UserId $newUserId `
-Department "engineering" `
-JobTitle "SoftwareEngineer"
# → 次回ログイン時に新しい属性でGCPアクセス権が自動更新
# 退職時: アカウント無効化 → GCPアクセス即時不可
# (トークン発行不可になるため追加設定不要)
Disable-MgUser -UserId $leavingUserId
|
よくある質問
Q: GWS(Google Workspace)なしでNotebookLMのWeb UIは使えるか?
A: 現時点では使えません。notebooklm.google.com はGoogleアカウントまたはGWSアカウントが必要です。GCP単体構成でのNotebookLM相当機能には、Vertex AI Agent Builder(標準Web UIあり)を活用してください。NotebookLM APIのGA後は、GCP単体でのAPI利用が本命になります。
Q: 属性ベース制御とグループ同期、どちらが推奨か?
A: エンタープライズ環境では属性ベース制御を推奨します。グループ同期はGCPとEntra IDの間でグループ管理が二重になり、退職者のアクセス残存リスクもあります。属性ベースではEntraのアカウント無効化でGCPアクセスも即座に失効します。
Q: Entraの条件付きアクセスポリシー(MFA・デバイスコンプライアンス等)は適用されるか?
A: はい。Workforce Identity Federation はEntraへのOIDC認証経由のため、Entraの条件付きアクセスポリシーが完全に適用されます。準拠デバイスのみ許可、特定ネットワーク外でのMFA必須なども有効です。
Q: GCPプロジェクトを複数に分けるべきか?
A: 部署ごとにプロジェクトを分けることでコスト配賦・ガバナンスが明確になります。ただし初期は1プロジェクトで開始し、ラベルでコスト管理する方がシンプルです。本番規模になったらフォルダ構成で分割を検討してください。
Q: Vertex AI Studioで作成したプロンプトは社内で共有できるか?
A: はい。Vertex AI Studioのプロンプト保存機能でGCSに保存し、チームで共有できます。ただしアクセス制御はCloud IAMで管理されます。
Q: 他のGCPサービス(BigQuery、Cloud Storageなど)にも同じWorkforce ID設定でアクセスできるか?
A: はい。一度Workforce Identity Poolを設定すれば、同じGCPプロジェクト内の全サービスにIAMポリシーで権限付与できます。AIサービス以外にもBigQueryのデータ分析環境など、GCPの全サービスにEntra IDで統一SSO化できます。
まとめ:構成の優位性
graph LR
subgraph "本記事の構成"
A1[Entra ID\n単一IdP]
A2[Workforce ID\nFederation]
A3[属性ベースIAM\nグループ同期なし]
A4[Vertex AI Studio\n標準UI]
A5[従量課金\n固定コストなし]
end
A1 --> A2 --> A3 --> A4
A3 --> A5
style A1 fill:#0078d4,color:#fff
style A2 fill:#ea4335,color:#fff
style A3 fill:#34a853,color:#fff
style A4 fill:#1a73e8,color:#fff
style A5 fill:#fbbc04,color:#000
| 優位性 | 詳細 |
|---|
| ID管理の一元化 | Entra IDで全サービスのSSO・MFA・条件付きアクセスを統一管理 |
| 同期レス運用 | グループ・ユーザーのGCP同期が不要。Entra属性変更が即座に反映 |
| GWSコスト不要 | Workspaceライセンス費用ゼロ。使った分だけのGCP従量課金 |
| スクラッチ開発ゼロ | Vertex AI Studio・Agent Builder という標準UIをそのまま活用 |
| スケーラブル | 利用者増加時もGCPの属性ポリシー変更のみ。ユーザー登録作業不要 |
参考リンク