このページは機械翻訳によるものです。内容の正確さは保証しておりません。 人力翻訳を依頼する

Use ack-ram-authenticator for API server webhook authentication in an ACK managed cluster

更新日時2025-04-25 17:43

ack-ram-authenticator は、Webhook と Resource Access Management (RAM) を使用して、Container Service for Kubernetes (ACK) マネージドクラスターの API サーバーに送信されたリクエストを認証するのに役立つコンポーネントです。シングルサインオン (SSO) のシナリオでは、ack-ram-authenticator は、同じロールを担うユーザーが API サーバーに送信したリクエストを API サーバーが認証するのに役立ちます。このトピックでは、ack-ram-authenticator が API サーバーの Webhook 認証を完了するのにどのように役立つかについて説明します。また、Webhook 認証を構成する方法についても説明します。

前提条件

ACK マネージドクラスターが作成されており、クラスターのバージョンが 1.24.6-aliyun.1 以降であること。詳細については、「ACK マネージドクラスターを作成する」をご参照ください。

使用上の注意

  • ack-ram-authenticator コンポーネントをインストールまたはアンインストールすると、クラスター内の API サーバーが再起動し、API サーバーへのすべての持続的接続が閉じられます。 ack-ram-authenticator コンポーネントは、オフピーク時にインストールまたはアンインストールすることをお勧めします。

  • Webhook 認証を有効にした後も、DescribeClusterUserKubeconfig API 操作によって返された kubeconfig ファイルを使用して、通常どおり API サーバーにアクセスできます。

  • ack-ram-authenticator コンポーネントは、Serverless Kubernetes クラスター でサポートされています。

ack-ram-authenticator のしくみ

ack-ram-authenticator は、ACK マネージドクラスター用の認証コンポーネントです。このコンポーネントは、Kubernetes ネイティブの Webhook トークン認証 と RAM を使用して、ACK マネージドクラスターの API サーバーに送信されたリクエストを認証するのに役立ちます。このコンポーネントを使用すると、カスタムリソース定義 (CRD) を使用して、RAM ID とロールベースアクセス制御 (RBAC) 権限間のマッピングを定義できます。これにより、さまざまな RAM ID の RBAC 権限をより柔軟に検証できます。

ユーザーが Alibaba Cloud シングルサインオン (SSO) ロールを担って ACK マネージドクラスターの API サーバーにアクセスする場合、ack-ram-authenticator はユーザー ID に対応するセッションの名前を API サーバーに渡します。これにより、API サーバーは、同じロールを担うユーザーによって API サーバーに送信されたリクエストを認証できます。

次の図は、ack-ram-authenticator をインストールした ACK マネージドクラスターにおける Webhook 認証のしくみを示しています。

123..png

  1. kubectl などのツールを使用して ACK マネージドクラスターの API サーバーに対して認証を行う場合、kubectl クライアントは kubeconfig ファイルで exec コマンドを実行し、ack-ram-tool を呼び出して署名付きセキュリティトークンサービス (STS) トークン URL を生成します。

  2. kubectl クライアントが認証 Webhook を API サーバーに送信すると、API サーバーは Webhook を ack-ram-authenticator にルーティングします。

  3. 次に、ack-ram-authenticator は RAM の GetCallerIdentity 操作を呼び出し、受信したトークン URL に基づいて呼び出し元の ID 情報を取得します。 GetCallerIdentity 操作が呼び出し元の ID 情報を返すと、ack-ram-authenticator は呼び出し元の RAM ID を RAMIdentityMapping 構成で定義された ID マッピングと照合します。

  4. API サーバーは、一致するマッピング内の RAM ユーザーまたはユーザーグループの RBAC 権限を確認し、認証結果を kubectl クライアントに返します。

ack-ram-authenticator のメリット

ACK クラスターによって提供されるデフォルトの x509 証明書認証モードと比較して、ack-ram-authenticator を使用して Webhook 認証を実行することには、次の利点があります。

  • CloudSSO を使用する企業に適しており、ロールベースアクセス制御 (RBAC) 権限付与を実装するための柔軟で制御可能な方法を提供します。

  • ユーザーが SSO ロールを使用して API サーバーにアクセスするシナリオでは、API サーバーの監査ログには、企業 ID プロバイダー (IdP) によって提供される ID 情報が含まれます。これにより、API サーバーは、同じロールを担うユーザーによって送信されたリクエストを認証できます。

  • パーティション分割された従業員に関連付けられている RAM ユーザーまたは RAM ロールを削除すると、ack-ram-authenticator は関連付けられているクラスター RBAC 権限を自動的に取り消します。

ステップ 1: ack-ram-authenticator コンポーネントをインストールする

Webhook 認証を有効にするには、API サーバーと対話するために ack-ram-authenticator コンポーネントをインストールする必要があります。次の手順を実行して、ack-ram-authenticator コンポーネントをインストールできます。

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターを見つけて名前をクリックします。左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

  3. [アドオン] ページで、[セキュリティ] タブをクリックし、[ack-ram-authenticator] コンポーネントを見つけて、カードの右下にある [インストール] をクリックします。

  4. [ Ack-ram-authenticator をインストール] ダイアログボックスで、EnableNonBootstrapMapping を選択し、[OK] をクリックします。

ステップ 2: ack-ram-tool クライアントをインストールする

ack-ram-tool クライアントを使用すると、オンプレミス環境で kubeconfig ファイルを自動的に生成できます。 kubeconfig ファイルには、クラスターへのアクセスに使用される認証情報が含まれています。

  1. 使用しているオペレーティングシステムに基づいて、ack-ram-tool クライアントバージョンをダウンロードします

  2. 次のコマンドを実行して、クライアントプログラムを実行可能にします。

    chmod +x ./ack-ram-tool
  3. 次のコマンドを実行して、ack-ram-tool ファイルを PATH パラメーターで指定されたディレクトリにコピーします。

     mkdir -p $HOME/bin && cp ./ack-ram-tool $HOME/bin/ack-ram-tool && export PATH=$HOME/bin:$PATH
  4. 次のコマンドを実行して、$HOME/bin の PATH 設定を永続化します。

    echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile
    
  5. 次のコマンドを実行して、インストールしたクライアントバージョンが返されるかどうかを確認します。返された場合、ack-ram-tool クライアントは正常にインストールされています。

    ack-ram-tool version

ステップ 3: Alibaba Cloud 認証情報を構成する

RAM ユーザーと CloudSSO ユーザーは、次の方法を使用して、クラウドリソースへのアクセスに使用される認証情報を取得できます。

説明

認証情報関連の環境変数が存在する場合、ack-ram-tool はそれらの変数で構成された認証情報を優先的に使用します。 ack-ram-tool コマンドを実行するときに --ignore-env-credentials オプションを追加することで、これらの変数を無視できます。 ack-ram-tool でサポートされている認証情報関連の環境変数の詳細については、 認証情報 を参照してください。

RAM ユーザー
CloudSSO ユーザー

ack-ram-tool クライアントは、ローカル認証情報を使用して RAM にアクセスし、認証を完了します。

クラウドリソースへのアクセスに使用される認証情報を構成する方法の詳細については、「Alibaba Cloud CLI」をご参照ください。

CloudSSO ユーザーは、CloudSSO によって提供される acs-sso CLI を使用して CloudSSO にアクセスし、クラウドリソースへのアクセスに使用される認証情報を取得できます。 acs-sso の詳細については、「Alibaba Cloud CLI を使用して CloudSSO と Alibaba Cloud リソースにアクセスする」をご参照ください。 Alibaba Cloud CLI は、外部 モードをサポートしています。このモードを使用して、外部プログラムを介して認証情報を動的に取得できます。次のコマンドを実行して、オンプレミス環境から CloudSSO にアクセスし、認証情報の取得を自動化します。

aliyun configure --mode External --profile sso

Configuring profile 'sso' in 'External' authenticate mode...
Process Command [acs-sso login --profile sso]:
Default Region Id [cn-shanghai]:
Default Output Format [json]: json (Only support json)
Default Language [zh|en] en:
Saving profile[sso] ...Done.


Configure Done!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Welcome to use Alibaba Cloud.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... Command Line Interface(Reloaded) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............

ステップ 4: kubeconfig ファイルを生成する

  1. 次のコマンドを実行して、kubeconfig ファイルを生成します。詳細については、 get-kubeconfig を参照してください。

    ack-ram-tool credential-plugin get-kubeconfig --cluster-id $cluster_id --mode ram-authenticator-token
  2. 返された kubeconfig ファイルを、オンプレミス環境または指定された環境で変更します。詳細については、「Kubernetes ドキュメント」をご参照ください。

ステップ 5: RAM ID を RBAC 権限にマッピングする

重要

コンポーネントのインストール中に EnableNonBootstrapMapping パラメーターが選択されていることを確認してください。そうでない場合、構成されたマッピングは有効になりません。

ack-ram-authenticator コンポーネントがインストールされると、RAMIdentityMapping という名前のカスタムリソース定義 (CRD) がデフォルトでクラスターに作成されます。 CRD は、RAM ID を Kubernetes RBAC 権限にマッピングするために使用されます。クラスターの権限管理者は、次の手順を実行して、RAM ユーザーまたは RAM ロールを Kubernetes RBAC 権限にマッピングできます。

  1. auth.yaml という名前のファイルを作成し、次の内容をファイルに追加します。

    cat >auth.yaml <<EOF
    ---
    apiVersion: ramauthenticator.k8s.alibabacloud/v1alpha1
    kind: RAMIdentityMapping
    metadata:
      name: tester
    spec:
      arn: '<ARN>'
      username: tester
      groups:
        - system:users    
    EOF
    • RAMIdentityMapping CRD の spec セクションでは、RAM Amazon リソースネーム (ARN) を usernamegroups の 1 つのペアのみにマッピングできます。 ARN を複数の ID にマッピングするには、同じ数の RAMIdentityMapping CRD を作成する必要があります。

      アカウントタイプ

      ARN 形式

      アカウントタイプ

      ARN 形式

      Alibaba Cloud アカウント

      acs:ram::<root_uid>:root。ここで、<root_uid> は Alibaba Cloud アカウントの ID です。

      acs:ram::123456789012****:root

      RAM ユーザー

      acs:ram::<root_uid>:user/<user_name>。ここで、<root_uid> は Alibaba Cloud アカウントの ID で、<user_name> は使用する RAM ユーザーの名前です。

      acs:ram::123456789012****:user/testuser

      RAM ロール

      acs:ram::<root_uid>:role/<role_name>。ここで、<root_uid> は Alibaba Cloud アカウントの ID で、<role_name> は使用する RAM ロールの名前です。 RAM ロールの ARN を表示する方法の詳細については、「RAM ロールの情報を表示する」をご参照ください。

      acs:ram::123456789012****:role/testrole

  2. 次のコマンドを実行して、RAMIdentityMapping CRD を作成します。

    kubectl apply -f auth.yaml
  3. カスタム RBAC ロールを作成し、必要なクラスター権限をロールに付与します。

    次のコードブロックは例を示しています。

    cat >binding.yaml <<EOF
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: tester-clusterrolebinding
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cs:ops
    subjects:
    - apiGroup: rbac.authorization.k8s.io
      kind: User
      name: tester
    - apiGroup: rbac.authorization.k8s.io
      kind: User
      name: tester2
    EOF
    
    kubectl apply -f binding.yaml

ステップ 6: kubeconfig ファイルを使用してリクエストを送信する

ステップ 4 で生成された kubeconfig ファイルを使用して、API サーバーにリクエストを送信します。次に、権限の問題なくリクエストが処理されるかどうかを確認します。

kubectl get ns

予期される出力:

NAME              STATUS   AGE
arms-prom         Active   4h48m
default           Active   4h50m
kube-node-lease   Active   4h50m
kube-public       Active   4h50m
kube-system       Active   4h50m

  • 目次 (1, M)
  • 前提条件
  • 使用上の注意
  • ack-ram-authenticator のしくみ
  • ack-ram-authenticator のメリット
  • ステップ 1: ack-ram-authenticator コンポーネントをインストールする
  • ステップ 2: ack-ram-tool クライアントをインストールする
  • ステップ 3: Alibaba Cloud 認証情報を構成する
  • ステップ 4: kubeconfig ファイルを生成する
  • ステップ 5: RAM ID を RBAC 権限にマッピングする
  • ステップ 6: kubeconfig ファイルを使用してリクエストを送信する
フィードバック