開発スピードを殺すな:LinearのSSO/SCIM連携で構築する「セキュリティとベロシティの二兎を追う」エンタープライズ運用術
テックリードの最大の敵は「無駄な管理コスト」だ。新しいメンバーがジョインするたびにSlackで招待を飛ばし、退職者のアカウント削除を忘れて冷や汗をかく。そして「セキュリティ監査のために全メンバーの権限棚卸しをしてください」というセキュリティチームからの突然のチャット。
エンジニアの時間を最もドブに捨てているのは、こうしたアイデンティティ管理の手続きだ。
Linearはその圧倒的なUI/UXとスピード感で開発チームのベロシティを劇的に引き上げる。しかし、エンタープライズ規模や上場前夜の厳格なセキュリティ基準を満たすフェーズにおいて、デフォルトのままでの運用はいずれ破綻する。
今回は、OktaやGoogle WorkspaceなどのIdP(IDプロバイダ)とLinearをSAML(SSO)およびSCIMで完全同期させ、「セキュリティ担保」と「開発の手を止めるなというスピード」を極限まで高めるための実践知見を叩き込む。
—
1. なぜSSO/SCIM連携が「開発ベロシティ」に直結するのか?
多くのマネージャーは「SSOはセキュリティのため」と勘違いしている。違う。SSOとSCIMは、開発チームの認知負荷をゼロにし、アジャイルのフローを止めないための最強のエンジニアリング・インフラストラクチャだ。
- JIT(Just-In-Time)プロビジョニングの罠: SSO(SAML)だけだと、「初ログイン時にアカウントが作られる」が、退職者が残存したり、ロールの剥奪が遅れるタイムラグが生じる。
- SCIM(System for Cross-domain Identity Management)の真価: IdP(Okta/Google Workspace)側での「グループ割り当て・変更・削除」が、リアルタイムでLinear側に同期される。退職者が発生した瞬間、即座にLinearの全プロジェクト・Issueへのアクセスが遮断される。
手動でのユーザー管理を全廃し、プロビジョニングを自動化すること。それが、余計なオペレーションに脳のメモリを割かないための絶対条件だ。
—
2. Linear × IdP 構築の全体像と落とし穴
設定に入る前に、全体アーキテクチャを脳内に焼き付けてほしい。
[IdP: Okta / Google Workspace]
│
├── (SAML 2.0) ──> 認証 (Authentication): 「こいつは本物の社員か?」
│
└── (SCIM 2.0) ──> 認可・プロビジョニング (Provisioning): 「どのチームの権限を持つべきか?」
│
▼
[Linear Enterprise Workspace]
罠:エンタープライズプランの壁とドメイン検証
LinearでSAML/SCIMを有効化するには、Enterpriseプランが必須である。また、自社ドメイン(例: `example.com`)の所有権証明(DNSのTXTレコード設定)が前提となるため、事前にIT管理部門と連携を済ませておくこと。
—
3. 実践:Okta / Google Workspace を用いたSCIM設定のベストプラクティス
ここでは、多くの現場で採用されているOktaをベースに、トラブルの起きないSCIM設定の要所を解説する。Google Workspaceの場合も概念は同一だ。
Step 1: Linear側のSCIMトークン発行
1. Linearの `Settings` > `Workspace` > `Security & Access` に移動。
2. SAMLとSCIMの設定を開き、SCIMを有効化して Bearer Token を発行する。
3. このトークンは二度と表示されないため、一時的に安全なパスワードマネージャーに退避する。
Step 2: IdP側(Okta等)でのプロビジョニング設定
OktaのLinearアプリ統合において、以下のマッピング設計を厳守せよ。
- Push New Users: 有効(IdPでアサインされた瞬間、Linearにアカウント作成)
- Update User Attributes: 有効(氏名やメールアドレスの変更を同期)
- Deactivate Users: 有効(これが最も重要。退職時のアクセス遮断)
💡 現場で役立つグループマッピング戦略
Linearのチームやロール管理をIdP側のグループと完全に同期させる。
- `linear-admins` グループ ──> Linearの `Admin` ロール
- `eng-core` グループ ──> Linearのデフォルトメンバー(特定チームへの自動アサインと組み合わせる)
—
4. チーム開発を加速する!Linearの「隠し武器」設定とショートカット
インフラが整ったら、次はLinear自体の使い倒し方だ。開発生産性を限界突破させるためのプロの技法を共有する。
① 絶対に入れるべき神インテグレーション・プラグイン
- GitHub / GitLab 連携: PRの作成・レビュー・マージがLinearのIssueステータスと完全連動。「`fix: SAMLバグの修正 (LIN-123)`」とコミットするだけで、Issueが自動で「In Review」から「Done」へ。この文脈スイッチの排除がベロシティを最大化する。
- Sentry 連携: エラー検知からワンクリックでLinearのIssueを起こす。スタックトレース付きのIssueがバックログに直行するため、バグ再現のコミュニケーションコストが消滅する。
② 指をキーボードから離すな:究極のショートカット
マウスを触るたびに、エンジニアのフロー状態は破壊される。これだけは体に叩き込め。
- `C` : どこにいても即座に新しいIssueを作成 (Create)
- `G` then `I` : インボックスへ移動 (Go to Inbox)
- `Cmd + K` (または `Ctrl + K`) : コマンドパレット。すべての操作はここから行える。
- `P` : Issueのアサイニーを変更
- `S` : ステータスを変更
—
5. 【コピペで使える】監査・自動化のための構成例
エンタープライズ運用では、セキュリティ監査(SOC2やISMSなど)への対応が避けて通れない。LinearのWebhooksやAPIを叩き、監査ログやチケットの状態を自動監視する実用的なスクリプト(設定ファイル)のベストプラクティスを提示する。
以下は、LinearのWebhookイベントを受け取り、セキュリティアラートやメトリクスをSlack等に転送するための Serverless (AWS Lambda / Node.js) の設定定義ファイル(`serverless.yml`) だ。
service: linear-security-audit-webhook
frameworkVersion: ‘3’
provider:
name: aws
runtime: nodejs18.x
region: ap-northeast-1
environment:
SLACK_WEBHOOK_URL: ${ssm:/infra/slack/security_channel_webhook}
LINEAR_WEBHOOK_SECRET: ${ssm:/infra/linear/webhook_secret}
functions:
auditHandler:
handler: handler.main
events:
- httpApi:
path: /webhook/linear
method: post
resources:
Resources:
# 監査ログ用イベントの保存先バケット(必要に応じてS3にフォワード)
AuditLogBucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-company-linear-audit-logs-${sls:stage}
PublicAccessBlockConfiguration:
BlockPublicAcls: true
BlockPublicPolicy: true
IgnorePublicAcls: true
RestrictPublicBuckets: true
LifecycleConfiguration:
Rules:
- Id: DeleteOldLogs
Status: Enabled
ExpirationInDays: 365 # 監査要件に応じた保持期間
そして、これがリクエストを検証し、重大なセキュリティイベント(外部ユーザーの招待や管理者権限の付与など)を検知する Node.js (Handler) の実装パターン だ。
// handler.js
const crypto = require(‘crypto’);
const https = require(‘https’);
/
- LinearからのWebhookを受け取り、セキュリティ上クリティカルな操作を監視・通知する
/
module.exports.main = async (event) => {
const signature = event.headers[‘linear-signature’];
const rawBody = event.body;
// 1. Webhookの署名検証(偽装リクエストの防止)
const hmac = crypto.createHmac(‘sha256’, process.env.LINEAR_WEBHOOK_SECRET);
const digest = hmac.update(rawBody).digest(‘hex’);
if (!signature || signature !== digest) {
console.warn(‘Invalid Webhook Signature’);
return { statusCode: 401, body: ‘Unauthorized’ };
}
const payload = JSON.parse(rawBody);
const { type, action, data } = payload;
// 2. セキュリティ監査対象イベントのフィルタリング
// 例: ワークスペースへのメンバー追加や管理者昇格を検知
if (type === ‘User’ && (action === ‘create’ || action === ‘update’)) {
if (data.admin) {
await sendSlackAlert(`🚨 【Security Alert】Linearの管理者権限を持つユーザーが追加/変更されました: ${data.email}`);
}
}
return { statusCode: 200, body: JSON.stringify({ received: true }) };
};
function sendSlackAlert(message) {
return new Promise((resolve, reject) => {
const url = new URL(process.env.SLACK_WEBHOOK_URL);
const data = JSON.stringify({ text: message });
const req = https.request({
hostname: url.hostname,
path: url.pathname,
method: ‘POST’,
headers: { ‘Content-Type’: ‘application/json’ }
}, (res) => {
res.on(‘data’, () => {});
res.on(‘end’, resolve);
});
req.on(‘error’, reject);
req.write(data);
req.end();
});
}
この仕組みを導入しておくだけで、「誰がいつ権限を変更したか」の追跡が自動化され、セキュリティ監査の工数を劇的に削減できる。
—
6. おわりに:ツールに縛られるな、ツールを飼い馴らせ
エンタープライズのセキュリティ基準と、スタートアップのような爆速の開発スピードは、本来トレードオフではない。
OktaやGoogle WorkspaceによるSSO/SCIMで「認証・認可の迷い」を完全にシステム側にオフロードし、Linearの圧倒的なUIとショートカット、そして適切な連携プラグインで「開発の摩擦」を削ぎ落とす。
規律ある自動化こそが、エンジニアのフロー状態を守り、チームのベロシティを極限まで高める唯一の特効薬だ。今すぐ設定を見直し、無駄な管理コストをコードと仕組みで駆逐せよ。