2.9.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>次のコマンドを実行して、サービスアカウントに成り代わるアイデンティティープロバイダーと 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>"}}}'<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>"}}}'<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"}}}'このモードでは、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>"<role_for_workload_permissions>をワークロードのロールに置き換えます。ワークロードに必要な権限を付与するロールを指定します。
検証
サービスアカウントの設定を検証するには、次のコマンドを実行して
ServiceAccountマニフェストを調べます。$ oc get serviceaccount <service_account_name>次の例では、
service-a/app-xという OpenShift Container Platform サービスアカウントが、app-xという Google Cloud サービスアカウントに成り代わることができます。出力例
apiVersion: v1 kind: ServiceAccount metadata: name: app-x namespace: service-a annotations: cloud.google.com/workload-identity-provider: "projects/<project_number>/locations/global/workloadIdentityPools/<identity_pool>/providers/<identity_provider>"1 cloud.google.com/service-account-email: "app-x@project.iam.googleapis.com" cloud.google.com/audience: "sts.googleapis.com"2 cloud.google.com/token-expiration: "86400"3 cloud.google.com/gcloud-run-as-user: "1000" cloud.google.com/injection-mode: "direct"4