第19章 クラウドプロバイダーの認証情報の管理
19.1. Cloud Credential Operator について
Cloud Credential Operator (CCO) は、クラウドプロバイダーの認証情報をカスタムリソース定義 (CRD) として管理します。CCO は CredentialsRequest
カスタムリソース (CR) で同期し、OpenShift Container Platform コンポーネントが、クラスターの実行に必要な特定のパーミッションと共にクラウドプロバイダーの認証情報を要求できるようにします。
install-config.yaml
ファイルで credentialsMode
パラメーターに異なる値を設定すると、CCO は複数の異なるモードで動作するように設定できます。モードが指定されていない場合や、credentialsMode
パラメーターが空の文字列 (""
) に設定されている場合、CCO はデフォルトモードで動作します。
19.1.1. モード
install-config.yaml
ファイルに credentialsMode
パラメーターの異なる値を設定することで、CCO を mint、passthrough、または manual モードで動作するように設定できます。これらのオプションにより、CCO がクラウド認証情報を使用してクラスターで CredentialsRequest
CR を処理し、CCO を組織のセキュリティー要件に対応するように設定する方法において透明性と柔軟性が提供されます。すべてのクラウドプロバイダーですべての CCO モードがサポートされている訳ではありません。
- Mint: mint モードでは、CCO は提供される管理レベルのクラウド認証情報を使用して、必要となる特定のパーミッションのみでクラスター内のコンポーネントの新規の認証情報を作成します。
- Passthrough: passthrough モードでは、CCO はクラウド認証情報を要求するコンポーネントに、指定されたクラウド認証情報を渡します。
Manual: manual モードでは、ユーザーは CCO の代わりにクラウド認証情報を管理します。
- AWS Security Token Service による手動: 手動モードでは、AWS クラスターを設定して、Amazon Web Services Security Token Service (AWS STS) を使用できます。この設定では、CCO は異なるコンポーネントに一時的な認証情報を使用します。
- GCP ワークロード ID を使用した手動: 手動モードでは、GCP ワークロード ID を使用するように GCP クラスターを設定できます。この設定では、CCO は異なるコンポーネントに一時的な認証情報を使用します。
クラウドプロバイダー | Mint | passthrough | 手動 |
---|---|---|---|
Alibaba Cloud | X | ||
Amazon Web Services (AWS) | X | X | X |
Microsoft Azure | X [1] | X | |
Google Cloud Platform (GCP) | X | X | X |
IBM Cloud | X | ||
Nutanix | X | ||
Red Hat OpenStack Platform (RHOSP) | X | ||
Red Hat Virtualization (RHV) | X | ||
VMware vSphere | X |
- 手動モードは、Microsoft Azure Stack Hub でサポートされている唯一の CCO 設定です。
19.1.2. Cloud Credential Operator モードの決定
複数のモードでの CCO の使用をサポートするプラットフォームの場合、Web コンソールまたは CLI を使用して、CCO がどのモードを使用するように設定されているかを判断できます。
図19.1 CCO 設定の決定
19.1.2.1. Web コンソールを使用した Cloud Credential Operator モードの判別
Cloud Credential Operator (CCO) がどのモードを使用するように設定されているかは、Web コンソールを使用して判別できます。
複数の CCO モードをサポートするのは、Amazon Web Services (AWS)、グローバル Microsoft Azure、および Google Cloud Platform (GCP) クラスターのみです。
前提条件
- クラスター管理者パーミッションを持つ OpenShift Container Platform アカウントにアクセスできる。
手順
-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform Web コンソールにログインします。 -
Administration
Cluster Settings に移動します。 - Cluster Settings ページで、Configuration タブを選択します。
- Configuration resource で CloudCredential を選択します。
- CloudCredential details ページで、YAML タブを選択します。
YAML ブロックで、
spec.credentialsMode
の値を確認します。次の値が可能ですが、すべてのプラットフォームですべてがサポートされているわけではありません。-
''
: CCO はデフォルトモードで動作しています。この設定では、CCO は、インストール中に提供されたクレデンシャルに応じて、ミントモードまたはパススルーモードで動作します。 -
Mint
: CCO はミントモードで動作しています。 -
Passthrough
: CCO はパススルーモードで動作しています。 -
Manual
: CCO は手動モードで動作します。
重要spec.credentialsMode
が''
、Mint
、またはManual
である AWS または GCP クラスターの特定の設定を特定するには、さらに調査する必要があります。AWS および GCP クラスターは、ルートシークレットが削除されたミントモードの使用をサポートします。
手動モードを使用する AWS または GCP クラスターは、AWS Security Token Service (STS) または GCP Workload Identity を使用して、クラスターの外部からクラウド認証情報を作成および管理するように設定されている場合があります。クラスター
Authentication
オブジェクトを調べることで、クラスターがこの戦略を使用しているかどうかを判断できます。-
デフォルト (
''
) のみを使用する AWS または GCP クラスター: クラスターがミントモードまたはパススルーモードで動作しているかどうかを判断するには、クラスタールートシークレットのアノテーションを調べます。Workloads
Secrets に移動し、クラウドプロバイダーのルートシークレットを探します。 注記Project ドロップダウンが All Projects に設定されていることを確認します。
プラットフォーム シークレット名 AWS
aws-creds
GCP
gcp-credentials
クラスターが使用している CCO モードを表示するには、Annotations で
1 annotation
をクリックし、value フィールドを確認します。以下の値が可能です。-
Mint
: CCO はミントモードで動作しています。 -
Passthrough
: CCO はパススルーモードで動作しています。
クラスターが mint モードを使用している場合、クラスターがルートシークレットなしで動作しているかどうかを判断することもできます。
-
mint モードのみを使用する AWS または GCP クラスター: クラスターがルートシークレットなしで動作しているかどうかを判断するには、Workloads
Secrets に移動し、クラウドプロバイダーのルートシークレットを探します。 注記Project ドロップダウンが All Projects に設定されていることを確認します。
プラットフォーム シークレット名 AWS
aws-creds
GCP
gcp-credentials
- これらの値のいずれかが表示される場合、クラスターはルートシークレットが存在するミントモードまたはパススルーモードを使用しています。
- これらの値が表示されない場合、クラスターはルートシークレットが削除されたミントモードで CCO を使用しています。
手動モードのみを使用する AWS または GCP クラスター: クラスターがクラスターの外部からクラウド認証情報を作成および管理するように設定されているかどうかを判断するには、クラスター
Authentication
オブジェクトの YAML 値を確認する必要があります。-
Administration
Cluster Settings に移動します。 - Cluster Settings ページで、Configuration タブを選択します。
- Configuration resource で Authentication を選択します。
- Authentication details ページで、YAML タブを選択します。
YAML ブロックで、
.spec.serviceAccountIssuer
パラメーターの値を確認します。-
クラウドプロバイダーに関連付けられている URL を含む値は、CCO が AWS STS または GCP Workload Identity で手動モードを使用して、クラスターの外部からクラウド認証情報を作成および管理していることを示します。これらのクラスターは、
ccoctl
ユーティリティーを使用して設定されます。 -
空の値 (
''
) は、クラスターが手動モードで CCO を使用しているが、ccoctl
ユーティリティーを使用して設定されていないことを示します。
-
クラウドプロバイダーに関連付けられている URL を含む値は、CCO が AWS STS または GCP Workload Identity で手動モードを使用して、クラスターの外部からクラウド認証情報を作成および管理していることを示します。これらのクラスターは、
-
Administration
19.1.2.2. CLI を使用した Cloud Credential Operator モードの判別
CLI を使用して、Cloud Credential Operator (CCO) が使用するように設定されているモードを判別できます。
複数の CCO モードをサポートするのは、Amazon Web Services (AWS)、グローバル Microsoft Azure、および Google Cloud Platform (GCP) クラスターのみです。
前提条件
- クラスター管理者パーミッションを持つ OpenShift Container Platform アカウントにアクセスできる。
-
OpenShift CLI (
oc
) がインストールされている。
手順
-
cluster-admin
ロールを持つユーザーとしてクラスターのoc
にログインします。 CCO が使用するように設定されているモードを確認するには、次のコマンドを入力します。
$ oc get cloudcredentials cluster \ -o=jsonpath={.spec.credentialsMode}
すべてのプラットフォームですべてがサポートされているわけではありませんが、次の出力値が可能です。
-
''
: CCO はデフォルトモードで動作しています。この設定では、CCO は、インストール中に提供されたクレデンシャルに応じて、ミントモードまたはパススルーモードで動作します。 -
Mint
: CCO はミントモードで動作しています。 -
Passthrough
: CCO はパススルーモードで動作しています。 -
Manual
: CCO は手動モードで動作します。
重要spec.credentialsMode
が''
、Mint
、またはManual
である AWS または GCP クラスターの特定の設定を特定するには、さらに調査する必要があります。AWS および GCP クラスターは、ルートシークレットが削除されたミントモードの使用をサポートします。
手動モードを使用する AWS または GCP クラスターは、AWS Security Token Service (STS) または GCP Workload Identity を使用して、クラスターの外部からクラウド認証情報を作成および管理するように設定されている場合があります。クラスター
Authentication
オブジェクトを調べることで、クラスターがこの戦略を使用しているかどうかを判断できます。-
デフォルト (
''
) のみを使用する AWS または GCP クラスター: クラスターがミントモードまたはパススルーモードで動作しているかどうかを判断するには、次のコマンドを実行します。$ oc get secret <secret_name> \ -n kube-system \ -o jsonpath \ --template '{ .metadata.annotations }'
<secret_name>
は、AWS の場合はaws-creds
、GCP の場合はgcp-credentials
です。このコマンドは、クラスタールートシークレットオブジェクトの
.metadata.annotations
パラメーターの値を表示します。以下の出力値を使用できます。-
Mint
: CCO はミントモードで動作しています。 -
Passthrough
: CCO はパススルーモードで動作しています。
クラスターが mint モードを使用している場合、クラスターがルートシークレットなしで動作しているかどうかを判断することもできます。
-
mint モードのみを使用する AWS または GCP クラスター: クラスターがルートシークレットなしで動作しているかどうかを判断するには、次のコマンドを実行します。
$ oc get secret <secret_name> \ -n=kube-system
<secret_name>
は、AWS の場合はaws-creds
、GCP の場合はgcp-credentials
です。ルートシークレットが存在する場合、このコマンドの出力はシークレットに関する情報を返します。エラーは、ルートシークレットがクラスターに存在しないことを示します。
手動モードのみを使用する AWS または GCP クラスター: クラスターがクラスターの外部からクラウド認証情報を作成および管理するように設定されているかどうかを確認するには、次のコマンドを実行します。
$ oc get authentication cluster \ -o jsonpath \ --template='{ .spec.serviceAccountIssuer }'
このコマンドは、クラスター
Authentication
オブジェクトの.spec.serviceAccountIssuer
パラメーターの値を表示します。-
クラウドプロバイダーに関連付けられている URL の出力は、CCO が AWS STS または GCP Workload Identity で手動モードを使用して、クラスターの外部からクラウド認証情報を作成および管理していることを示しています。これらのクラスターは、
ccoctl
ユーティリティーを使用して設定されます。 -
空の出力は、クラスターが手動モードで CCO を使用しているが、
ccoctl
ユーティリティーを使用して設定されていないことを示します。
-
クラウドプロバイダーに関連付けられている URL の出力は、CCO が AWS STS または GCP Workload Identity で手動モードを使用して、クラスターの外部からクラウド認証情報を作成および管理していることを示しています。これらのクラスターは、
19.1.3. デフォルト動作
複数のモードがサポートされるプラットフォーム (AWS、Azure、および GCP) の場合、CCO がデフォルトモードで動作する際に、これは指定される認証情報を動的にチェックし、CredentialsRequest
CR を処理するのに十分なモードを判別します。
デフォルトで、CCO は推奨される操作モードの mint モードに十分な認証情報があるかどうかを判別し、これらの認証情報を使用してクラスター内のコンポーネントの適切な認証情報を作成します。mint モードに十分な認証情報がない場合は、passthrough モードに十分な認証情報があるかどうかを判別します。passthrough モードに十分な認証情報がない場合、CCO は CredentialsRequest
CR を適切に処理できません。
インストール時に提供された認証情報が不十分であると判別される場合、インストールは失敗します。AWS では、インストーラーはプロセスの早期の段階で失敗し、どの必須パーミッションが欠落しているかを示します。他のプロバイダーは、エラーが発生するまでエラーの原因についての具体的な情報を提供しない場合があります。
認証情報が正常なインストールの後に変更され、CCO が新規の認証情報が不十分であると判別する場合に、CCO は新規の CredentialsRequest
CR に条件を追加し、認証情報が不十分であるためにそれらを処理できないことを示唆します。
不十分な認証情報に関する問題を解決するために、適切なパーミッションで認証情報を指定します。エラーがインストール時に発生した場合は、再度インストールを試行します。新規の CredentialsRequest
CR 関連の問題については、CCO が再び CR の処理を試行するのを待機します。別の方法として、AWS、Azure、および GCP の IAM を手動で作成できます。