クロスアカウントサービスアカウントを作成する
このページでは、Zilliz Cloud がプロジェクトのデータプレーンをブートストラップするためのクロスアカウントサービスアカウントを作成および設定する方法について説明します。このサービスアカウントは、Zilliz Cloud に代行で VPC リソースを管理するために必要な権限を付与します。
Zilliz BYOC は現在 General Availability で利用可能です。アクセス方法および実装の詳細については、Zilliz Cloud sales までお問い合わせください。
Procedures
Google Cloud Platform (GCP) ダッシュボードを使用して EKS ロールを作成できます。あるいは、Zilliz Cloud が提供する Terraform スクリプトを使用して、GCP 上の Zilliz Cloud プロジェクト向けインフラストラクチャをブートストラップすることもできます。詳細については、Terraform Provider を参照してください。
Step 1: custom role を作成する
クロスアカウントサービスアカウントを作成する前に、サービスアカウントに割り当てる必要がある複数の custom role を作成する必要があります。
instance group manager custom role を作成する
instance group manager custom role を作成し、その custom role を上で作成したサービスアカウントに割り当てることで、サービスアカウントが GKE ノードを管理するために必要な最小限の権限を持つようにします。
instance group manager custom role を作成する手順は次のとおりです。
GCP コンソールで IAM & Admin を探してクリックします。
左側のナビゲーションペインで Roles を選択します。
Create role をクリックします。
作成する custom role の title と description を設定します。
このデモでは、Zilliz Cloud Custom Role for GKE Management を使用できます。
Role launch stage を Alpha から General Availability に変更します。
Add permissions をクリックします。この手順で追加する権限は次のとおりです。
-
compute.instanceGroupManagers.get
-
compute.instanceGroupManagers.update
Create をクリックします。
IAM custom role を作成する
IAM custom role を作成し、その custom role を上で作成したサービスアカウントに割り当てることで、サービスアカウントが IAM ポリシーを管理するために必要な最小限の権限を持つようにします。
custom role を作成する手順は次のとおりです。
GCP コンソールで IAM & Admin を探してクリックします。
左側のナビゲーションペインで Roles を選択します。
Create role をクリックします。
作成する custom role の title と description を設定します。
このデモでは、IAM custom role を使用できます。
Role launch stage を Alpha から General Availability に変更します。
Add permissions をクリックします。この手順で追加する権限は次のとおりです。
-
iam.serviceAccounts.getIamPolicy
-
iam.serviceAccounts.setIamPolicy
Create をクリックします。
Step 2: サービスアカウントを作成する
この手順では、Zilliz Cloud が代行で VPC リソースを管理するためのサービスアカウントを作成し、そのサービスアカウントのメールアドレスを Zilliz Cloud コンソールに貼り戻します。
サービスアカウントを作成する手順は次のとおりです。
GCP コンソールで IAM & Admin を探してクリックします。
左側のナビゲーションペインで Service Accounts を選択します。
Create service account をクリックします。
作成するサービスアカウントに適切な名前を設定します。
このデモでは、your-org-cross-account-sa に設定できます。サービスアカウント ID は、サービスアカウント名の先頭 18 文字です。適切な値に手動で設定できます。
Create and continue をクリックします。
Permissions セクションで、前の手順で作成した custom role と、いくつかの GCP 管理ロールをサービスアカウントに追加します。
次の表に、サービスアカウントに割り当てるロールを示します。
| Role | Type | Condition |
|---|---|---|
| Instance group manager custom role | Custom | resource.name.extract("projects/<name>").startsWith("PROJECT_ID") &&resource.name.extract("zones/<name>").startsWith("REGION") &&resource.name.extract("instanceGroupManagers/<name>").startsWith("gke-CLUSTER_NAME") |
| IAM custom role | Custom | api.getAttribute("iam.googleapis.com/modifiedGrantsByRole", []).hasOnly(["roles/iam.workloadIdentityUser"]) |
| Kubernetes Engine Admin | GCP-managed | N/A |
| Storage Object Viewer | GCP-managed | resource.name.startsWith("projects/_/buckets/YOUR_BUCKET_NAME") |
上記の式内にある 3 つのプレースホルダーを実際の値に置き換える必要があります。
-
PROJECT_IDこれは GCP project ID です。
-
REGIONこれは BYOC プロジェクトの cloud region です。
-
CLUSTER_NAMEこれは、Zilliz Cloud が代行で作成する GKE cluster の名前です。
Google Cloud は cluster 名の前に
gke-というプレフィックスを追加する点に注意してください。したがって、条件内ではgke-プレフィックスをそのまま保持し、CLUSTER_NAMEのみを実際の名前に置き換えてください。 -
YOUR_BUCKET_NAMEこれは前の手順で作成した bucket の名前です。
Save をクリックします。
他のサービスアカウントへのアクセスを付与する
前の手順で作成したクロスアカウントサービスアカウントに、他のいくつかのサービスアカウントへのアクセス権を付与します。
以下の手順に従って、これらのサービスアカウントへのアクセス権をクロスアカウントサービスアカウントに付与してください。
GCP コンソールで Service Account を探してクリックします。
リスト内で次のサービスアカウントを見つけてクリックします。
| Description | |
|---|---|
PROJECT_NUMBER-compute@developer.gserviceaccount.com | このサービスアカウントは、Compute Engine API を有効にすると自動的に作成されます。 |
GCP project には project ID と project number があります。project ID は GCP コンソールで project を作成するときに入力した文字列であり、project number は作成時に GCP が project に割り当てる文字列です。
PROJECT_NUMBER はご自身の GCP project number に置き換える必要があります。
Principals with access タブに切り替え、Grant access をクリックします。
Add principals > New principals に、前の手順で作成したクロスアカウントサービスアカウントを入力します。
Assign roles > Role で Service Account User を選択します。
Zilliz Cloud のサービスアカウントを impersonate する
前の手順で作成したクロスアカウントサービスアカウントが、Zilliz Cloud コンソールで提供される Zilliz Cloud のサービスアカウントを impersonate できるようにします。
Zilliz Cloud が提供するサービスアカウントを impersonate する手順は次のとおりです。