【実務・中級編】LinearのSSO(SAML)設定とSCIMプロビジョニング:企業セキュリティ基準を満たすエンタープライズ運用ガイド – プロジェクト・ナレッジ管理活用バイブル

開発スピードを殺すな: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とショートカット、そして適切な連携プラグインで「開発の摩擦」を削ぎ落とす。

規律ある自動化こそが、エンジニアのフロー状態を守り、チームのベロシティを極限まで高める唯一の特効薬だ。今すぐ設定を見直し、無駄な管理コストをコードと仕組みで駆逐せよ。

タイトルとURLをコピーしました