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

Container Service for Kubernetes:ACK マネージドクラスターにおける ack-ram-authenticator を使用した API サーバーの Webhook 認証の有効化

最終更新日:Jun 24, 2026

ack-ram-authenticator を使用して、ACK マネージドクラスターの API サーバーリクエストに対し、RAM によるセキュアな Webhook 認証を実行します。RAM ID を RBAC にマッピングし、監査ログで同じロールを引き受ける SSO ユーザーを区別します。本トピックでは、Webhook 認証の方法と使用ワークフローについて説明します。

前提条件

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

注意事項

  • ack-ram-authenticator のインストールまたはアンインストールを行うと、API サーバーが再起動し、長時間接続が切断されます。この操作はピーク時間外に計画してください。

  • Webhook 認証は、DescribeClusterUserKubeconfig から取得した kubeconfig を使用した API サーバーへのアクセスをブロックしません。

  • ack-ram-authenticatorACK サーバーレスクラスターでもサポートされています。

どのように ack-ram-authenticator は動作するか

ack-ram-authenticator は、ACK マネージドクラスター用の認証アドオンです。Kubernetes の Webhook トークン認証を使用して Alibaba Cloud RAM で API サーバーリクエストを認証し、RAM ID を CRD として RBAC 権限にマッピングします。

ユーザーが Alibaba Cloud SSO ロールを引き受けて ACK マネージドクラスターの API サーバーにアクセスすると、ack-ram-authenticator はその ID のセッション名を API サーバーに渡します。これにより、API サーバーは、同じロールを引き受ける異なるユーザーからのリクエストを認証できます。

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

123..png

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

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

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

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

メリット

ACK のデフォルトの X.509 証明書認証と比較して、ack-ram-authenticator を使用した Webhook 認証には次のメリットがあります。

  • 柔軟で管理しやすいデータプレーンの RBAC 認可によるエンタープライズ SSO 統合。

  • SSO シナリオでは、API サーバーの監査ログにエンタープライズ ID プロバイダー (IdP) のアイデンティティ情報が含まれるため、同じロールを引き受ける異なる IdP ユーザーからのアクションを監査できます。

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

ステップ1:ack-ram-authenticator のインストール

サーバー側の ack-ram-authenticator アドオンをインストールして、クラスターの API サーバーで RAM による Webhook 認証を有効にします。

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

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

  3. アドオン管理 ページで セキュリティ タブをクリックし、ack-ram-authenticator アドオンを見つけ、カードの右下隅にある インストール をクリックします。表示された パラメーター ダイアログボックスで、EnableNonBootstrapMapping オプションを選択し、OK をクリックします。

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

ローカルマシンで、ack-ram-tool はクラスターの認証情報を含む kubeconfig ファイルを生成します。

  1. お使いの OS とアーキテクチャに対応する 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. (オプション) Bash の場合、~/.bash_profilePATH 設定を永続化します。

    echo 'export PATH=$HOME/bin:$PATH' >> ~/.bash_profile
    
  5. インストールを検証します。コマンドはクライアントのバージョンを返します。

    ack-ram-tool version

ステップ3:Alibaba Cloud 認証情報の設定

RAM ユーザーと SSO ユーザーは、次のいずれかの方法で Alibaba Cloud 認証情報を設定できます。

説明

認証情報関連の環境変数が設定されている場合、ack-ram-tool はデフォルトでそれらを使用します。 上書きするには、--ignore-env-credentialsack-ram-tool コマンドに追加します。 ack-ram-tool でサポートされている環境変数: 認証情報

RAM ユーザー

ack-ram-tool は、ローカルに設定された Alibaba Cloud 認証情報を使用して RAM に対する認証を行います。

アクセス認証情報の設定については、「Alibaba Cloud CLI」をご参照ください。

SSO ユーザー

SSO ユーザーは、CloudSSO の CLI ツールである acs-sso を使用してログインし、認証情報を取得します。acs-sso の詳細については、「CLI を使用した CloudSSO へのログインと Alibaba Cloud リソースへのアクセス」をご参照ください。Alibaba Cloud CLI の external モードは、外部コマンドを実行して認証情報を取得します。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 にマージまたは置換します。詳細については、「kubeconfig ファイルを使用したクラスターアクセスの整理」をご参照ください。

ステップ5:RAM ID の RBAC 権限へのマッピング

説明

インストール時に EnableNonBootstrapMapping オプションを選択してください。そうしない場合、以下のマッピングは有効になりません。

ack-ram-authenticator をインストールすると、クラスターは RAM ID を Kubernetes のユーザーモデルにマッピングする RAMIdentityMapping CRD を作成します。クラスター管理者として、RAM ユーザーまたは RAM ロールを RBAC 権限を持つ Kubernetes ユーザーにマッピングします。

  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 インスタンスは、1 つの RAM ARN を 1 つの usernamegroups にマッピングします。マッピングごとに 1 つのインスタンスを作成してください。

    • <ARN> を対象の RAM ユーザーまたは RAM ロールの ARN に置き換えます。次の表に、アカウントタイプごとの ARN 形式を示します。

      アカウントタイプ

      ARN 形式

      Alibaba Cloud アカウント

      acs:ram::<root_uid>:root

      <root_uid>Alibaba Cloud Account 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 Account 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 ファイルを使用して 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

関連ドキュメント