開発者の開発ペースを落とさずに強固なインフラストラクチャ・セキュリティを実現するためには

Gravitational    
teleport」「teleconsole」など、クラウドネイティブのアプリケーションとインフラストラクチャを提供するオープンソースソフトウェアベンダー
この記事は、著者の許可を得て配信しています。
https://gravitational.com/blog/solid-infrastructure-security-without-slowing-down-developers/

この記事では、SaaS企業が強固なクラウド・インフラストラクチャ・セキュリティを持つことと、やりすぎて自社のエンジニアを怒らせてしまうことのトレードオフにどのようにアプローチしているかについて、私の見解を共有したいと思います。

セキュリティというものはイライラの原因になります。セキュリティがイライラの原因にならなければ、日々の暮らしがもっと楽になるかもしれません。もしあなたがSRE(Site Reliability Enginee)で、緊急のダウンタイムに対処している最中に、問題のあるデータベースマスターから「アクセス拒否」のメッセージを受け取るとします。これは、医者が必死で命を助けようとしている患者に自分の顔を殴られるのと同じくらい腹立たしいことでしょう!

このブログ記事では、一般的なアンチパターンについて説明します。そして、代替案を提案し、我々がおすすめするより良いプラクティスをより良く実装する方法についてのより低いレベルの技術資料を提案したいと思います。

やりすぎてしまうことに対しての隠れたコスト

私たちは、他のすべてのものを犠牲にして「最大」のセキュリティを確保することが必ずしも良いことではないという、今まで見て見ぬふりをされた問題にすぐに対処したいと思っています。誰もが 「ロックスター・ハッカー」を探しており、最高のエンジニアをチームに引き入れようとしていますが、不自然な方法で仕事をさせると 「ハッカー 」は何をすると思いますか?

ハッカーは「裏口を作る」のです。

それには必ずしも悪意があるとは限りません。SSH 接続用に独自の 「bastion (踏み台)ホスト」を持っていて、全員に強制的に接続させているとしましょう。bastionソリューションは ProxyJump の設定と互換性がなく、Ansible スクリプトを実行したり、マシンから直接に対話型のセッションを確立したりすることができないようにしています。bastionが VPN からの接続のみを受け入れるように最初から設定されているのを見たことがありますが、これでは 「bastion」 と呼ばれる目的を壊しているような感じではないでしょうか?

SSH アクセスをものすごく複雑にすることで、別の「秘密の」bastionを作ってしまうことになるかもしれません。これは単純に他の場所で開発者がより生産的になろうとしているからです。

あるいは、エンジニアが手動で常に「ジャンプ」するのが面倒だと判断したために、そのホストが Jenkins や Wordpress などの追加サービスを実行していることに気づくかもしれません。おめでとうございます。これで、あなたはこれらのアプリケーションの潜在的な悪用に対して脆弱になりました。

一般的に、複雑さは優れたセキュリティに対しては敵となります。複雑なシステムは使いにくいだけでなく、推測するのも難しいものです。そのため、チームには質の高いセキュリティに対応する人材が必要になります。セキュリティ侵害の多くはヒューマンエラーに起因しており、その複雑さに直面すると人間はより多くのミスを犯す傾向があります。

インフラストラクチャのアクセスを複雑にしすぎたり、不便にしすぎたりすると、よりセキュアではない状態になってしまいます。

やらないことに対しての明らかなコスト

一方で、いくつかの企業はその逆のことを行っています。多くの SRE で共有されている Github のプライベートリポジトリに admin.pem を貼り付けることで満足しているのです。また、プロビジョニングの際に SSHキーをサーバに配布するように全員に要求する会社もあります。悲しいかな、とてもよくあることです。

多くのエンジニアが「今でも前職の本番環境にアクセスできる」と告白しています。これは、大手クラウド事業者のプロダクトディレクターをしていた頃、顧客とのやりとりの中で何度も聞いた話です。

何よりも利便性を重視して最適化すると、最終的に脆弱な状態に陥ってしまうのは当然のことです。

インフラストラクチャ・セキュリティを実装するための絶対的に正しい方法は一つではありませんが、あなたのチームに役立つと思われるいくつかのオプションをお教えしたいと思います。

アイデンティティ優先

アイデンティティベースのアクセスには、早めに投資する価値があります。「アイデンティティ」という言葉は、お粗末な業界のマーケティングによって乗っ取られ、認識できない状態ところまでいってしまいました。しかし、そのコアコンセプトは原理的にも実装するにあたってもシンプルです。

「何を」(秘密)に基づいてアクセスを許可するのではなく、「誰を」(アイデンティティ)に基づいてアクセスを許可するのです。

秘密は紛失したり盗まれたりします。セカンドファクターでも、1つの秘密を2つに分けるだけなので万能ではありません。

アイデンティティベースのアクセスも、より便利です。というのも、もしあなたがJohn Doe氏であり、Devopsエンジニアであれば、営業時間中にこれが変わることはないからです。また、様々なシステムに常に秘密を提供することに悩まされることもないはずです。

これは実際にはどうなのでしょうか?

SSH を例に挙げると、本番環境への SSH アクセスを admin.pem キーを持っているなら誰でもというのではなく、「SRE」 グループのメンバーだけに許可することを考えてみてください。また、アクセスを許可する期間が限られていることを確認してください。

これにより、SSH キーをうまく処理する必要がなくなり、同時に全員の生活が楽になります。しかし、最も重要なことは、チームメンバーがSREグループを離れた場合(例えば会社を辞めたり、他のチームに移ったりした場合)、そのアクセスは自動的に取り消されるということです。

SRE グループはどこに格納されているのでしょうか?最も便利な方を選んでください。格納先としては、Github、Google Apps、Active Directoryなどが考えられます。ただ、エンジニアだけでなく、全従業員のアイデンティティの単一ソースを使用していることを確認してください。

証明書の使用

どのようにグループメンバーシップに基づいてSSHアクセスが付与されるのでしょうか?SSH キーは (「自動的にローテーションされている」場合でも) そのままにしておき、証明書ベースの認証を採用しなければなりません。

私たちは以前ブログで 「SSH の正しい使い方」 について書いたことがありますが、 そこで事実上の標準規格である OpenSSH を使って設定する方法を紹介しました。あるいは、「SSH の正しい使い方」に書かれてあるテクニックをすべて自分で実行する代わりに、 私たちのオープンソースの Teleport ソリューションを使って簡単に実行することもできます。Teleport はインフラストラクチャにアクセスする唯一の方法として、 ID ベースのアクセスを採用しています。これによりアクセス管理が簡単になり、ID ベースのアクセスの副次的な効果として劇的に優れたユーザエクスペリエンスが得られるようになります。

なぜ証明書なのでしょうか?なぜなら、証明書には指定されたTTL(生存時間、残存期間)があるからです。これはアクセス資格情報が自動的に失効することを意味します。さらに、証明書はメタデータのインジェクションを可能にします。メタデータは次のようないくつかの理由から、とても便利なものであると言えます。

・セキュリティ監査ログに、監査可能なタスクを実行した人のフルネーム、メールアドレス、役職などの追加情報を追加して、セキュリティ監査ログを充実させることができます。

・RBAC(ロールベースのアクセスコントロール)を実装することができます。RBACを実装するためには、HTTP/TLSで使われているX.509証明書が広く使われています。そして、SSH証明書を標準化すれば、少なくとも理論的にはSSH用のRBACを持つことができます。

SSH 証明書を使うもうひとつの利点は、他のすべてのものが既に証明書ベースであるという点です。エンジニアがラップトップを開いてSSOプロセスを経ます。そして、必要なものはすべて同じ認証局から証明書を受け取ることができます。SSH、Kubernetesそしてこの形式の認証に対応している内部のWebアプリケーションなど、全てです。

Jump Hostsではなく、プロキシを使用する

アクセスプロキシと SSHジャンプホストには微妙な違いがあります。ジャンプホストは普通の SSH サーバで、たまたまインターネットにエクスポーズされているだけのものです。開発者は、手動か、もしくは OpenSSH ProxyJump 設定やその古いタイプのProxyCommand を使って、 ジャンプホストに接続して、ジャンプホストから接続先までの また別のSSH セッションを確立しなければなりません。これには次の三つの理由があります。

1. ビルドサーバーや、個人的なステージング環境としてなど、ジャンプホストを元々の役割以上の役割を担うものとして扱い始めたくなります。単純にその方が便利だからです。

2. 手動のジャンプが実行された場合、エンドツーエンドの暗号化はすっかり消えてなくなります。というのも各セッションがジャンプホスト上で復号化され、再度暗号化されるためです。例えば、もしアタッカーがジャンプホストへアクセスすれば、セッションやキーを盗むことがより容易になります。

アクセスプロキシの概念はもっとシンプルな概念です。ジャンプホストと似ていて、インターネット経由でアクセス可能なサーバですが、そこに SSH でアクセスすることはできません。暗号化された接続を転送先にプロキシするだけのダムスイッチと考えてください。

1. そこにSSHする方法がないので、アタックサーフェスを増加し、追加の任務で負担をかけようと思うこともありません。

2. エンドツーエンドの暗号化は常時実施されています。つまり、アタッカーがこのボックスにアクセスしても、彼らが分かるのはたくさんの暗号化された接続がプロキシされていることだけです。

3. アクセスプロキシは複数のプロトコル、つまりSSHだけでなくKubernetes APIや、JenkinsのようなWebツール用のHTTP/TLSにも対応しています。

言うまでもなく、アクセスプロキシの方が好ましいです。

オートメーションの使用

そしておそらくもっと重要なことは、そもそもインフラにアクセスする必要性を最小限に抑えることができるということです。ソフトウェアエンジニアとして、私たちは一台のコンピュータだけ、自分だけのコンピューターを扱う方が好ましいと考えています。テストに合格し、コードのレビューが良ければ、git commit の後に push をすれば、それで完了です!


コメントを読む

新着ピック  










山本 聡山本 聡7時間前フリーランスWebフロントエンドエンジニア












新着ニュース

【MediaPipe】Multi Hand Trackingで3つ以上の手を骨格検出できなかった話 | Developers.IO

【MediaPipe】Multi Hand Track...

DevelopersIO / 7時間前


ジンバブエで日産リーフを利用したタクシー配車システムを展開するVaya Africa | TechCrunch Japan

テレワークにピッタリな新型Let's note 「withコロナ」でもビジネスに貢献

最大20万円の「学生支援緊急給付金」をLINEで申請可能に--文科省が公式アカウント開設

米連邦控訴裁が極右活動家のグーグルやアップルに対する反保守偏向訴訟を棄却 | TechCrunch Japan

入社して4ヶ月Alteryxの認定試験いろいろ受けてみた | Developers.IO

AWS CLIを使って、Amazon S3で静的ウェブサイトをホスティングしたい | Developers.IO

IT業界の「多重下請け地獄」が横行し続ける真の理由

Retty×CAMPFIRE、飲食店応援プロジェクト--資金集めから店舗展開までサポート

PC版「LINE」のビデオ通話にバーチャル背景機能

ドコモ、厚労省に人口統計データ提供 新型コロナ感染拡大予防で協力

Twitterのファクトチェック警告に怒り心頭のトランプ大統領、SNSを規制または閉鎖すると息巻く | TechCrunch Japan

メイドイン和歌山の公道走れる電動キックボードがMakuakeに、開始1時間で目標金額400万円を突破 | TechCrunch Japan

NTTコムに不正アクセス 法人の工事情報が漏えいした疑い

「Disney+」6月11日より国内での提供開始 --月額定額700円

Crew Dragonの最新型宇宙服は通信装置と温度調節の機能を内蔵、タッチパネル対応グローブも装備 | TechCrunch Japan

note、イベントスペース「note place」6月オープン オフ会から発表会まで対応、配信設備も完備

MVNOも導入予定の5G その際に悩ましい「5Gピクト」「端末」「エリア」問題

[アップデート] Network Load Balancer で TLS ALPN がサポートされたので HTTP/2 が可能になりました。 | Developers.IO

マイクロソフト、スタンドアロンの「Cortana」アプリをリリース--生産性支援機能を強化

もっと見る
記事をPICKする
会員登録
Register
記事をPICKする

会員登録すると、もっと便利に利用できます。