KubernetesのためのOKTA:一歩一歩ガイド


ルコデムウィラによって
シングルサインオン(sso)は,異なるアプリケーション間でのユーザ識別のセキュリティ姿勢を強化するための企業戦略の重要な部分となっている.SSO 多くの自律的なソフトウェアシステムにアクセスするとき、それらが1セットの資格証明書を使うのを可能にするユーザのための認証システムです.このセキュリティモデルでは、企業は異なるプラットフォーム間でユーザーのための連合アイデンティティを作成することができます.これは、内部チームのアクセスをツールのようなツールに与えるために一般的ですGoogle Workspace , Slack , Asana , しかし、SSOは、この性質の適用に限定されませんまた、Kubernetesのようなプラットフォームで使用することができます.
システムとして,kubernetesはユーザとアプリケーションの認証(authn)と認可(authz)のプロセスを分離する.に使用できるいくつかのアプローチがありますauthenticate users . これらのオプションからOpenID Connect (OIDC) あなたのクラスタのSSO認証モデルを設定するのに使用できます.KBBERNETTEのためのSSOを持つことは、組織が強化して、固守して、スケールでクラスターユーザーのためにアイデンティティ管理を単純化するのを許します.さらに、クラスタ操作を最適に実行するために必要なパラメータを持つソフトウェアチームに権限を与える.
この記事では、KBerbertesのコンテキストでのSSOの理由と理由について詳しく説明します.また、あなたのクラスタのSSOを設定するステップバイステップガイドも提供しますOkta and Loft .

KubernetesのSSOとは


この時点で、Kubernetesは、ユーザーアカウントのストレージと管理のための内部システムを維持しません.代わりに、ユーザはクラスタの外部で作成し、管理しなければなりません.これは「ユーザ認証はどの程度正確に機能しますか?」スターターの場合、認証はユーザまたはエンティティが誰であるかを確認するプロセスです.Kubernetesのコンテキストでは、Kubernetesクラスタと対話しようとするユーザーは、クライアントの要求に一定の資格情報を添付しなければなりません.これらの資格情報は外部のAuthnモジュールに対して渡され、検証されます.
あなたの組織がOIDCサポートでアイデンティティプロバイダー(IDP)を使用するならば、あなたはKerbernetesクラスタのために認証の役割を果たすために、このアイデンティティ解決を広げることができます.OIDCはOAuth 2.0上で追加レイヤを持つOAuth 2.0仕様に基づく認証プロトコルです.この層はログインしているアイデンティティに関するログインとプロフィール情報を加えます.ODTAのようなOIDCをサポートするIDPは、ユーザのアカウントを作成し、有効にし、無効にするユーザーライフサイクル管理を拡張することができます.
SSOはあなたのKubernetesクラスタにマッピングされたアイデンティティ管理をマッピングするための基礎を形成します.これは重要です.あなたの会社の演算子、管理者、開発者、およびテスターは、それぞれ異なるクラスタレベルのセルフサービスへのアクセスを必要とします.SSOで、あなたはKubernetesでRBAC定義にマップする役割を指定したチームメンバーのために真実の単一の源を維持することができます.たとえば、OIDCトークンには、Kubernetes RBAC APIを使用して、クラスタリソースへのアクセスを許可または拒否するアクセストークンロールが含まれます.そのように、どんな検証されたクラスタ・ユーザも、予め定義された許可を有するどんな必要な動作も独立して遂行することができます.

LOFTを用いたKubernetesに対するOKTA SSOの実装


さあ、チュートリアルから始めましょう.始める前に、確認してください.
  • AWS account .
  • LOFTインスタンスの登録ドメイン.

  • Terraform (オプション)
  • あなたのKubernetesクラスタを準備してください


    あなたが期待するように、あなたが会う必要がある最初の要件は、リモートKubernetesクラスタを持つことです.このデモではTerraform を使用してAmazon Eksクラスタを作成するにはthis project . AWSアカウント内のすべての必要なインフラストラクチャを作成するために必要なモジュールが含まれます.リポジトリREADME.md インフラストラクチャの作成を実行する手順を詳しく説明します.
    また、AWSコンソールを使用してAmazon Eks Kubernetesクラスタを手動で提供することもできます.しかし、このアプローチは時間がかかり、クラスタの基礎となるインフラストラクチャでのミスコンフィギュレーションにより傾向があります.
    クラスタがプロビジョニングされた場合、ローカルのKube設定を更新できます.kube/config ) 新しく作成したクラスタをポイントし、次のコマンドを使用して接続を確認します.
    aws eks --region <cluster-region> update-kubeconfig --name <cluster-name>
    kubectl config current-context
    

    ロフトCLIをインストール


    GithubからLoft CLIバイナリをインストールするには、マシンのオペレーティングシステムに応じて以下のコマンドを実行します.

    マックターミナル


    curl -s -L "https://github.com/loft-sh/loft/releases/latest" | sed -nE 's!.*"([^"]*loft-darwin-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o loft && chmod +x loft;
    sudo mv loft /usr/local/bin;
    

    リナックスバッシュ


    curl -s -L "https://github.com/loft-sh/loft/releases/latest" | sed -nE 's!.*"([^"]*loft-linux-amd64)".*!https://github.com\1!p' | xargs -n 1 curl -L -o loft && chmod +x loft;
    sudo mv loft /usr/local/bin;
    

    Windows PowerShell


    md -Force "$Env:APPDATA\loft"; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]'Tls,Tls11,Tls12';
    Invoke-WebRequest -UseBasicParsing ((Invoke-WebRequest -URI "https://github.com/loft-sh/loft/releases/latest" -UseBasicParsing).Content -replace "(?ms).*`"([^`"]*loft-windows-amd64.exe)`".*","https://github.com/`$1") -o $Env:APPDATA\loft\loft.exe;
    $env:Path += ";" + $Env:APPDATA + "\loft";
    [Environment]::SetEnvironmentVariable("Path", $env:Path, [System.EnvironmentVariableTarget]::User);
    
    バイナリは、githubリリースページからダウンロードすることもできますhere .

    アカウント作成


    次に、すでにOTAアカウントを持っていない場合は、1つを作成する必要があります.The free trial アカウントは十分ですちょうど登録を完了するために会社のメールアドレスを持っていることを確認します.

    KubernetesクラスタへのLoftの配備


    LOFT CLIをインストールしてOKTAアカウントを作成した後、以下のコマンドを実行してKubernetesクラスタにLOFTをインストールすることができます.
    loft start
    
    あなたはLOFTアカウントの管理者を作成するために使用されるメールアドレスを追加するよう求められます.その後、クラスタにロフトを展開します.

    展開が完了すると、あなたのLoftアカウントにアクセスするために、端末のログイン資格情報が表示されます.


    ドメインの設定


    ロフトを実行したので、OSTAで動作するようにSSOに登録されたドメインでインスタンスを設定する必要があります.チュートリアルの冒頭で述べたように、ロフトインスタンスと関連付けることができるドメイン名を持つ必要があります.
    最初のステップはnginx ingressコントローラをインストールすることです.
    helm upgrade --install ingress-nginx ingress-nginx --repository-config='' \
      -n ingress-nginx --create-namespace \
      --repo https://kubernetes.github.io/ingress-nginx \
      --set-string controller.config.hsts=false \
      --wait
    
    NGinxのイングルのコントローラが正常にロールバックしたら、再実行することができますloft start コマンドを--host ドメイン名を指定するフラグ.
    あなたのインスタンスがドメイン名で働くために、あなたの登録されたドメインが簡単なルーティング構成でAレコードを持っているのを保証する必要があります、そして、トラフィックルーティングはInteressコントローラによって作成されたロードバランサに転送されるように設定されます.これを行うにはloft start ドメイン名のコマンドを--host フラグ:
    loft start --host=yourdomainname.com
    
    この段階では、ロフトCLIはあなたがリモートクラスタを使用しているかどうか、そして、Ingressコントローラがインストールされているかどうかを質問します.確認後、あなたのloftのインスタンスが再構成されます.

    シングルサインオン


    ドメインがLOFTインスタンスに設定されたら、SSOを設定できます.

    アプリケーション統合の作成


    OKTAのアカウントにログインし、サイドメニューのアプリケーションのセクションに移動し、アプリケーションの統合ボタンをクリックします.アプリケーション内のSign Inメソッドと「Webアプリケーション」の「OpenID Connect(OIDC)」オプションを選択します.

    統合を構成するには、Redirect URI内の記号の中にある正しいドメイン名を指定してください.

    その後、アプリケーションのクライアントIDとクライアントの秘密を生成します.

    Oft設定を更新する


    あなたのロフト管理者アカウントでAdmin > Config 設定を更新するには、次の手順に従います.
    auth:
      oidc:
        issuerUrl: 'https://${MY-OKTA-SUBDOMAIN}.okta.com'
        clientId: CLIENT_ID
        clientSecret: CLIENT_SECRET
        groupsClaim: groups
        # This is needed because okta uses thin id tokens
        # that do not contain the groups directly
        getUserInfo: true
    
    必要に応じて、以下の行を追加することでLOFTで管理されるデフォルトのパスワードベースの認証システムを無効にすることができます.
    auth:
      oidc: ...
      password:
        disabled: true      # Disable password-based authentication
    
    このアプローチは、ロフトにアクセスしているすべての彼らの人員のためにSSOモデルを実施したい組織に役立ちます.さらに、エンドユーザーはOKTAの資格情報の1つのセットを管理することによってより良い経験を持つことができます.

    ユーザを割り当てる


    上記の変更を適用した後、ユーザーまたはユーザーをOKTAでアプリケーションに割り当てることができます.これを行うには、前にしたように、あなたのOKAのアカウントの管理コンソールに署名されていることを確認します.次に、追加されたLoftアプリケーションに進み、課題タブに移動します.あなたはどちらかのユーザーが自分の能力を自分のOKTAのアカウントとロフトに署名する許可を与えるアプリケーションにグループを割り当てるオプションが表示されます.
    ここでは、ロフトランディングページは、デフォルトのパスワードベースの認証と一緒にSSOに設定されたOKTAと似ているでしょう.

    パスワードベースの認証を無効にすると、ページ内のサインは次のようになります.

    最後に、エンドユーザーがサインされたら、LOFTのスペース管理画面が表示されます.

    結論


    このポストでは、アイデンティティ管理のためのセキュリティモデルとしてSSOについて学び、どのようにKubernetesに拡張することができます.さらに、この記事はOKTAとLOFTであなたのKubernetesクラスタのためにSSOを準備する方法を詳述しました.Loft Kubernetesで働くとき、ソフトウェアチームを強化して、開発者経験を強化するようになっているプラットホームです.必ずそれをチェックアウトしてください!
    写真でAlp Duran on Unsplash