2.8. 短期認証情報で Pod を認証する
一部の OpenShift Container Platform クラスターでは、クラスター外で作成および管理される コンポーネントごとの短期セキュリティー認証情報 を使用します。該当するクラスター上のカスタマーワークロード内のアプリケーションは、クラスターが使用する短期認証方法を使用して認証できます。
2.8.1. ワークロードの短期認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションでこの認証方法を使用するには、次の手順を完了する必要があります。
- クラウドプロバイダーの Identity and Access Management (IAM) 設定で連携アイデンティティーサービスアカウントを作成します。
- クラウドプロバイダーのサービスアカウントに成り代わることができる OpenShift Container Platform サービスアカウントを作成します。
- アプリケーションに関連するワークロードを、OpenShift Container Platform サービスアカウントを使用するように設定します。
2.8.1.1. 環境とユーザーアクセスの要件 リンクのコピーリンクがクリップボードにコピーされました!
この認証方法を設定するには、次の要件を満たす必要があります。
- クラスターでは、短期セキュリティー認証情報 を使用する必要があります。
-
cluster-adminロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる必要があります。 - クラウドプロバイダーコンソールでは、Identity and Access Management (IAM) および連携アイデンティティー設定の管理権限を持つユーザーとしてアクセスできる必要があります。
2.8.2. Google Cloud 上のアプリケーションに対する GCP Workload Identity 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
GCP Workload Identity 認証を使用する Google Cloud クラスター上のアプリケーションに短期認証を使用するには、次の手順を完了する必要があります。
2.8.2.1. フェデレーションされた Google Cloud サービスアカウントの作成 リンクのコピーリンクがクリップボードにコピーされました!
Google Cloud コンソールを使用して、ワークロードアイデンティティープールとプロバイダーを作成し、OpenShift Container Platform サービスアカウントによる Google Cloud サービスアカウントの成り代わりを許可できます。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud コンソールにアクセスできる。
- アプリケーションで使用する Google Cloud プロジェクトが作成済みである。
手順
- Google Cloud プロジェクトの IAM 設定で、クラスターが GCP Workload Identity 認証に使用するアイデンティティープールとプロバイダーを特定します。
外部のアイデンティティーが Google Cloud サービスアカウントに成り代わるための権限を付与します。これらの権限により、OpenShift Container Platform サービスアカウントは連携ワークロードアイデンティティーとして機能できます。
詳細は、外部ワークロードによる Google Cloud リソースへのアクセスを許可する方法 に関する Google Cloud ドキュメントを参照してください。
2.8.2.2. Google Cloud 用の OpenShift Container Platform サービスアカウントを作成する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform のサービスアカウントを作成し、Google Cloud のサービスアカウントに成り代われるように、そのサービスアカウントにアノテーションを付けます。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- フェデレーションされた Google Cloud サービスアカウントを作成した。
-
cluster-adminロールを持つユーザーとして OpenShift CLI (oc) にアクセスできる。 -
Identity and Access Management (IAM) とワークロードアイデンティティー設定を管理する権限を持つユーザーとして、Google Cloud CLI (
gcloud) にアクセスできる。
手順
次のコマンドを実行して、GCP Workload Identity Pod 認証に使用する OpenShift Container Platform サービスアカウントを作成します。
oc create serviceaccount <service_account_name>
$ oc create serviceaccount <service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、サービスアカウントに成り代わるアイデンティティープロバイダーと Google Cloud サービスアカウントのアノテーションを付けます。
oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/workload-identity-provider": "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/workload-identity-provider": "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <project_number>、<identity_pool>、<identity_provider>を実際の設定の値に置き換えます。注記<project_number>には、プロジェクト ID ではなく、Google Cloud プロジェクト番号を指定します。次のコマンドを実行して、Google Cloud サービスアカウントのメールアドレスをサービスアカウントにアノテーションとして追加します。
oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/service-account-email": "<service_account_email>"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/service-account-email": "<service_account_email>"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow <service_account_email>は、Google Cloud サービスアカウントのメールアドレスに置き換えます。ヒント通常、Google Cloud サービスアカウントのメールアドレスは、
<service_account_name>@<project_id>.iam.gserviceaccount.comという形式を使用します。次のコマンドを実行して、
direct外部認証情報設定注入モードを使用するようにサービスアカウントにアノテーションを付けます。oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/injection-mode": "direct"}}}'$ oc patch serviceaccount <service_account_name> -p '{"metadata": {"annotations": {"cloud.google.com/injection-mode": "direct"}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow このモードでは、Workload Identity Federation Webhook コントローラーが Google Cloud 外部認証情報の設定を直接生成し、Pod に注入します。
Google Cloud CLI (
gcloud) を使用して次のコマンドを実行し、ワークロードの権限を指定します。gcloud projects add-iam-policy-binding <project_id> --member "<service_account_email>" --role "projects/<project_id>/roles/<role_for_workload_permissions>"
$ gcloud projects add-iam-policy-binding <project_id> --member "<service_account_email>" --role "projects/<project_id>/roles/<role_for_workload_permissions>"Copy to Clipboard Copied! Toggle word wrap Toggle overflow <role_for_workload_permissions>をワークロードのロールに置き換えます。ワークロードに必要な権限を付与するロールを指定します。
検証
サービスアカウントの設定を検証するには、次のコマンドを実行して
ServiceAccountマニフェストを調べます。oc get serviceaccount <service_account_name>
$ oc get serviceaccount <service_account_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例では、
service-a/app-xという OpenShift Container Platform サービスアカウントが、app-xという Google Cloud サービスアカウントに成り代わることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.8.2.3. GCP Workload Identity で認証するカスタマーワークロードのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションで短期認証を使用するには、関連する Pod が OpenShift Container Platform サービスアカウントを使用するように設定する必要があります。OpenShift Container Platform サービスアカウントを使用すると、Pod を変更する Webhook がトリガーされ、Google Cloud サービスアカウントへの成り代わりが可能になります。
次の例は、OpenShift Container Platform サービスアカウントを使用する Pod をデプロイし、設定を確認する方法を示しています。
前提条件
- Google Cloud のクラスターで GCP Workload Identity を使用している。
- フェデレーションされた Google Cloud サービスアカウントを作成した。
- Google Cloud 用の OpenShift Container Platform サービスアカウントを作成した。
手順
GCP Workload Identity で認証する Pod を作成するには、次の例のようなデプロイメント YAML ファイルを作成します。
サンプルデプロイメント
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- OpenShift Container Platform サービスアカウントの名前を指定します。
次のコマンドを実行してデプロイメントファイルを適用します。
oc apply -f deployment.yaml
$ oc apply -f deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
Pod が短期認証を使用していることを確認するには、次のコマンドを実行します。
oc get pods -o json | jq -r '.items[0].spec.containers[0].env[] | select(.name=="GOOGLE_APPLICATION_CREDENTIALS")'
$ oc get pods -o json | jq -r '.items[0].spec.containers[0].env[] | select(.name=="GOOGLE_APPLICATION_CREDENTIALS")'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
{ "name": "GOOGLE_APPLICATION_CREDENTIALS", "value": "/var/run/secrets/workload-identity/federation.json" }{ "name": "GOOGLE_APPLICATION_CREDENTIALS", "value": "/var/run/secrets/workload-identity/federation.json" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow GOOGLE_APPLICATION_CREDENTIALS環境変数が存在する場合、それは GCP Workload Identity で認証する Pod を示しています。追加設定の詳細を確認するには、Pod 仕様を調べます。次の Pod 仕様の例は、Webhook によって変更される環境変数とボリュームフィールドを示しています。
direct注入モードの Pod 仕様例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow