企業内で内部APIキーを共有しないようにするにはどうすればよいですか?


37

新しいサービスに取り組んでいます。このサービスは、ユーザーのデバイス上のアプリケーションから直接呼び出される可能性があります。これらのアプリケーションは、提供するデータに応じて、組織全体の複数の開発チームによって開発およびサポートされます。

使用パターンと責任のある開発者を特定できるように、どのアプリケーションがどのリクエストを送信しているかを特定したいと考えています。(疑念を避けるため、ユーザー認証は個別に処理されます。)

私たちのソリューションは、アプリケーションごとに1つのAPIキーを必要とすることです。その後、開発チームの連絡先の詳細を取得します。

APIキーを摩擦の原因にしたくはありませんが、開発者がそれらを他のチームの同僚と共有するのではないかと心配しています。つまり、1つのアプリケーションだけのトラフィックを識別できなくなります。

APIキーを内部で共有しないように開発者にインセンティブを与えるにはどうすればよいですか?


5
これらのチームはどのようにAPIにアクセスしますか?内部ネットワーク経由?一般に、異なるチームは異なるサブネットワークに配置されるため、ネットワークごとに特定のAPIキーの使用を強制できます。とにかく、ソーシャルソリューションは「セキュリティのためではなく、改善するために異なるユーザーのメトリックが必要です。誰かがあなたに彼らに私たちに尋ねるように言ったら、私たちは喜んで効率的にAPIキーを提供します」
ジャコモアルゼッタ

3
同僚とキーを共有したくない場合は、バージョン管理システムで無視される構成ファイルを簡単に組み込み(キーがコミットされないようにする)、新しいキーを簡単に作成できるようにします。別の開発者が自分で簡単に新しいキーを作成できれば、誰も秘密キーを共有する必要はありません。個人キーの共有に関する問題は、通常、新しいキーの取得に時間がかかるという事実に起因する問題です。
スルタン

アプリケーションの最初の起動時に登録を要求することを検討しましたか?ユーザーの連絡先の詳細(または必要な情報)を尋ねるスプラッシュスクリーンを表示し、その場でAPIキーを発行できます。
ジョン・ウ

「APIキーを内部で共有しないように開発者にインセンティブを与えるにはどうすればよいですか?」簡単に言えば、すべてのキーを、それらを実行するコンピューターのネットワークカードのMACアドレスに関連付けます。ネットワークプロトコルは、同じMACアドレスが同じネットワークで使用されるのを防ぐため、人々が同じキーを繰り返し使用することを防ぎます。私はこれを答えにしましたが、現時点ではその担当者がいません。
ブレルグ

不思議なことに、現時点ではこのページのどこにも「回転」という言葉はありません(キーの回転 -資格情報の有効期限/回転)。誰かがキーを取得すると、そのキーの寿命は有限になり、その後は使用されなくなり、新しいキーに置き換えられますか?そうでない場合は、なぜですか?
マイケル-sqlbot

回答:


76

これらのキーをチーム間で共有するには、チームが互いに話し合い、共有することに同意してから共有する必要があります。これには時間がかかります。したがって、チームがより迅速かつ簡単にAPIキーをリクエストできる場合、共有するインセンティブはありません。

そして、彼らがそれらの鍵を要求する最も簡単な方法は、それらを先取りすることです。APIキーを必要とする他のすべてのチームを知っていると仮定して、それらを作成し、共有してからサービスを利用できるようにします。

提供できるもう1つのインセンティブがあります:デバッグサポート。これらのチームは、自分の仕事をサービスに統合するときに物事が適切に機能しない場合にあなたの助けを必要とします。これらのAPIキーを使用すると、特定のリクエストを追跡できるため、問題のデバッグに役立ちます。そのため、「使用パターンと責任のある開発者を特定する」のではなく、キーの理由としてそれを販売してください。


2
再:あなたが正しい理想的な世界で共有します-しかし、あなたは彼らが完璧な情報を持っていると仮定しています(スキーマ、エンドポイントのルート、およびエラーからドキュメントに指示することで支援できますが)彼らが持っている可能性があるのはエンドポイントと、シニアマネージャーによって転送された別のチームからコピーされたコードだけです。
オリ

3
再:先制、あなたは絶対に正しいです、私たちは積極的にキーを作成し、関係者にキーを送信する必要があります。私が言及しなかったのは、これらのアプリのいくつかは共通のフレームワーク/インターフェースを使用しており、そのレイヤーで一意のキーを半自動的に挿入または適用できることですが、すべてのアプリに適用されるわけではありません。
オリ

1
@Ewan与えられたキーへのアクセスを単に無効にすると、すべてのユーザーがあなたに走ります-それらを追いかける必要はありません。そして、それらに一意のキーを与えることができます:)
アレクセイ・レベンコフ

15
先取りはこの形式を取る必要があります。キーなしでAPIにアクセスすると、キーを適用するページへのリンクを含むエラーメッセージが生成されます。誰もドキュメントを読むことを期待しないでください。インセンティブは、誰も知らないときには機能しません。
candied_orange

1
エラーメッセージまたはデバッグログがキーにリンクされたアドレスに自動的に電子メールで送信された場合、データを希望する人は自分のキーを使用するインセンティブを持ち、キーを共有した人はそれを共有した人を追跡するインセンティブを持ちます停止させます。
ロビンベネット

20

良い答えはすでにあります。私はあなたのために働くかもしれないし、そうでないかもしれない別のアプローチを考えました。

含まれるキーを発行するのではなく、Webブラウザーのように、フロントエンドアプリケーションの開発者が作成およびフォーマットするために、リクエストのヘッダーにフロントエンドアプリケーションの名前を含めることを要求できます。そうすれば、フロントエンドはまだ別のアプリケーションのふりをすることができますが、そうすることにはメリットがないので、そうは思えません。フロントエンドが自分自身を識別し、空でない文字列を受け入れるようにします。


アプリケーションの所有権が変更された場合、それは人生を多少難しくします-たとえば、エンドに保存されたAPIキーの詳細を更新するだけで、アプリケーションがコードを変更する必要がある自由形式のテキストを受け入れる場合。
オリ

1
@Oliアプリケーションの所有権が変更され、(新しい)開発者がアプリケーションのID(他の誰かがそれを維持しているために本当に持っている)を更新することが適切であると考える場合、問題は何でしょうか?所有権の変更前と所有権の変更後を区別することができ、それらを2つの異なるアプリケーションと見なすことができます。しかし、新しい所有者がすぐにヘッダーの名前に気付くことは期待していません。
マーティンマート

3
これが私がすることです。クライアントにアプリの名前である構築パラメータを持たせ、および/またはリフレクションを使用して、実行中のマシン、バージョンなどのような他のものを引き出します。重要なことは、人々があなたのAPIに従っていないときに報告できるようにすることですポリシー
ユアン

1
組織がバージョン管理に共通のアプローチを持っている場合、たとえば、誰もが組織のGitHubサーバーにコードを保持し、各アプリにURLをリポジトリとリポジトリの作成元のコミットハッシュに送信させます。コミットハッシュはビルドプロセスの一部としてコードに含めることができるため、開発者が更新する必要はありません。リポジトリURLを使用すると、所有者が誰であるかを確認でき、特定のコミットを取得すると、バージョン間の動作の違いに気付くことができます。
カレブ

@Caleb物事がそのように集中化されていれば、OPにはおそらくこの問題はないでしょう。私が理解していることから、フロントエンドのアプリケーション開発者は、ソフトウェア開発のプライベートな方法を使用して、OPに匿名で多く参加しています。
マーティンマート

16

要するに:

最初:円滑化と利点。必要に応じて:摩擦と警察。

もう少し言葉

円滑化:まず、チームが新しいAPIキーを簡単に取得できるようにします。たとえば、新しいプロジェクトを立ち上げるための企業手順にリマインダーを追加し、正当化を求めることなく、新しいキーを要求する使いやすいサービスを提供します。

利点:独自のAPIキーを使用することは、チームまたは製品所有者の利益になります。たとえば、そのキーに基づいてアプリの使用に関するフィードバックを提案します。

摩擦:キー機能に応じて、たとえばキーがアプリ定義ドメインにリンクされている場合に摩擦を作成できます(つまり、キーを再利用しても、必要なすべてのサービスにアクセスできるとは限りません)。

ポリシング:最後に、いくつかのポリシング対策を予測する必要がある場合があります。たとえば、APIキーごとにAPI関数の使用状況を監視し、一定時間後にベースラインを確立して、ベースラインの観点からは予期されないAPIパーツの使用に関する問い合わせを行うことができます。または、これが現実的でない場合は、有効なキーが使用されたことの検証を企業のプロジェクトレビューチェックリストに含めるだけです。

:APIキーポリシーについて明確にする必要がある場合があります。新しいメジャーバージョンには独自のAPIキーが必要ですか?フォークの場合、またはアプリが分割されている場合はどうなりますか?他のチームが担当している場合など


6

一般に、開発者に「正しいことをさせる」最も簡単な方法は、開発者がそれを簡単に行えるようにすることです。

そのために、Webページ/サイトを発行するAPIキーを作成することをお勧めします。最も単純な形式では、ログイン(企業のAD / LDAPに関連付けられていることが理想的)と、アプリケーション名を要求してキーを発行するページだけです。

一日の終わりにはいつでもキーを取り消すことができるので、サイトに本当に必要なことは、キーを要求したユーザー(ユーザー名)と、キーで何をしたいのか(アプリケーション名)を記録することです。後でキーを取り消します。

チケットシステムでも同様のことができますが、1日の終わりに1つのアプリから別のアプリにキーをコピーして貼り付けるのは非常に簡単です。したがって、悪いキーを避けるために、新しいキーを要求するのは本当に簡単でなければなりません動作。


1

積極的に。

可能性のある開発者を特定し、安全なチャネルで一意のAPIキーを事前に提供します。新しいAPIキーをリクエストする簡単な手段を提供します。新しい人々が新しいAPIキーを要求する簡単な手段を提供します。新しいインターンまたは採用者がチームに参加する場合、説明の手順とともにJIRAチケットまたは同様の「APIキーのリクエスト」を提供します。

使用されているAPIキーと使用されていないAPIキーを追跡します。ボブがプロジェクトでチケットを送信したが、自分のAPIキーを使用していない場合は、おそらく他の誰かのものを借りているでしょう。

経営陣のサポートを受ける。関係のないルールを作るノシィナンシーになるな。文字通り経営陣にそれが重要であると納得させ、そして彼らはそれが重要であることをグループに納得させるものです。皆を納得させるために努力しないでください。

そして、最も迷惑で専制的な傾向がある提案:誤用に注意し、同じ日に取り締まります。同じ時間が最適です。「悪いいたずらな開発者」と言ってはいけません。「ここに適切な手順があります」と言ってはいけません。繰り返し行う場合は、誤用されたキーを無効にします。これは共有者と借りた人の両方の面倒なことであり、共有者は将来「いいえ、正しくやる」と言うでしょう。ライブプロジェクトにあるキーを無効にしないでください。


1

APIキーを内部で共有しないように開発者にインセンティブを与えるにはどうすればよいですか?

  • セルフサービスアプリケーション登録の結果としてキーを生成します。
  • キーがアクティブになる前に連絡先を要求します。
  • そして、共有しないよう依頼してください。(利用規約を作成するか、共有ないほうがよい理由を説明します。)

レート制限も実装する必要があります。これ自体は、キーの共有を妨げる可能性があります。不正なアプリケーションからシステムをある程度保護します。(そして実に悪意のあるもの。)そして、それはあなたがサービス可能なトラフィックの大規模な増加の前にいくらか情報を与えられることを保証します。(容量を追加する時間を与えてください!)

また、レート制限では、アプリケーションがより高い制限を必要とする場合、キーに登録されたPOCでダイアログが開きます。キーが共有されているかどうかを尋ねる機会があり、それがなぜ有害なのかなどを説明し、要求されたレート制限の変更の代わりに適切なときに追加のキー提供できます。等。


0

特にチームが共有ビルドシステム(または少なくとも十分に一般的なもの)を使用する場合、物事を行う1つの方法は、APIキーを作成および発行する内部サーバーをセットアップすることです(それを使用する製品に関する基本的な情報をいくつか与えます)。次に、ビルドごと、またはバージョンの更新ごとに、サーバーから新しいAPIキーを取得するスクリプトを使用します。開発者がスクリプトを実行して、ローカルビルド用に別のキーを取得することもできます。(可能な場合は、ビルドの一部としてこれを自動化するので、彼らはそれについて考える必要さえありません。)

これにより、それが実稼働、QA、または開発のいずれにあるのか、およびどのバージョン/ビルドで問題が始まったのかがわかります。


0

できる最初の最善の方法は、キーをフォーマットして、アプリケーション名が読みやすい形式で含まれるようにし、変更すると機能しないようにすることです。

チームが間違ったキーを使用していることが明らかな場合、彼らはそうしないよう努力します。

次に、キーを定期的に期限切れにします。とにかくこれを行う必要があり、キーの有効期限が近づくと、キーを所有するチームに新しいキーを送信できます。キーを使用するチームは、キーが期限切れになったときに新しいキーを取得できるように、キーを所有するチームであることを確認するようになります。


1
実際には、キーを期限切れにすることは、採用するアプリケーションにとっては非常に大きなハードルかもしれません-後で問題になるので、マネージャーが「fuggetaboutit」と言っているのがわかります。
davidbak
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.