18.2. mint モードの使用
mint モードは Amazon Web Services(AWS)、Microsoft Azure、および Google Cloud Platform (GCP) でサポートされます。
mint モードは、サポートされるプラットフォームで使用する Cloud Credential Operator (CCO) のデフォルトおよび推奨されるベストプラクティスの設定です。このモードでは、CCO は提供される管理者レベルのクラウド認証情報を使用して、必要となる特定のパーミッションのみでクラスター内のコンポーネントの新規の認証情報を作成します。
インストール後に認証情報が削除されない場合、これは CCO によって保存され、クラスター内のコンポーネントの CredentialsRequest
CR を処理し、必要な特定のパーミッションのみでそれぞれの新規の認証情報を作成するために使用されます。mint モードでクラウド認証情報を継続的に調整することで、アップグレードなどの追加の認証情報またはパーミッションを必要とするアクションを続行できます。
mint モードがクラスターの kube-system
namespace に管理者レベルの認証情報を保存する要件が、組織のセキュリティー要件を満たさない場合、AWS、Azure、または GCP 用に、管理者レベルのシークレットを kube-system プロジェクトに保存する代替方法 について参照してください。
18.2.1. mint モードのパーミッション要件
mint モードで CCO を使用する場合、指定する認証情報が OpenShift Container Platform を実行し、インストールしているクラウドの各種要件を満たしていることを確認してください。指定される認証情報が mint モードで不十分な場合、CCO は IAM ユーザーを作成できません。
18.2.1.1. Amazon Web Services (AWS) パーミッション
AWS で mint モードに指定する認証情報には以下のパーミッションが必要です。
-
iam:CreateAccessKey
-
iam:CreateUser
-
iam:DeleteAccessKey
-
iam:DeleteUser
-
iam:DeleteUserPolicy
-
iam:GetUser
-
iam:GetUserPolicy
-
iam:ListAccessKeys
-
iam:PutUserPolicy
-
iam:TagUser
-
iam:SimulatePrincipalPolicy
18.2.1.2. Microsoft Azure パーミッション
Azure の mint モードに指定する認証情報には、サービスプリンシパルの作成 で指定されるパーミッションを持つサービスプリンシパルが必要です。
18.2.1.3. Google Cloud Platform (GCP) パーミッション
GCP の mint モードに指定する認証情報には以下のパーミッションが必要です。
-
resourcemanager.projects.get
-
serviceusage.services.list
-
iam.serviceAccountKeys.create
-
iam.serviceAccountKeys.delete
-
iam.serviceAccounts.create
-
iam.serviceAccounts.delete
-
iam.serviceAccounts.get
-
iam.roles.get
-
resourcemanager.projects.getIamPolicy
-
resourcemanager.projects.setIamPolicy
18.2.2. 管理者の認証情報のルートシークレット形式
各クラウドプロバイダーは、kube-system
namespace の認証情報ルートシークレットを使用します。これは、すべての認証情報要求を満たし、それぞれのシークレットを作成するために使用されます。これは、mint モード で新規の認証情報を作成するか、または passthrough モード で認証情報 root シークレットをコピーして実行します。
シークレットの形式はクラウドごとに異なり、それぞれの CredentialsRequest
シークレットにも使用されます。
Amazon Web Services (AWS) シークレット形式
apiVersion: v1 kind: Secret metadata: namespace: kube-system name: aws-creds stringData: aws_access_key_id: <base64-encoded_access_key_id> aws_secret_access_key: <base64-encoded_secret_access_key>
Google Cloud Platform (GCP) シークレット形式
apiVersion: v1 kind: Secret metadata: namespace: kube-system name: gcp-credentials stringData: service_account.json: <base64-encoded_service_account>
18.2.3. 管理者レベルの認証情報の削除またはローテーション機能を持つ mint モード
現時点で、このモードは AWS および GCP でのみサポートされます。
このモードでは、ユーザーは通常の mint モードと同様に管理者レベルの認証情報を使用して OpenShift Container Platform をインストールします。ただし、このプロセスはクラスターのインストール後の管理者レベルの認証情報シークレットを削除します。
管理者は、Cloud Credential Operator に読み取り専用の認証情報について独自の要求を行わせることができます。これにより、すべての CredentialsRequest
オブジェクトに必要なパーミッションがあることの確認が可能になります。そのため、いずれかの変更が必要にならない限り、管理者レベルの認証情報は必要になりません。関連付けられた認証情報が削除された後に、必要な場合は、これは基礎となるクラウドで破棄するか、または非アクティブにできます。
z-stream 以外のアップグレードの前に、認証情報のシークレットを管理者レベルの認証情報と共に元に戻す必要があります。認証情報が存在しない場合は、アップグレードがブロックされる可能性があります。
管理者レベルの認証情報はクラスターに永続的に保存されません。
これらの手順を実行するには、短い期間にクラスターでの管理者レベルの認証情報が必要になります。また、アップグレードごとに管理者レベルの認証情報を使用してシークレットを手動で再インストールする必要があります。
18.2.3.1. クラウドプロバイダーの認証情報の手動によるローテーション
クラウドプロバイダーの認証情報が何らかの理由で変更される場合、クラウドプロバイダーの認証情報の管理に Cloud Credential Operator (CCO) が使用するシークレットを手動で更新する必要があります。
クラウド認証情報をローテーションするプロセスは、CCO を使用するように設定されているモードによって変わります。mint モードを使用しているクラスターの認証情報をローテーションした後に、削除された認証情報で作成されたコンポーネントの認証情報は手動で削除する必要があります。
前提条件
クラスターは、使用している CCO モードでのクラウド認証情報の手動ローテーションをサポートするプラットフォームにインストールされている。
- mint モードについては、Amazon Web Services (AWS) および Google Cloud Platform (GCP) がサポートされます。
- クラウドプロバイダーとのインターフェイスに使用される認証情報を変更している。
- 新規認証情報には、モードの CCO がクラスターで使用されるように設定するのに十分なパーミッションがある。
mint モードを使用する Azure クラスターの認証情報をローテーションする場合は、インストール時に使用されたサービスプリンシパルを削除したり、置き換えたりしないでください。代わりに、新規の Azure サービスプリンシパルのクライアントシークレットを生成し、それに応じて OpenShift Container Platform シークレットを更新します。
手順
-
Web コンソールの Administrator パースペクティブで、Workloads
Secrets に移動します。 Secrets ページの表で、クラウドプロバイダーのルートシークレットを見つけます。
プラットフォーム シークレット名 AWS
aws-creds
GCP
gcp-credentials
- シークレットと同じ行にある Options メニュー をクリックし、Edit Secret を選択します。
- Value フィールドの内容を記録します。この情報を使用して、認証情報の更新後に値が異なることを確認できます。
- Value フィールドのテキストをクラウドプロバイダーの新規の認証情報で更新し、Save をクリックします。
クラスターの CCO が mint モードを使用するように設定されている場合、個別の
CredentialsRequest
オブジェクトによって参照される各コンポーネントシークレットを削除します。-
cluster-admin
ロールを持つユーザーとして OpenShift Container Platform CLI にログインします。 参照されたすべてのコンポーネントシークレットの名前および namespace を取得します。
$ oc -n openshift-cloud-credential-operator get CredentialsRequest \ -o json | jq -r '.items[] | select (.spec.providerSpec.kind=="<provider_spec>") | .spec.secretRef'
ここで、
<provider_spec>
はクラウドプロバイダーの対応する値になります。-
AWS:
AWSProviderSpec
-
GCP:
GCPProviderSpec
AWS の部分的なサンプル出力
{ "name": "ebs-cloud-credentials", "namespace": "openshift-cluster-csi-drivers" } { "name": "cloud-credential-operator-iam-ro-creds", "namespace": "openshift-cloud-credential-operator" } ...
-
AWS:
参照されるコンポーネントの各シークレットを削除します。
$ oc delete secret <secret_name> \ 1 -n <secret_namespace> 2
AWS シークレットの削除例
$ oc delete secret ebs-cloud-credentials -n openshift-cluster-csi-drivers
プロバイダーコンソールから認証情報を手動で削除する必要はありません。参照されるコンポーネントのシークレットを削除すると、CCO はプラットフォームから既存の認証情報を削除し、新規の認証情報を作成します。
-
認証情報が変更されたことを確認するには、以下を実行します。
-
Web コンソールの Administrator パースペクティブで、Workloads
Secrets に移動します。 - Value フィールドの内容が以前に記録された情報とは異なることを確認します。
-
Web コンソールの Administrator パースペクティブで、Workloads
18.2.3.2. クラウドプロバイダーの認証情報の削除
Cloud Credential Operator (CCO) を mint モードで使用して OpenShift Container Platform クラスターをインストールした後に、クラスターの kube-system
namespace から管理者レベルの認証情報シークレットを削除できます。管理者レベルの認証情報は、アップグレードなどの昇格されたパーミッションを必要とする変更時にのみ必要です。
z-stream 以外のアップグレードの前に、認証情報のシークレットを管理者レベルの認証情報と共に元に戻す必要があります。認証情報が存在しない場合は、アップグレードがブロックされる可能性があります。
前提条件
- クラスターが、CCO からのクラウド認証情報の削除をサポートするプラットフォームにインストールされている。サポートされるプラットフォームは AWS および GCP。
手順
-
Web コンソールの Administrator パースペクティブで、Workloads
Secrets に移動します。 Secrets ページの表で、クラウドプロバイダーのルートシークレットを見つけます。
プラットフォーム シークレット名 AWS
aws-creds
GCP
gcp-credentials
- シークレットと同じ行にある Options メニュー をクリックし、Delete Secret を選択します。
18.2.4. 関連情報
- AWS についての 管理者レベルのシークレットを kube-system プロジェクトに保存する代替方法
- Azure についての 管理者レベルのシークレットを kube-system プロジェクトに保存する代替方法
- GCP についての 管理者レベルのシークレットを kube-system プロジェクトに保存する代替方法
- Azure での サービスプリンシパルの作成