12.2. トークンベースの認証の有効化


Microsoft Azure OpenShift Container Platform クラスターをインストールした後、Microsoft Entra Workload ID を有効にして短期認証情報を使用できます。

12.2.1. Cloud Credential Operator ユーティリティーの設定

Cloud Credential Operator (CCO) が手動モードで動作しているときにクラスターの外部からクラウドクレデンシャルを作成および管理するには、CCO ユーティリティー (ccoctl) バイナリーを抽出して準備します。

注記

ccoctl ユーティリティーは、Linux 環境で実行する必要がある Linux バイナリーです。

前提条件

  • クラスター管理者のアクセスを持つ OpenShift Container Platform アカウントを使用できる。
  • OpenShift CLI (oc) がインストールされている。

手順

  1. 次のコマンドを実行して、OpenShift Container Platform リリースイメージの変数を設定します。

    $ RELEASE_IMAGE=$(./openshift-install version | awk '/release image/ {print $3}')
  2. 以下のコマンドを実行して、OpenShift Container Platform リリースイメージから CCO コンテナーイメージを取得します。

    $ CCO_IMAGE=$(oc adm release info --image-for='cloud-credential-operator' $RELEASE_IMAGE -a ~/.pull-secret)
    注記

    $RELEASE_IMAGE のアーキテクチャーが、ccoctlツールを使用する環境のアーキテクチャーと一致していることを確認してください。

  3. 以下のコマンドを実行して、OpenShift Container Platform リリースイメージ内の CCO コンテナーイメージから ccoctl バイナリーを抽出します。

    $ oc image extract $CCO_IMAGE --file="/usr/bin/ccoctl" -a ~/.pull-secret
  4. 次のコマンドを実行して、権限を変更して ccoctl を実行可能にします。

    $ chmod 775 ccoctl

検証

  • ccoctl が使用できることを確認するには、help ファイルを表示します。コマンドを実行するときは、相対ファイル名を使用します。以下に例を示します。

    $ ./ccoctl.rhel9

    出力例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      alibabacloud Manage credentials objects for alibaba cloud
      aws          Manage credentials objects for AWS cloud
      azure        Manage credentials objects for Azure
      gcp          Manage credentials objects for Google cloud
      help         Help about any command
      ibmcloud     Manage credentials objects for IBM Cloud
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

12.2.2. 既存のクラスターで Microsoft Entra Workload ID を有効にする

インストール中に Microsoft Azure OpenShift Container Platform クラスターを Microsoft Entra Workload ID を使用するように設定しなかった場合は、既存のクラスターでこの認証方法を有効にすることができます。

重要

既存のクラスターで Workload ID を有効にするプロセスは、サービスの停止を伴い、かなりの時間がかかります。続行する前に、次の考慮事項を確認してください。

  • 次の手順を読み、必ず時間の要件を理解してご承知おきください。正確な所要時間は個々のクラスターによって異なりますが、少なくとも 1 時間かかる可能性があります。
  • このプロセス中に、すべてのサービスアカウントを更新し、クラスター上のすべての Pod を再起動する必要があります。これらのアクションはワークロードの停止を伴います。この影響を軽減するには、これらのサービスを一時的に停止し、クラスターの準備ができたときに再デプロイすることができます。
  • このプロセスを開始した後は、完了するまでクラスターの更新を試みないでください。更新がトリガーされると、既存のクラスターで Workload ID を有効にするプロセスが失敗します。

前提条件

  • Microsoft Azure に OpenShift Container Platform クラスターをインストールした。
  • cluster-admin 権限を持つアカウントを使用してクラスターにアクセスできる。
  • OpenShift CLI (oc) がインストールされている。
  • Cloud Credential Operator ユーティリティー (ccoctl) バイナリーを展開して準備した。
  • Azure CLI (az) を使用して Azure アカウントにアクセスできる。

手順

  1. ccoctl ユーティリティーが生成するマニフェストの出力ディレクトリーを作成します。この手順では、./output_dir を例として使用します。
  2. 次のコマンドを実行して、クラスターのサービスアカウントの公開署名鍵を出力ディレクトリーに抽出します。

    $ oc get configmap \
      --namespace openshift-kube-apiserver bound-sa-token-signing-certs \
      --output 'go-template={{index .data "service-account-001.pub"}}' > ./output_dir/serviceaccount-signer.public 1
    1
    この手順では、例として serviceaccount-signer.public という名前のファイルを使用します。
  3. 抽出したサービスアカウント公開署名鍵を使用して、次のコマンドを実行し、OpenID Connect (OIDC) 発行者と、OIDC 設定ファイルを含む Azure Blob ストレージコンテナーを作成します。

    $ ./ccoctl azure create-oidc-issuer \
      --name <azure_infra_name> \1
      --output-dir ./output_dir \
      --region <azure_region> \2
      --subscription-id <azure_subscription_id> \3
      --tenant-id <azure_tenant_id> \
      --public-key-file ./output_dir/serviceaccount-signer.public 4
    1
    name パラメーターの値は、Azure リソースグループを作成するために使用します。新しい Azure リソースグループを作成する代わりに既存の Azure リソースグループを使用するには、--oidc-resource-group-name を指定し、その値として既存のグループ名を使用します。
    2
    既存のクラスターのリージョンを指定します。
    3
    既存のクラスターのサブスクリプション ID を指定します。
    4
    クラスターのサービスアカウントの公開署名鍵を含むファイルを指定します。
  4. 次のコマンドを実行して、Azure pod identity webhook の設定ファイルが作成されたことを確認します。

    $ ll ./output_dir/manifests

    出力例

    total 8
    -rw-------. 1 cloud-user cloud-user 193 May 22 02:29 azure-ad-pod-identity-webhook-config.yaml 1
    -rw-------. 1 cloud-user cloud-user 165 May 22 02:29 cluster-authentication-02-config.yaml

    1
    ファイル azure-ad-pod-identity-webhook-config.yaml には、Azure pod identity webhook 設定が含まれています。
  5. 次のコマンドを実行して、出力ディレクトリーに生成されたマニフェストの OIDC 発行者 URL を使用して OIDC_ISSUER_URL 変数を設定します。

    $ OIDC_ISSUER_URL=`awk '/serviceAccountIssuer/ { print $2 }' ./output_dir/manifests/cluster-authentication-02-config.yaml`
  6. 次のコマンドを実行して、クラスターの authentication 設定の spec.serviceAccountIssuer パラメーターを更新します。

    $ oc patch authentication cluster \
      --type=merge \
      -p "{\"spec\":{\"serviceAccountIssuer\":\"${OIDC_ISSUER_URL}\"}}"
  7. 次のコマンドを実行して、設定の更新の進行状況を監視します。

    $ oc adm wait-for-stable-cluster

    このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。

    All clusteroperators are stable
  8. 次のコマンドを実行して、クラスター内のすべての Pod を再起動します。

    $ oc adm reboot-machine-config-pool mcp/worker mcp/master

    Pod を再起動すると、serviceAccountIssuer フィールドが更新され、サービスアカウントの公開署名鍵が更新されます。

  9. 次のコマンドを実行して、再起動と更新のプロセスを監視します。

    $ oc adm wait-for-node-reboot nodes --all

    このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。

    All nodes rebooted
  10. 次のコマンドを実行して、Cloud Credential Operator の spec.credentialsMode パラメーターを Manual に更新します。

    $ oc patch cloudcredential cluster \
      --type=merge \
      --patch '{"spec":{"credentialsMode":"Manual"}}'
  11. 以下のコマンドを実行して、OpenShift Container Platform リリースイメージから CredentialsRequest オブジェクトのリストを抽出します。

    $ oc adm release extract \
      --credentials-requests \
      --included \
      --to <path_to_directory_for_credentials_requests> \
      --registry-config ~/.pull-secret
    注記

    このコマンドの実行には少し時間がかかる場合があります。

  12. 次のコマンドを実行して、Azure リソースグループ名を使用して AZURE_INSTALL_RG 変数を設定します。

    $ AZURE_INSTALL_RG=`oc get infrastructure cluster -o jsonpath --template '{ .status.platformStatus.azure.resourceGroupName }'`
  13. 次のコマンドを実行して、ccoctl ユーティリティーを使用してすべての CredentialsRequest オブジェクトのマネージド ID を作成します。

    $ ccoctl azure create-managed-identities \
      --name <azure_infra_name> \
      --output-dir ./output_dir \
      --region <azure_region> \
      --subscription-id <azure_subscription_id> \
      --credentials-requests-dir <path_to_directory_for_credentials_requests> \
      --issuer-url "${OIDC_ISSUER_URL}" \
      --dnszone-resource-group-name <azure_dns_zone_resourcegroup_name> \1
      --installation-resource-group-name "${AZURE_INSTALL_RG}"
    1
    DNS ゾーンを含むリソースグループの名前を指定します。
  14. 次のコマンドを実行して、Workload ID の Azure pod identity webhook 設定を適用します。

    $ oc apply -f ./output_dir/manifests/azure-ad-pod-identity-webhook-config.yaml
  15. 次のコマンドを実行して、ccoctl ユーティリティーによって生成されたシークレットを適用します。

    $ find ./output_dir/manifests -iname "openshift*yaml" -print0 | xargs -I {} -0 -t oc replace -f {}

    このプロセスには数分の時間がかかる可能性があります。

  16. 次のコマンドを実行して、クラスター内のすべての Pod を再起動します。

    $ oc adm reboot-machine-config-pool mcp/worker mcp/master

    Pod を再起動すると、serviceAccountIssuer フィールドが更新され、サービスアカウントの公開署名鍵が更新されます。

  17. 次のコマンドを実行して、再起動と更新のプロセスを監視します。

    $ oc adm wait-for-node-reboot nodes --all

    このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。

    All nodes rebooted
  18. 次のコマンドを実行して、設定の更新の進行状況を監視します。

    $ oc adm wait-for-stable-cluster

    このプロセスには 15 分以上かかる場合があります。次の出力は、プロセスが完了したことを示します。

    All clusteroperators are stable
  19. オプション: 次のコマンドを実行して、Azure の root 認証情報シークレットを削除します。

    $ oc delete secret -n kube-system azure-credentials

/validating-an-installation.adoc

12.2.3. クラスターが短期認証情報を使用していることを確認する

クラスター内の Cloud Credential Operator (CCO) 設定やその他の値を確認することで、クラスターが個々のコンポーネントに対して短期的なセキュリティー認証情報を使用していることを確認できます。

前提条件

  • Cloud Credential Operator ユーティリティー (ccoctl) を使用して OpenShift Container Platform クラスターをデプロイし、短期認証情報を実装しました。
  • OpenShift CLI (oc) がインストールされている。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

  • 次のコマンドを実行して、CCO が手動モードで動作するように設定されていることを確認します。

    $ oc get cloudcredentials cluster \
      -o=jsonpath={.spec.credentialsMode}

    次の出力は、CCO が手動モードで動作していることを示しています。

    出力例

    Manual

  • 次のコマンドを実行して、クラスターに root 認証情報がないことを確認します。

    $ oc get secrets \
      -n kube-system <secret_name>

    <secret_name> は、クラウドプロバイダーのルートシークレットの名前です。

    プラットフォームシークレット名

    Amazon Web Services (AWS)

    aws-creds

    Microsoft Azure

    azure-credentials

    Google Cloud Platform (GCP)

    gcp-credentials

    エラーは、ルートシークレットがクラスター上に存在しないことを確認します。

    AWS クラスターの出力例

    Error from server (NotFound): secrets "aws-creds" not found

  • 次のコマンドを実行して、コンポーネントが個々のコンポーネントに対して短期セキュリティー認証情報を使用していることを確認します。

    $ oc get authentication cluster \
      -o jsonpath \
      --template='{ .spec.serviceAccountIssuer }'

    このコマンドは、クラスター Authentication オブジェクトの .spec.serviceAccountIssuer パラメーターの値を表示します。クラウドプロバイダーに関連付けられた URL の出力は、クラスターがクラスターの外部から作成および管理される短期認証情報を使用して手動モードを使用していることを示します。

  • Azure クラスター: 次のコマンドを実行して、コンポーネントがシークレットマニフェストで指定された Azure クライアント ID を想定していることを確認します。

    $ oc get secrets \
      -n openshift-image-registry installer-cloud-credentials \
      -o jsonpath='{.data}'

    出力に azure_client_id フィールドと azure_federated_token_file フィールドが含まれていれば、コンポーネントが Azure クライアント ID を想定しています。

  • Azure クラスター: 次のコマンドを実行して、pod identity webhook が実行されていることを確認します。

    $ oc get pods \
      -n openshift-cloud-credential-operator

    出力例

    NAME                                         READY   STATUS    RESTARTS   AGE
    cloud-credential-operator-59cf744f78-r8pbq   2/2     Running   2          71m
    pod-identity-webhook-548f977b4c-859lz        1/1     Running   1          70m

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.