すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:ACK マネージドクラスターの API Server で Webhook 認証に ack-ram-authenticator を使用する

最終更新日:Jan 31, 2026

ack-ram-authenticator コンポーネントを使用すると、ACK マネージドクラスターが Alibaba Cloud Resource Access Management (RAM) と Webhook を利用して、API Server へのリクエストを安全に認証できます。ロールベースのシングルサインオン (SSO) の場合、このコンポーネントは同じロールを引き受ける異なるユーザーからの API Server リクエストを安全に監査することも支援します。本トピックでは、ACK マネージドクラスターAPI Server で Webhook 認証に ack-ram-authenticator コンポーネントを使用する方法について説明します。

前提条件

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

注意事項

  • ack-ram-authenticator コンポーネントのインストールまたはアンインストールにより、クラスターのコントロールプレーンにある API Server が再起動されます。これにより、API Server への持続的接続が切断されます。オフピーク時間帯にコンポーネントをインストールまたはアンインストールしてください。

  • Webhook 認証を有効化した後でも、DescribeClusterUserKubeconfig API 操作によって返される kubeconfig ファイルは引き続きクラスターの API Server へのアクセスに使用できます。

  • ACK サーバーレスクラスター もサポートされています。

認証方式

ack-ram-authenticator コンポーネントは ACK マネージドクラスター 向けの認証プラグインです。このコンポーネントは Kubernetes のネイティブな Webhook Token Authentication 方式を使用し、RAM を介してクラスターの API Server へのリクエストを認証します。また、RAM ID と RBAC 権限の間のマッピングをカスタムリソース定義 (CRD) として提供することで、RBAC 権限付与をより柔軟に構成できます。

Alibaba Cloud CloudSSO ロールを使用して ACK マネージドクラスター にアクセスする場合、ack-ram-authenticator コンポーネントはリクエスト送信者の ID のセッション名を API Server に渡すことができます。これにより、同じロールを引き受ける異なるユーザーからのクラスター API Server へのアクセスリクエストをより安全に監査できます。

クラスターの Webhook 認証フローは次のとおりです。

123..png

  1. kubectl などのツールを使用して API Server に認証リクエストを送信すると、KubeConfig ファイル内の exec コマンドプラグインが ack-ram-tool クライアントを実行します。クライアントは署名済みのセキュリティトークンサービス (STS) リクエスト URL を生成します。

  2. Webhook 認証リクエストが ACK マネージドクラスターAPI Server に送信されます。このリクエストは Webhook 認証設定に基づいて ack-ram-authenticator コンポーネントにルーティングされます。

  3. コンポーネントは受信したトークン URL を使用して、Alibaba Cloud RAM GetCallerIdentity API に対してリクエストを認証します。認証が成功した場合、ack-ram-authenticator コンポーネントは API から返された RAM ID と、指定された RAMIdentityMapping カスタムリソース (CR) 内でユーザーが構成した ID 間のマッピングを検索します。

  4. API Server はマッピングされたユーザーおよびグループ ID に対してネイティブな RBAC 権限付与を実行し、その結果を返します。

この認証方式の利点

ACK クラスターのデフォルトの X.509 証明書認証方式と比較して、ack-ram-authenticator Webhook 認証方式には以下の利点があります。

  • エンタープライズクラウド SSO シナリオに対応し、データプレーンの RBAC 権限付与を柔軟かつ制御可能にします。

  • ロールベース SSO シナリオにおいて、API Server の監査ログに企業の ID プロバイダー (IDP) からの ID 情報が含まれるため、同じロールを引き受ける異なる IDP ユーザーの動作を効果的に監査できます。

  • 従業員が退職し、その RAM ユーザーまたは RAM ロールが削除されると、クラスター内の RBAC 権限が自動的に取り消されます。

手順 1:ack-ram-authenticator コンポーネントのインストール

RAM Webhook 認証を有効化するには、サーバー側の認証プラグインである ack-ram-authenticator をインストールします。このプラグインはクラスターの API Server と連携して認証を実行します。ack-ram-authenticator コンポーネントをインストールするには、次の手順を実行します。

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

  2. クラスター ページで管理対象のクラスターを見つけ、その名前をクリックします。左側のナビゲーションウィンドウで、アドオン管理 をクリックします。

  3. [コンポーネント管理] ページで、[セキュリティ] タブをクリックし、ack-ram-authenticator コンポーネントを見つけます。[インストール] をカードの右下隅でクリックします。表示される [パラメーター設定] ダイアログボックスで、EnableNonBootstrapMapping 設定項目を選択し、[確認] をクリックします。

手順 2:ack-ram-tool クライアントのインストール

ack-ram-tool クライアントは、ローカルマシン上で特定のクラスター用の 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 認証情報の構成

Alibaba Cloud RAM ユーザーおよび SSO ユーザーは、以下の方法でクラウドリソースのアクセス認証情報を構成および取得できます。

説明

現在の環境にアクセス認証情報に関連する環境変数がある場合、ack-ram-tool はそれらの変数に設定された認証情報を優先します。ack-ram-tool コマンドを実行する際に --ignore-env-credentials パラメーターを追加して、これらの環境変数を無視できます。ack-ram-tool がサポートする認証情報関連の環境変数の詳細については、Credentialsをご参照ください。

RAM ユーザー

ack-ram-tool クライアントは、RAM への ID 認証のためにローカルに構成された Alibaba Cloud キー認証情報に依存します。

アクセス認証情報の構成方法の詳細については、「Alibaba Cloud CLI」をご参照ください。

SSO ユーザー

Alibaba CloudSSO ユーザーの場合、CloudSSO サービスが提供する acs-sso コマンドラインインターフェイス (CLI) ツールを使用してログインし、クラウドリソースのアクセス認証情報を取得できます。acs-sso の詳細については、「CLI を使用した CloudSSO へのログインと Alibaba Cloud リソースへのアクセス」をご参照ください。Alibaba Cloud CLI ツールは外部モードをサポートしており、外部コマンドラインツールを実行することで動的にリソース認証情報を取得できます。次のコマンドを実行して CloudSSO にログインし、ローカルマシン上に認証情報を自動的に構成します。

aliyun configure --mode External --profile sso

「External」 認証モードでプロファイル 「sso」 を設定しています...
コマンドの処理 [acs-sso login --profile sso]:
デフォルトのリージョン ID [cn-shanghai]:
デフォルトの出力形式 [json]: json (json のみをサポート)
デフォルトの言語 [zh|en] en:
プロファイル[sso]の保存...完了。


設定完了!!!
..............888888888888888888888 ........=8888888888888888888D=..............
...........88888888888888888888888 ..........D8888888888888888888888I...........
.........,8888888888888ZI: ...........................=Z88D8888888888D..........
.........+88888888 ..........................................88888888D..........
.........+88888888 .......Alibaba Cloud へようこそ.......O8888888D..........
.........+88888888 ............. ************* ..............O8888888D..........
.........+88888888 .... コマンドラインインターフェイス (リロード済み) ....O8888888D..........
.........+88888888...........................................88888888D..........
..........D888888888888DO+. ..........................?ND888888888888D..........
...........O8888888888888888888888...........D8888888888888888888888=...........
............ .:D8888888888888888888.........78888888888888888888O ..............

手順 4:kubeconfig ファイルの生成

  1. kubeconfig ファイルを生成するには、次のコマンドを実行します。コマンドの詳細については、see 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 ユーザーモデルの間のマッピングを構成するために使用されます。クラスター管理者は、以下の方法でユーザー ID を構成し、特定の RAM ユーザーまたは RAM ロールを Kubernetes RBAC 権限にバインドできます。

  1. 次の YAML コンテンツを使用して、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 インスタンスの spec フィールドでは、1 つの RAM ARN のみを username および groups にマッピングできます。異なる RAM ID をマッピングするには、複数の RAMIdentityMapping インスタンスを作成する必要があります。

    • <ARN> は、指定された RAM ユーザーまたは RAM ロールの ARN に置き換えてください。以下の表は、アカウントタイプ別の 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 インスタンスを作成します。

    kubectl apply -f auth.yaml
  3. 対象クラスターの RBAC 権限を構成します。必要に応じて、カスタム RBAC ロールおよびバインディングを作成します。

    以下は 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
    EOF
    
    kubectl apply -f binding.yaml

手順 6:kubeconfig ファイルを使用したリクエスト送信

手順 4 で生成した kubeconfig ファイルを使用して APIServer にリクエストを送信します。権限の範囲内で API Server に正常にアクセスできることを確認します。

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

参考文献