この「マルチテナント対応の Kubernetes クラスターを構成する」シリーズの第 1 回 では IBM Cloud を例に、複数のテナントで共有する Kubernetes クラスターをセットアップする方法を説明しました。
1 つの Kubernetes クラスターが複数のテナントで共有される状態になったら、無許可のアクセスからデータを保護するために、データを探索し、テナントごとにデータを分離する必要があります。
クラウド・ネイティブ環境用の Sysdig というセキュアな DevOps プラットフォームでは、チーム のコンセプトによって、環境内でのテナントの分離を実現することができます。チームは、テナントごとに可視になるリソースを指定するための手段です。管理者は Sysdig サービス・インスタンス用に複数のチームを構成して、どのテナントがどの特定のリソースのメトリックを確認できるかを定義できます。
IBM Cloud 環境を使用している場合、Sysdig の機能は IBM Cloud Monitoring with Sysdig と IBM Cloud Identity and Access Management (IAM) に組み込まれています。チームを作成した後、管理者は IAM を使用してユーザーをチームに追加できます。
このチュートリアルの第 2 回では、IBM Cloud Monitoring with Sysdig を利用してマルチテナント対応の Kubernetes クラスターをモニタリングする例を紹介します。
前提条件
このチュートリアルの手順に取り組むための準備として、以下のタスクを行う必要があります。
- マルチテナント対応の Kubernetes クラスターを作成します。チュートリアル「マルチテナント対応の Kubernetes クラスターを構成する、第 1 回」で説明している手順に従って、複数のテナントで共有する Kubernetes クラスターをセットアップしてください。
クラスターの構成では、クラスター管理者をsam@company.com
に設定し、テナントとしてdev
とprod
の 2 つを追加します。dev
テナントにはテナント管理者john@company.com
とテナント・ユーザーtom@company.com
を含めます。prod
テナントにはテナント管理者mark@company.com
とテナント・ユーザーcherry@company.com
を含めます。 - このチュートリアルで使用するすべてのユーザー ID (
sam@company.com
他) は、同じ IBM アカウント下で作成します。したがって、これらのユーザーが同じ Kubernetes クラスターと同じ Sysdig インスタンスにアクセスできます。 - ユーザーのうちの少なくとも 1 人は IBM アカウント所有者でなければなりません。あるいは、少なくとも 1 人のユーザーに管理者プラットフォーム権限と IBM Cloud Monitoring with Sysdig インスタンスの管理者役割を付与します。このチュートリアルでは、クラスター管理者ユーザー
sam@company.com
が IBM アカウント所有者であり、IBM Cloud 内でサービス・インスタンスを作成、表示、削除する権限を持つことを前提とします。
所要時間
このチュートリアルの手順を最初から最後まで完了するには、約 30 分かかります。
手順
以下で説明する手順では、IBM Cloud Monitoring with Sysdig を利用して Sysdig インスタンスをプロビジョニングする方法、Sysdig エージェントを構成して Kubernetes クラスター上にデプロイする方法、Sysdig チームとアクセス制御を手作業で構成する方法、そして Kubernetes 名前空間の設定に従って自動的に Sysdig チームを構成する方法を説明します。
Sysdig インスタンスをプロビジョニングする
このチュートリアルではユーザー sam@company.com
がクラスターを作成することを前提とします。Sam はクラスター全体の管理者です。Sam のような管理者は、「カタログからの Sysdig インスタンスのプロビジョニング」で説明している手順に従って、IBM Cloud カタログから Sysdig インスタンスをプロビジョニングできます。別の方法として、IBM Cloud コマンド・ライン・インターフェースを使用して Sysdig インスタンスを作成することもできます。その場合は、以下の手順に従ってください。
IBM Cloud にログインします。
# ibmcloud login --sso
リソース・グループを設定します。
# ibmcloud target -g default
Sysdig インスタンスを作成します。
# ibmcloud resource service-instance-create <NAME> sysdig-monitor <SERVICE_PLAN_NAME> <LOCATION>
以下はその一例です。
# ibmcloud resource service-instance-create sysdig-instance-01 sysdig-monitor lite us-south
インスタンスにアクセスするためのサービス・キーを作成します。以下のコマンドを使用すると、ユーザー役割がコンソールからインスタンスの Sysdig アクセス・キーにアクセスできるようになります。
# ibmcloud resource service-key-create <NAME> <ROLE_NAME> --instance-name <SERVICE_INSTANCE_NAME>
以下はその一例です。
# ibmcloud resource service-key-create sysdig-key Administrator --instance-name sysdig-instance-01
Sysdig エージェントを構成して Kubernetes クラスター上にデプロイします。
インスタンスをプロビジョニングした後は、クラスター管理者兼アカウント所有者の sam@company.com
が IBM Cloud ダッシュボード (「Observability Monitoring (プログラム識別情報モニタリング) 」ダッシュボード) から Sysdig インスタンスを表示できるようになります。続いて、sam@company.com
は Sysdig エージェントを構成し、マルチテナント対応 Kubernetes クラスターにエージェントをデプロイする必要があります。
Sysdig サービス・コンソールからインストール・スクリプトを取得します。
前の手順で作成した Sysdig インスタンスを見つけて「Edit Resources (リソースの編集)」をクリックし、スクリプトをコピーします (以下のスクリーン・キャプチャーを参照)。このスクリプトを、マルチテナント対応の Kubernetes クラスター内で実行します。
クラスター管理者兼アカウント所有者として、
sam@company.com
は Sysdig ダッシュボード上ですべてのリソースとすべての名前空間をデフォルトで表示できます (以下のスクリーン・キャプチャーを参照)。
Sysdig チームとアクセス制御を手作業で構成する
Sysdig チームを作成するために、2 つの異なる名前空間に
dev
とprod
という 2 つのチームを作成します。この作業は、クラスター管理者または IBM Cloud Monitoring with Sysdig インスタンスの管理者が行う必要があります。前に説明したように、デフォルトで
sam@company.com
には Sysdig チームを作成するための適切な権限が付与されています。Sam は Sysdig Web インターフェースを使い、「チームの作成」で説明されている手順に従ってチームを作成できます。チーム内で作業するためのユーザー権限を付与するために、Sam は IAM を使用して、「Sysdig UI の起動や REST API の呼び出しを行う権限の付与」と「特定のチーム内で作業するための権限の付与」の手順に従ってチームにアクセス制御を設定し、それぞれのテナント・ユーザーを対応するチームに割り当てます。
アクセス・グループを作成して必要な IAM ポリシーを設定します。例えば、Sam は
sysdig-dev
という名前のアクセス・グループを作成します。このグループには 2 つのポリシーを含める必要があります。1 つは、IBM Cloud コンソールからデフォルト・リソース・グループ内の Sysdig リソースを表示するためのViewer
プラットフォーム権限です。もう 1 つのポリシーでは、sysdig-instance-01
Sysdig インスタンスに対するViewer
プラットフォーム権限とWriter
サービス権限を付与し、KW-namespace_dev
Sysdig チームのみを表示および編集できるようにします。team
にアクセスするアクセス・グループにユーザーを招待します。これで、Sam はテナント管理者john@company.com
を IAM 内のsysdig-dev
アクセス・グループに追加できます。それには、「sysdig-dev group」を選択してから「Add users (ユーザーを追加)」をクリックします。権限が付与されると、john@company.com
は Sysdig ダッシュボード内でKW-namespace_dev
チームを表示して、このチームにアクセスできるようになります (以下のスクリーン・キャプチャーを参照)。Sam は上記の手順を繰り返して、
KW-namespace_prod
という名前の Sysdig チーム (この場合は、scope
を名前空間prod
に設定) と、このチームのアクセス・ポリシーを設定したアクセス・グループも作成できます。その後、prod
テナント管理者mark@company.com
をこのアクセス・グループに招待すると、Mark が名前空間prod
内のリソースのみを表示できるようになります。
Kubernetes 名前空間の設定に応じて自動的に Sysdig チームを構成する
前のセクションでは、Sysdig コンソールから手作業で Sysdig チームを作成する方法を紹介しました。
こうした手作業による手順は、Kubernetes クラスター内に少数のテナントしかない場合に適しています。一方、多数のテナントがセットアップされているとしたら、手作業による手順では非効率的です。その場合は、team
のオンボーディング手順を自動化することをお勧めします。
sysdig-kube-watcher Python スクリプトを使用すると、Kubernetes 名前空間の設定と Sysdig のチーム設定を自動的に同期できます。
名前空間を特定のアノテーションで修飾します。
以下のサンプル名前空間 YAML ファイルでは、アノテーション
sysdigTeamMembers
が使用されています。cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Namespace metadata: name: prod annotations: sysdigTeamMembers: mark@company.com,cherry@company.com EOF
この例では、
sysdig-kube-watcher
がsysdigTeamMembers
アノテーションを認識すると、Sysdig API を介して Sysdig に変更を加え、この名前空間の Sysdig チームを作成します。sysdig-kube-watcher
スクリプトをマルチテナント対応 Kubernetes クラスターにデプロイします。ユーザー管理手法の違いにより、
sysdig-kube-watcher
に含まれる関数の一部は IBM Cloud Monitoring with Sysdig では機能しません。以下の手順を IBM Cloud で有効にするためには、プル・リクエスト #12 に基づくコードを利用してください。sysdig-kube-watcher
はクラスター全体のコントローラーであり、すべての名前空間とアノテーションをモニタリングします。したがって、Sam は Github にある Kubewatcher コードのクローンを作成します。# git clone https://github.com/draios/sysdig-kube-watcher.git
次に、Sam は Kuberwatcher をマルチテナント対応 Kubernetes クラスターにインストールします。
cat <<EOF | kubectl apply -f - --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: kubewatcher-deployment spec: replicas: 1 template: metadata: labels: app: kubewatcher spec: containers: - name: kubewatcher image: sysdig/kubewatcher:0.1.1 env: - name: SDC_ADMIN_TOKEN value: <Sysdig Monitor API Token> - name: SDC_URL value: https://<YOUR-API-SERVER-HOSTNAME-OR-IP> - name: SDC_SSL_VERIFY value: "false" - name: KUBE_URL value: https://<YOUR-KUBERNETES-MASTER-URL> - name: TEAM_PREFIX value: KW- EOF
上記の例に示されている
kubewatcher.yaml
ファイル内で、いくつかのパラメーターを変更する必要があります。image
に設定されているデフォルト・イメージはsysdig/kubewatcher:0.1.1
ですが、プル・リクエスト #12 に基づくコードを使用して新しいイメージをビルドする必要があります。cd sysdig-kube-watcher docker build -t kubewatcher:v1.0 docker tag kubewatcher:v1.0 <your image registry>/kubewatcher:v1.0 docker push <your image registry>/kubewatcher:v1.0
SDC_ADMIN_TOKEN
を、環境内の管理者ユーザーの IBM Cloud Monitoring with Sysdig API トークンで置き換えます。このトークンを確認するには、Sysdig コンソールで「Settings (設定)」 > 「User Profile (ユーザー・プロファイル)」 > 「Sysdig Monitor API」の順にクリックします。SDC_URL
を、Sysdig クラウドにアクセスするために使用する URL で置き換えます。IBM Cloud Monitoring with Sysdig を使用している場合は、Sysdig エンドポイントを確認してください。SDC_SSL_VERIFY
は Kubewatcher がSDC_URL
に接続するときに SSL 証明書の検証を行うかどうかを指定するパラメーターです。デフォルト値は"true"
ですが、Kubernetes 上にデプロイする場合は一般に"false"
に設定する必要があります。KUBE_URL
を、Kubernetes API サーバーにアクセスするための URL で置き換えます。この URL を確認するには、以下のコマンドを実行します。# ibmcloud cs cluster-get <CLUSTER-NAME> |grep "Master URL"
TEAM_PREFIX
(省略可) を、チーム名のプレフィックスで置き換えます。生成されるチーム名は'<TEAM_PREFIX>-namespace_<namespace_name>'
のようになります (例:'KW-namespace_prod'
)。しばらく待った後、Sam は新しく作成されたチームを Sysdig Web インターフェース内で確認できます。
IBM Cloud コマンド・ライン・インターフェースを使用して、テナント・ユーザーをチームに招待します。
前述のように、チームが正常に作成された後は、クラスター管理者 Sam は IBM Cloud コンソール上で、IAM 内の他のユーザーを Sysdig チームに招待できます。このプロセスを自動化するために、以下のコマンドを使用してユーザーをチームに招待することもできます。
アクセス・グループを作成します。
# ibmcloud iam access-group-create GROUP_NAME [-d, --description DESCRIPTION]
例:
# ibmcloud iam access-group-create sysdig-prod
ポリシーをアクセス・グループに割り当てます。
プラットフォーム閲覧者の役割をユーザーに付与して、ユーザーがコンソールから Sysdig インスタンスを表示できるようにします。
# ibmcloud iam access-group-policy-create sysdig-prod --roles Viewer --resource-group-name default --service-name sysdig-monitor
次に、チーム・ポリシーを作成します。
# ibmcloud iam access-group-policy-create sysdig-prod --file policy.json
以下の JSON ファイルを使用します。
{ "type": "access", "subjects": [ { "attributes": [ { "name": "access_group_id", "value": "<Access-Group-Guid>" } ] } ], "roles" : [ { "role_id" : "crn:v1:bluemix:public:iam::::serviceRole:Reader" }, { "role_id" : "crn:v1:bluemix:public:iam::::platformRole:Reader" } ], "resources": [ { "attributes": [ { "name": "accountId", "value": "<Account-Guid>" }, { "name": "serviceName", "value": "sysdig-monitor" }, { "name": "serviceInstance", "value": "<Instance-Guid>" }, { "name": "sysdigTeam", "value": "<Sysdig-TeamID>" } ] } ] }
以下のプレースホルダ―の値を置き換えます。
<Access-Group-Guid>: get IAM Access Group Guid
を#ibmcloud iam access-group sysdig-prod --id
で置き換えます。<Instance-Guid> : get Instance GUID
を#ibmcloud resource service-instance sysdig-instance-01 | grep GUID
で置き換えます。<Account-Guid>: get Account ID
を# ibmcloud account show|grep "Account ID"
で置き換えます。<Sysdig-TeamID>: get Sysdig team ID
を# curl -k https://us-south.monitoring.cloud.ibm.com/api/teams/KW-namespace_prod -H 'Authorization: Bearer <SYSDIG_API_TOKEN>' -H 'Content-Type: application/json'
で置き換えます。グループにアクセスするユーザーを招待します。
# ibmcloud iam access-group-user-add sysdig-prod mark@company.com cherry@company.com
これで手作業による操作と同じように、
mark@company.com
とcherry@company.com
がKW-namespace_prod
チーム内のリソースを表示できるようになりました。
まとめ
このチュートリアルでは、複数のテナントをモニタリングするように IBM Cloud Monitoring with Sysdig を構成する例を紹介しました。チームを使用することで、テナントごとにデータを分離できます。また、可視にするリソースを制御し、リソースを表示して変更できるユーザーを制御することもできます。
IBM Cloud Monitoring with Sysdig には、このチュートリアルでは取り上げ切れない多数の機能があり、例えばアラートとカスタム・ダッシュボードを作成することもできます。Sysdig の詳細については、Sysdig Monitor のドキュメントをご覧ください。