3.5. Operator が AWS STS を使用した CCO ベースのワークフローをサポートできるようにする
Operator Lifecycle Manager (OLM) で実行するプロジェクトを設計する Operator 作成者は、Cloud Credential Operator (CCO) をサポートするようにプロジェクトをカスタマイズすることで、STS 対応の OpenShift Container Platform クラスター上で Operator が AWS に対して認証できるようにすることができます。
				このメソッドでは、Operator が CredentialsRequest オブジェクトの作成を担当します。つまり、Operator がこれらのオブジェクトを作成するには RBAC 権限が必要です。次に、Operator は、結果として得られる Secret オブジェクトを読み取ることができなければなりません。
			
					デフォルトでは、Operator デプロイメントに関連する Pod は、結果として得られる Secret オブジェクトでサービスアカウントトークンを参照できるように、serviceAccountToken ボリュームをマウントします。
				
前提条件
- OpenShift Container Platform 4.14 以降
- STS モードのクラスター
- OLM ベースの Operator プロジェクト
手順
- Operator プロジェクトの - ClusterServiceVersion(CSV) オブジェクトを更新します。- Operator が - CredentialsRequestsオブジェクトを作成する RBAC 権限を持っていることを確認します。- 例3.1 - clusterPermissionsリストの例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- AWS STS を使用したこの CCO ベースのワークフロー方式のサポートを要求するために、次のアノテーションを追加します。 - # ... metadata: annotations: features.operators.openshift.io/token-auth-aws: "true" - # ... metadata: annotations: features.operators.openshift.io/token-auth-aws: "true"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- Operator プロジェクトコードを更新します。 - Subscriptionオブジェクトによって Pod に設定された環境変数からロール ARN を取得します。以下に例を示します。- // Get ENV var roleARN := os.Getenv("ROLEARN") setupLog.Info("getting role ARN", "role ARN = ", roleARN) webIdentityTokenPath := "/var/run/secrets/openshift/serviceaccount/token"- // Get ENV var roleARN := os.Getenv("ROLEARN") setupLog.Info("getting role ARN", "role ARN = ", roleARN) webIdentityTokenPath := "/var/run/secrets/openshift/serviceaccount/token"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- パッチを適用して適用できる - CredentialsRequestオブジェクトがあることを確認してください。以下に例を示します。- 例3.2 - CredentialsRequestオブジェクトの作成例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - あるいは、YAML 形式の - CredentialsRequestオブジェクトから開始している場合 (たとえば、Operator プロジェクトコードの一部として)、別の方法で処理することもできます。- 例3.3 YAML フォームでの - CredentialsRequestオブジェクト作成の例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注記- CredentialsRequestオブジェクトを Operator バンドルに追加することは現在サポートされていません。
- ロール ARN と Web ID トークンパスを認証情報リクエストに追加し、Operator の初期化中に適用します。 - 例3.4 Operator の初期化中に - CredentialsRequestオブジェクトを適用する例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次の例に示すように、CCO から - Secretオブジェクトが表示されるのを Operator が待機できるようにします。この処理は、Operator がリコンサイルする他の項目とともに呼び出されます。- 例3.5 - Secretオブジェクトを待機する例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- timeout値は、CCO が追加された- CredentialsRequestオブジェクトを検出して- Secretオブジェクトを生成する速度の推定に基づいています。Operator がまだクラウドリソースにアクセスしていない理由を疑問に思っているクラスター管理者のために、時間を短縮するか、カスタムフィードバックを作成することを検討してください。
 
- 認証情報リクエストから CCO によって作成されたシークレットを読み取り、そのシークレットのデータを含む AWS 設定ファイルを作成することで、AWS 設定をセットアップします。 - 例3.6 AWS 設定の作成例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 重要- シークレットは存在すると想定されますが、このシークレットを使用する場合、CCO がシークレットを作成する時間を与えるために、Operator コードは待機して再試行する必要があります。 - さらに、待機期間は最終的にタイムアウトになり、OpenShift Container Platform クラスターのバージョン、つまり CCO が、STS 検出による - CredentialsRequestオブジェクトのワークフローをサポートしていない以前のバージョンである可能性があることをユーザーに警告します。このような場合は、別の方法を使用してシークレットを追加する必要があることをユーザーに指示します。
- AWS SDK セッションを設定します。以下に例を示します。 - 例3.7 AWS SDK セッション設定の例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow