10.5. Operator が AWS STS を使用した CCO ベースのワークフローをサポートできるようにする
Operator Lifecycle Manager (OLM) で実行するプロジェクトを設計する Operator 作成者は、Cloud Credential Operator (CCO) をサポートするようにプロジェクトをカスタマイズすることで、STS 対応の OpenShift Container Platform クラスター上で Operator が AWS に対して認証できるようにすることができます。
この方法では、Operator が CredentialsRequest オブジェクトを作成します。Operator には、オブジェクトを作成するための RBAC 権限と、生成される Secret オブジェクトを読み取るための RBAC 権限が必要です。
デフォルトでは、Operator デプロイメントに関連する Pod は、生成される Secret オブジェクトでサービスアカウントトークンを参照できるように、serviceAccountToken ボリュームをマウントします。
前提条件
- OpenShift Container Platform 4.14 以降
- STS モードのクラスター
- OLM ベースの Operator プロジェクト
手順
Operator プロジェクトの
ClusterServiceVersion(CSV) オブジェクトを更新します。Operator が
CredentialsRequestsオブジェクトを作成する RBAC 権限を持っていることを確認します。例10.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オブジェクトがあることを確認してください。以下に例を示します。例10.2
CredentialsRequestオブジェクトの作成例Copy to Clipboard Copied! Toggle word wrap Toggle overflow あるいは、YAML 形式の
CredentialsRequestオブジェクトから開始している場合 (たとえば、Operator プロジェクトコードの一部として)、別の方法で処理することもできます。例10.3 YAML フォームでの
CredentialsRequestオブジェクト作成の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記CredentialsRequestオブジェクトを Operator バンドルに追加することは現在サポートされていません。ロール ARN と Web ID トークンパスを認証情報リクエストに追加し、Operator の初期化中に適用します。
例10.4 Operator の初期化中に
CredentialsRequestオブジェクトを適用する例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例に示すように、CCO から
Secretオブジェクトが表示されるのを Operator が待機できるようにします。この処理は、Operator がリコンサイルする他の項目とともに呼び出されます。例10.5
Secretオブジェクトを待機する例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
timeout値は、CCO が追加されたCredentialsRequestオブジェクトを検出してSecretオブジェクトを生成する速度の推定に基づいています。Operator がまだクラウドリソースにアクセスしていない理由を疑問に思っているクラスター管理者のために、時間を短縮するか、カスタムフィードバックを作成することを検討してください。
認証情報リクエストから CCO によって作成されたシークレットを読み取り、そのシークレットのデータを含む AWS 設定ファイルを作成することで、AWS 設定をセットアップします。
例10.6 AWS 設定の作成例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要シークレットは存在すると想定されますが、このシークレットを使用する場合、CCO がシークレットを作成する時間を与えるために、Operator コードは待機して再試行する必要があります。
さらに、待機期間は最終的にタイムアウトになり、OpenShift Container Platform クラスターのバージョン、つまり CCO が、STS 検出による
CredentialsRequestオブジェクトのワークフローをサポートしていない以前のバージョンである可能性があることをユーザーに警告します。このような場合は、別の方法を使用してシークレットを追加する必要があることをユーザーに指示します。AWS SDK セッションを設定します。以下に例を示します。
例10.7 AWS SDK セッション設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow