エンジニアがコードを展開および実行するときに、職務分掌を可能にするプロセスまたはツールは何ですか?


18

金融サービス部門などの規制の厳しい環境では、職務分掌は開発責任と生産特権を持つ個人間の衝突を回避するための不可欠なメカニズムです。

従来、これは開発者がコードを開発してから運用に引き継ぐことを意味していましたが、多くのDevOpsオペレーティングモデルでは、開発と運用の分離は少なくともぼやけています。

職務分離メカニズムの根本原因を数か月にわたって掘り下げた後、Sarbanes Oxleyセクション404:内部統制の管理評価を満たすために主に存在するようです。

(a)必要なルール。委員会は、1934年証券取引法第13条(a)または15条(d)で要求される各年次報告書に、内部統制報告書を含めることを要求する規則を規定します。

(1)財務報告のための適切な内部統制構造と手順を確立および維持するための経営者の責任を述べる。そして

(2)発行者の直近の会計年度末の時点で、財務報告のための発行者の内部統制構造と手順の有効性の評価を含む。

(b)内部統制の評価と報告。サブセクション(a)で要求される内部統制評価では、発行者の監査報告書を作成または発行する各登録会計事務所は、発行者の経営者が行った評価を証明し、報告しなければなりません。このサブセクションに基づいて行われた認証は、理事会によって発行または採用された認証契約の基準に従って行われるものとします。そのような認証は、個別の契約の対象にはなりません。

コメントに基づいて、私が行っているいくつかの仮定を呼び出すことが重要です。

  • 私は主に大規模市場の金融サービスを検討しています。つまり、取引量は多いが比較的低い価値です。これは、異なる取引価値プロファイルを持つ商業金融サービスとは対照的です。
  • 金融機関のオンラインサービスは、さまざまなリスクを考慮した多くのコンポーネントで構成されます。
    • Move Money-アカウント間でお金を移動したり、異なる所有者のアカウント間で送金したりします。いくつかを挙げると、マネーロンダリング防止、詐欺防止、および禁輸国を考慮しなければならない作業。
    • 顧客獲得 -Move Moneyに比べて取引量が少ないため「リスク」が少ないが、まだ検討が必要です。
    • インターネットバンキング -さまざまなレベルのリスクを伴う幅広いサービスをカバーしています。MoveMoneyはその一部と見なされます。
  • リスクに応じてそれぞれに異なるアプローチをとることが考えられますが、単純にするために、最もリスクの高いオペレーションの一部に適用されるソリューションに取り組んでいます。

TL; DR証券取引委員会の 規制に準拠する適切な内部統制を確保することは、経営者の責任です。

Sarbanes Oxley 404は通常、トップダウンリスクアセスメントを完了することで満足します。その一部は共謀のリスクを評価し、緩和戦略を進めます。

開発者が日常的にソース管理と生産の両方にアクセスできるDevOpsのプラクティスと文化を採用している会社内で、職務分掌を達成する方法、またはより一般的には結託のリスクを軽減する方法。


devops組織の背後にある主なアイデアは、チームの全員に実稼働環境での責任を負わせることであり、職務の分離はありえません。これは主に、この種の組織は、この分離に規制上のニーズがある場合、実際には使用できないことを意味します。
テンシバイ

@Tensbai私は、DevOpsは職務分離と互換性がないという主張に根本的に同意しません。法律は、統制の方法に関する規範ではなく、規制当局が銀行および金融サービスに事前定義されたプロセスを課しているわけでもありません。適切なものを特定し、規制当局とその任命された監査人に対して完全に透明性を保つのは、主に組織次第です。一例として、INGとBarclaysの両方がDevOpsプラクティスを採用して、顧客に価値を提供する能力を加速できるようにしています。
リチャードスレーター

はい、規制の分離に縛られていない主題の開発者は、制限された主題(実際には非常に少ない)のために従来のサイロベースの組織の自動化を利用しました。ソフトウェアが実行する操作の種類に応じて、2種類の組織があります
-Tensibai

法令/法律および規制機関は、金融リスクを管理するための「適切な管理」を持つ管理責任を課している金融機関に分離を課していない「規制分離」のようなものはありません。アジャイルがソフトウェア開発を長いサイクルから小さなサイクルに変えたのと同じように、DevOpsはオペレーションを小さなサイクルに取り込んでいます。金融サービスのDevOpsは、たとえばCDパイプラインを作成して、ピアレビューや承認ベースのプロモーションなどの「適切な管理」を実施します。
リチャードスレーター

1
@ Pierre.Vriensはい、タイトルに広範な質問があります。いくつかの仮定を立てて、それをさらに拡大しようとしました。役割は、Break-GlassやPrivileged Account Managementなどのように、ソリューションの一部になる可能性があります。役割と責任はDevOps / Agileの興味深い概念です。昔々、Java開発者、F / E開発者、デザイナー、PM、ビルドエンジニア、リリースマネージャー、Opsエンジニアがいました。複数の帽子をかぶる-専門的であるが最終的に責任を共有する「エンジニア」で構成される機能横断型チーム。
リチャードスレーター

回答:


8

あなたの質問は、それが対象としているプラ​​ットフォーム/ OSについて何の仮定もしていないようです。これが、メインフレーム環境でこれが通常どのように行われ、対処されるかについての答えを追加することが理にかなっている理由です。関与した。私の答えは、私が最も精通しているSCM製品の使用に基づいています(製品名を開示する必要があるかどうかはわかりません)。


1.アーキテクチャ


以下は、私があなたの質問に答える方法のハイライトです。

  • すべてのコード(および実行可能ファイルなどの関連するアーティファクト)はファイルに格納されます。これらはすべてライブラリ構造と呼ばれます
  • 各(おそらくリモートの)ターゲットシステム上の各環境には、ライブラリ構造内のすべての更新(すべて:繰り返し)を処理するサーバー(メインフレームの「開始タスク」)があります。いくつかの例外(セキュリティ担当者やスペース管理チームなど)がありますが、それ以外は誰も(繰り返し:誰も)そのライブラリ構造内のファイルに更新を適用する権限を持ちません。つまり、サーバーはライブラリ構造全体に対する排他的な更新権限を取得します。注意:OPSの人々は、アクセスを制限するために立ち入ると(最初は抵抗しようとします...)
  • 実際のソフトウェアの変更は、単一のコンポーネント(深夜の小さなコード修正...)で構成されている場合もあれば、数百または数千のソース、実行可能ファイル、またはその他のアーティファクト(週末のリリース中)である場合もあります。それらを管理しやすくするために、(多かれ少なかれ)一緒に移動する必要があるものを、同時にソフトウェア変更パッケージと呼ばれるものにまとめます

上記により、サーバーによってライブラリ構造に適用されるすべての種類の更新は、ソフトウェア変更パッケージ(必要に応じてSDLC)のライフサイクルと呼ばれる明確に定義されたワークフローを介してのみ可能になります。そのワークフローのさまざまなステップを実際に実行するには、これを実現するために必要なものです。

  • サーバーのみが必要な(および事前構成された)ステップを実行します。
  • サーバーは、特定のステップ(=ライブラリ構造内のどこかで何かを更新する)のみを実行します。そのようなステップを実行するために必要な承認(人間から)が収集された後です。
  • 承認は、そのような承認を発行することを許可するロール(=許可)を持つユーザーのみが行うことができます。


2.役割と権限


サーバーは、ユーザーの許可が適切な場合に、何かを実行しようとするユーザー(「何かを承認する」など)のみが実行できるようにします。その部分は簡単です。ただし、SCMシステムを使用して、関係するすべてのユーザーのすべてのアクセス許可を管理する必要はありません。これはセキュリティシステム(SCMシステムではありません!)に属しているため、ワークフローを(SCMシステムで)調整できます必要に応じてこれらの権限を確認してください。以下の手順は、その詳細を提供します。

ステップ1:アクセス許可を構成する(セキュリティシステムで)

  • 定義セキュリティエンティティをこれらのエンティティのために明確に定義された名前で、セキュリティシステムに。いくつかのサンプル(ご自身のニーズに合わせて同様のサンプルを追加してください):

    • PrmUnitプロモートユニットテストを要求する許可を取得するために使用されます。
    • PrmQAプロモートQaテストを要求する許可を取得するために使用されます(これが最高レベルのテストであると仮定しましょう)。
    • PrdEnduser、あるレベルのテストに関与するエンドユーザーが使用し、ある種のテストによって生成された結果に満足していることを示します。そして、そのため、それらのエンドユーザーは、ライブラリ構造の変化が進むことに同意します。
    • PrdRelmgnt、実稼働環境でのアクティベーション(=ライブラリ構造の最後/最高レベル)を承認するためにリリースマネージャーによって使用されます。
  • セキュリティシステムでユーザーのグループを定義します。いくつかのサンプル(ご自身のニーズに合わせて同様のサンプルを追加してください):

    • GrpDevs、これは(たとえば)開発者に対応します(おそらく1つ以上)。
    • GrpEnduser、(たとえば)エンドユーザーに対応します(少なくとも1人、できればより類似したユーザー)。
    • GrpRelMgnt、(たとえば)リリースマネージャー(少なくとも1人、できればさらに数人のユーザー)に対応します。
  • また、セキュリティシステムを使用して、選択した「ユーザーグループ」の選択した「セキュリティエンティティ」へのアクセスを許可する権限を付与します。上記の例を続けるために、適切と思われるものを以下に示します(自分のニーズに合わせて調整します)

    • グループGrpDevsは、セキュリティエンティティ(のみ)にアクセスできますPrmUnit
    • グループGrpEnduserは、セキュリティエンティティ(のみ)にアクセスできますPrdEnduser
    • グループGrpRelMgntは(両方!)セキュリティエンティティPrmQAとにアクセスします PrdRelmgnt

ステップ2:ワークフローを構成する(SCMシステムで)

セキュリティシステムでアクセス許可を構成した後(ステップ1)、SCMシステムで行うべきことは、ライフサイクルのさまざまなステップがセキュリティシステムの関連するセキュリティエンティティとどのように一致するかを構成することだけです。つまり、必要なセキュリティエンティティへの適切なアクセス権を持つユーザーのみが、ワークフローの対応するステップを実行するようにサーバーに要求できます。

以下に、SCMシステムを構成していくつかの魔法を実現する方法の例を示します。

  • ユーザーがアクセス権を持っている場合はPrmUnit、そのようなユーザーが要求するために許可されている推進ユニットが -testingを。明らかに、グループGrpDevs内のユーザーはこれに対して許可されているユーザーです(注:たとえば、グループ内のユーザーではありませんGrpRelMgnt)。
  • ユーザーがにアクセスできる場合PrmQA、そのようなユーザーはQAテストへの昇格をリクエストできます。明らかに、グループ内のユーザーは、これに対して許可されているユーザーです(注:たとえば、group 、group内のユーザーではありません)。GrpRelMgntGrpDevsGrpEnduser
  • ユーザーがへのアクセス権を持っている場合PrdEnduser、そのようなユーザーは、ライブラリ構造内で前進する変更を承認することができます(通常、グループ内のユーザーがGrpRelMgnt変更をレビューするための前提条件です)。明らかに、グループGrpEnduser内のユーザーは、これを許可された(唯一の)ユーザーです。
  • ユーザーがへのアクセス権を持っている場合PrdRelmgnt、そのようなユーザーは実稼働環境でのアクティベーション(=ライブラリ構造の最後/最高レベル)を承認できます。


3.予期しないことを予期し、それに備えてください


上記は単なる青写真であり、最終的には職務分掌を処理するのがサーバーであるかを理解するのに役立ちます。

上記で説明したように全体像を完成させるために、サーバーはシステムで発生しているすべての監査証跡(ログ)を作成します。そのため、いつでも次のような質問に答えることができます。

いつ、なぜ、そしてどの許可ユーザーが実際にそれを承認したのか...前もって?

しかし、おそらく最も難しいのは、適切なレポートツールを利用可能にすることです(そして、それらの使用方法を知っていることです)。少なくとも(簡単に)IT監査員からの要求を満たすため(質問は非常に難しい場合があります)。しかし、SCMシステムの関連するログレコードを参照して、あらゆる種類の「何が起こったのか」(生産の一部)がダウンしている危機的な状況での質問に答えることもできます。


PS:私の答えがDevOpsに準拠しているかどうかは、誰でも判断できます。


これはトップダウンリスク評価の基本的な実装のように聞こえますが、開発者が「展開」スイッチをトリガーする権限を持つdevopsの方法でこれをどのように実装できるかという質問にどのように対処するのかわかりません。devops組織ではできないという考えですか?
テンシバイ

@Tensibai "if"開発者が(たとえば)prodの最終承認(そのような組織では通常持っていない)のauth(ロール)を持つと、そのようなサーバー(開始タスク)が展開を開始します。そして質問のタイトルごとに、これは「a」の可能な答えだと思います。しかし、これがDevOps組織と呼ばれるものかどうか疑問に思うかもしれませんが、監査人はこの種の「構成可能な」職務分掌が本当に好きであることを知っています(例:四目とそのバリエーション)。リチャードはこれについての彼の視点で私たちを助けることができますか?
Pierre.Vriens

1
監査人は絶対にそれが好きであることに同意します。これがアクセスの「爆発」とどのように関連/適合しているのか見逃しただけです。それが合わないと言うことは絶対に有効な答えです。
テンシバイ

1
回答に多くの時間を割いていただきありがとうございます。私は実際に3人のルールを実装することを考えています。1人の開発者がコードを記述し、別の開発者がコードをレビューし、第三者がリリースボタンを押してコードをデプロイします。他の考慮事項は、これは全社規模のアジャイル/ DevOps導入の一部であるためです。開発チームは非常に小さく、生産の薄いスライスへの生産アクセスを持つ少数の人々の正味の影響により、これはリスクの観点から好ましいと思われます。
リチャードスレーター

1
@ Pierre.Vriens 2回アップ投票できない、素晴らしい延長:)
テンシバイ

5

フランスの「内部統制」規制についての私の知識に基づいた回答は、あなたが指し示すSEC規制に相当しますが、ここでフランスの法的文書にリンクすることはあまり役に立たないと思います。

理想的な「構築して実行する」モデルでは、チームの全員が変更に対して責任を負います。職務の分離によってリスク評価を実施することはできません。規制に準拠し続けるために知っている唯一の方法は、リリースを行った人に戻るために変更不可能なアクショントラッキングとともにトランザクションの定期的な短サイクル監査を行うことです。
これは、トランザクションとアクションのすべてのログが、チームがアクセスできない制限された領域にプッシュされることを意味します。ログに記録される内容の変更は、チームがアクセスできない機能テストによってキャッチされ、さらに悪い場合はキャッチされます監査によって、その著者まで追跡されます。

これはすべての製品に適用されるわけではありません。フランスの執筆時点では、お金を出すことを許可されている会社(主に銀行)は、すべての取引を記録する必要があるため、取引を見落とすリスクはありません。
一方、彼らは誰かがローンを要求したときに商業的なオファーやリスク評価を追跡する法的義務がないため、この顧客の選択を処理し、オファーに含まれる料金を計算する製品はポストに収まりやすい-リリース監査モデル。

主な考え方は、リスク評価の義務に従ってリリースモデルを調整する必要があるということです。

関連リソースはISO27001規格です。


多くの欧州の銀行が実際にフランスで営業しているため、興味深い回答であり、非常に重要です。「Emit Money」の意味を拡張できる可能性はありますか。つまり、ATMからの現金だけであるか、残高の振替が含まれていますか。法令へのリンクこの場合、それは関係なく、彼らがしている言語の、関係法令へのポインタを与えるように価値があるであろう。
リチャード・スレーター

@RichardSlater手短に言えば、お金で仕事をしている会社はすべて、投資のみの会社であり、従来の銀行に沿ったローンブローカーになり得ます。ほとんどの場合、どこかで財政的影響を与えるものが懸念されます(当局が来る状況の下で与えることができるいくつかの例外から)。フランス語の法的な「リスト」はここにありますが、フランス語でさえそれが常に明らかであるとは限りません。
テンシバイ

私は、ISO標準へのリンクは実際にはISO27001:2013
Richard Slater

@Richardは確かに、フランス語から英語へのリンクがウィキペディアで更新されていないようです。後で更新します(またはご希望の場合は、お気軽に編集してください)
天柴s


0

IMHO、Developers&Operationsは、同じコードベース用の 2つのgitリポジトリにすぎず、それぞれが異なるアクセス許可モデルを備えているため、チームがお互いの作業に干渉することはまったくありません。

例として、それらをDev.mygithub.coops.mygithub.coと呼びましょう。

アイデアは-gitは、完全なトレーサビリティを提供している開発者は、自分の心の内容に/ブランチ/マージを作成するために自由であること、であり、それは規制の枠組みを見直し努力を暗示することを瞬間に、一方here-重要なものであるプル要求がために、上昇させることができます制御された方法でマージすること。

この概念を次のレベルに引き上げると、開発ブランチは、さらに別のプルリクエストアクトを介してリモートOpsのプロダクションに伝播できます。その最後の部分は運用の手と目で行わなければなりません。なぜなら、彼らはそれを本番に精査する責任があり、レビューのレベルを選択するからです。

このようなスキームにより、無限の柔軟性、完全なトレーサビリティ、さまざまなプロセスを介して早期に問題をキャッチする能力、懸念の分離、プロセスにおける非常に合理的なユーザーエクスペリエンスが可能になります

注:OpsとDevが完全に重複する場合でも、上記のモデルに従うことができます!


1
確かに、開発者が自由にコミットできるようにするプルリクエストとコミット後のフックによって、これと同じ制御を実現できますが、マージコミットは承認されたグループのみが行うことができます。同様に、同じコミット後フックにより、プルリクエストを作成したコミットの作成者にプルリクエストを作成した人が含まれていないことを確認できます。
リチャードスレーター

@RichardSlater:あなたは二つの異なるリポジトリを持つことを望むかもしれたい理由は、あなたが両方に二重の必要性がしていることであることができ、彼らが自由に開発者モード-のコードだけでなく、スワップ-when開発者が合併するブロックそれがあるときに、コードをマージからほとんどの開発者を生産に向けて(モジュロSysOps、いわゆる「承認された人々のグループ」)。
-fgeorgatos

繰り返しますが、GitHub Enterpriseが保護されたブランチを許可することは言うまでもなく、コミット後のフックとプルリクエストでそれを実現できます。
リチャードスレーター

0

高いほど高価です。

  • 作業を一方から他方に引き継ぐための個別の開発および運用サイトと方法
  • 上記とは異なるdevおよびopsシステムおよびメソッド
  • 異なるdevおよびops git / vcsリポジトリと関連メソッド
  • 異なるdevおよびops git / vcsブランチ(保護)および関連メソッド

あなたが何をするかに応じて、いくつかのソリューションは他のものよりも優れています。たとえば、2つのチームにそれぞれ異なる役割を持ち、それぞれが所有権を持ち、完全なトレーサビリティを提供する必要がある場合、最初の3つにカーソルを合わせます。

つまり、1人の男またはギャルが単独でボールを取り、それと一緒に走ることができないことを強制するものはすべて、開発者と運用者の間の明確な境界を越えます。現在、リスクのレベルに応じて、その境界が実施されるかどうかが決まります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.