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


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

10.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.<rhel_version>" \1
      -a ~/.pull-secret
    1
    <rhel_version> には、ホストが使用する Red Hat Enterprise Linux (RHEL) のバージョンに対応する値を指定します。値が指定されていない場合は、デフォルトで ccoctl.rhel8 が使用されます。次の値が有効です。
    • rhel8: RHEL 8 を使用するホストの場合はこの値を指定します。
    • rhel9: RHEL 9 を使用するホストの場合はこの値を指定します。
  4. 次のコマンドを実行して、権限を変更して ccoctl を実行可能にします。

    $ chmod 775 ccoctl.<rhel_version>

検証

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

    $ ./ccoctl.rhel9

    出力例

    OpenShift credentials provisioning tool
    
    Usage:
      ccoctl [command]
    
    Available Commands:
      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-title}
      nutanix      Manage credentials objects for Nutanix
    
    Flags:
      -h, --help   help for ccoctl
    
    Use "ccoctl [command] --help" for more information about a command.

10.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

10.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.