CI/CDワークフローGitOps

 
カテゴリー CI/CD   タグ

GitOps

Operations by Pull Request

GitをSingle Source of Truthとして扱い、ほぼすべての操作をGitを介して行う。

  • 宣言的なリソースプロビジョニングとデプロイ
  • システム全体が単一のGitリポジトリで管理される
  • 運用上の変更はPull Requestを介して行う
  • diffツールで差異を検知しアラートを通知。syncツールで収束することが可能
  • ロールバックや監査ログもGit経由で行う

What exactly is GitOps? By using Git as our source of truth, we can operate almost everything. For example, version control, history, peer review, and rollback happen through Git without needing to poke around with tools like kubectl.

  • Our provisioning of AWS resources and deployment of k8s is declarative
  • Our entire system state is under version control and described in a single Git repository
  • Operational changes are made by pull request (plus build & release pipelines)
  • Diff tools detect any divergence and notify us via Slack alerts; and sync tools enable convergence
  • Rollback and audit logs are also provided via Git
    GitOps width=640

Continuous Delivery and GitOps Workflows

開発者はGitを扱える前提のPull Requestベースのソフトウェアデリバリーフローになっている。

  1. 新機能のレビューのためPull RequestがGitHubにPushされる
  2. Pull Requestはレビューと承認の後、GitにMergeされる
  3. GitのMergeをトリガーにCIとBuild Pipelineが実行され、コンテナイメージがレジストリにPushされる
  4. ‘Deployment Automator’ がコンテナイメージレジストリの変更を検知し、構成リポジトリのマニフェストファイルを更新
  5. ‘Deployment Synchronizer’ がクラスター(稼働中のクラスター)が古いことを検知し、変更されたマニフェストファイルを構成リポジトリから取得し、クラスターにデプロイする
  1. A pull request for a new feature is pushed to GitHub for review.
  2. The code is reviewed and approved by a colleague. After the code is revised, and re-approved it is merged to Git.
  3. The Git merge triggers the CI and build pipeline, runs a series of tests and then eventually builds a new image and deposits to the new image to a registry.
  4. The Weave Cloud ‘Deployment Automator’ watches the image registry, notices the image, pulls the new image from the registry and updates its YAML in the config repo.
  5. The Weave Cloud ‘Deployment Synchronizer’ (installed to the cluster), detects that the cluster is out of date. It pulls the changed manifests from the config repo and deploys the new feature to production.
    GitOps width=640

Pull pipeline & Push pipleline

一般的なCI/CDツールはPushベースのモデルで、CIをトリガーにデプロイまで行う。このモデルの問題点は本番クラスターの外部に認証情報を公開する必要があるということ。一方、GitOpsではPullベースのモデルで、クラスターが変更を検知して自動的に同期するため、外部に認証情報を持つ必要がない。
(ここはWeaveWorksの宣伝ポイント)

Most CI/CD tools available today use a push-based model. A push-based pipeline means that code starts with the CI system and may continue its path through a series of encoded scripts or uses ‘kubectl’ by hand to push any changes to the Kubernetes cluster.
The reason you don’t want to use your CI system as the deployment impetus or do it manually on the command line is because of the potential to expose credentials outside of your cluster. While it is possible to secure both your CI/CD scripts and the command line, you are working outside the trust domain of your cluster. This is generally not good practice and is why CI systems can be known as attack vectors for production.
GitOps width=640
GitOps width=640

GitOps Tools

CloudGenesis

GitOps with Weave Flux

Atlantis

コメント・シェア

2020年03月WindowsUpdateでLDAP署名とLDAPチャネルバインディングが有効に

2020年3月のWindowsUpdateで2つの機能が有効化される

  • LDAP署名
    • SASLが署名されていないLDAPバインドを利用できない
    • SSL/TLSなしのLDAPシンプルバインドを利用できない
  • LDAPチャネルバインディング必須(LDAPS利用時のみ)
    • CBTを提供できないLDAPクライアントが接続に失敗する可能性がある

LDAP

LDAP認証はRFC4513で規定されてる。

バインド(bind)はLDAPサービスへのログインのこと。
ldapsarchでは-DオプションでBIND DNとしてログインユーザを指定する。

BIND Operation

RFCではBIND OperationとしてSimple Authentication MethodSASL Authentication Methodが規定されている。

SASL(Simple Authentication and Security Layer)

SASL(Simple Authentication and Security Layer)はRFC4422で規定されているプロトコルで、LDAPの他に、SMTP、IMAP、Databaseなどで利用される。

RFC4422のIntroductionで示されるように、利用するプロトコルと認証メカニズムの間の抽象化レイヤーとしてのフレームワークで、認証メカニズム自体は別のプロトコルと組み合わせて利用する。
認証メカニズムはIANAでSASL Mechanism Registryとして公開されている。

昔よく見かけたDIGEST-MD5KERBEROS_V4はすでにOBSOLETE扱いで、CRAM-MD5NTLMもLIMITED扱いになっている。

SASLが規定するのは認証(Authentication)機密性(Confidentiality)完全性(Integrity)が規定されているが、すべてを満たす必要はない。

GSS-API(Generic Security Standard Application Programming Interface)

GSS-APIはRFC5179で規定されている。
GSS-APIを使用したプログラミングについてはOracle GSS-APIのプログラミングが参考になる。
結局GSS-APIも抽象化レイヤーでしかなく、実態はKERBEROS_V5を使用する。

SASL Mechanism Registryで規定された、GSSAPIRFC4752で規定されたKERVEROS_V5(GSSAPI)を使用したSASL Mechanism。

Active DirectoryのLDAP機能

ActiveDirectoryのディレクトリサービスはLDAP v3でユーザ認証はKERBEROS_V5が使用されている。

Active DirectoryのLDAP署名

LDAP署名(LDAP Signing)はSASLの完全性(Integrity)のためのintegrity verificationの機能。
ActiveDirectoryのSASL実装は既定の設定では認証(Authentication)のみを使用するが、LDAP署名を有効化することで完全性(Integrity)も使用することとなる。

Active DirectoryのLDAPチャネルバインディング

チャネルバインディングは認証されたトランザクションと機密性(Confidentiality)が確保された通信路(セキュアチャネル)を結びつけ、man-in-the-middle攻撃から保護する機能。

チャネルバインディングはLDAPに関しての規定は見当たらないが、GSS-APIでチャネルバインディングが存在する。
セキュアチャネルにチャネルバインディングを使用する場合についてRFC5056で規定されている。セキュアチャネルとしてはSSHv2(SSH-CB)、TLS(TLS-CB)が示されている。
また、RFC6542でKERBEROS_V5のGSS-APIにおけるチャネルバインディングが規定されている。

いずれもわかりにくく、平易にチャネルバインディングについて説明されたものではないが、Microsoftの認証の拡張保護の概要がわかりやすい。

LinuxクライアントはChannel Binding Tokenを提出できないのではないか?(完全を設定した場合拒否されるのでは?)

その後

延期された。

2020 年 2 月 5 日: セキュリティ アドバイザリ ADV190023 の更新に伴い、2020 年 3 月での更新予定内容を追加し、有効化措置の予定を 2020 年後半に変更しました。

コメント・シェア

  • page 1 of 1


nullpo

めも


募集中


Japan