目的
IBMCloudにてIKSクラスタへオブジェクトストレージを接続するには、サービスの注文から
セキュリティ設定、オブジェクトストレージ接続のプラグイン導入の設定が必要となる。
これらの操作について、スクリーンショットやCLIコマンドの交えて解説する
全体の流れ
1.IKSクラスタの作成(この部分は対象外とする)
今回の記事は「2. [IBM Cloud Object Storage のセットアップ]」の内容を記載
2.IBM Cloud Object Storage のセットアップ:Part1
Part2の内容に関しては、こちらの記事で説明
3.IBM Cloud Object Storage プラグインのインストール:Part2
Part3の内容に関しては、こちらの記事で説明
4.アプリへのオブジェクト・ストレージの追加: Part3
IBM Cloud Object Storage のセットアップ
基本的にIBMCloudドキュメントを参照して進めれば問題ない
一部説明が不足している箇所があるので補足しつつ進める
オブジェクト・ストレージ・サービス・インスタンスの作成
IBMCloud WebConsoleの検索メニューより「Object」で検索し、製品ページに遷移する
直接ページに飛ぶにはIBM Cloud Object Storage カタログ・ページを開く
インフラストラクチャーの選択:IBMCloud内のリソースであるIKSから利用するため、IBM Cloudを選択
プラン:利用用途に応じてプランを選択する。今回はテストのため、Freeを選択
サービス名:任意の名前
リソースグループ:どのVPCリソースグループに作成するか選択
タグ:任意で設定
最後に作成を選択し、ICOSの注文を完了する
ICOSの注文が正常に完了すると、作成したインスタンス名のページに遷移する
IBM Cloud Object Storage のサービス資格情報の作成
IBM Cloud Object Storage のサービス資格情報の作成とは、IBM Cloud 上の Object Storage サービスへのアクセスを許可するために必要な認証情報を生成するプロセスで、APIやアプリケーションがセキュアにストレージサービスにアクセスするために使用される。
資格情報の作成ページ
名前:任意の名前
ロール:書き込みを許可するため、ライターとする
アクセス権の詳細は、下記ページを参照
Identity and Access Management の役割
apikeyの確認
問題なく作成されると、サービス資格情報一覧に鍵が見えてくるので、apikeyをメモしておく
画像上だとbw~~~~~~~~~~~~~~~~~~~~~~~~~~Mの部分
オブジェクト・ストレージ・サービス資格情報用のシークレットの作成
オブジェクトストレージサービス資格情報用のシークレットの作成とは、IKS環境で使用するために、サービス資格情報を安全に保存し、管理するもの。このシークレットには、アクセスキーやシークレットキーなど、オブジェクトストレージサービスにアクセスするために必要な機密情報が含まれる。
IBM Cloud Object Storage サービス・インスタンスの GUID を取得
service_nameは先ほど作成したICOSの名前を""で囲って記載する
コマンド
ibmcloud resource service-instance <service_name> | grep GUID
実際のコマンド結果
% ibmcloud resource service-instance "Cloud Object Storage-cg" | grep GUID
GUID: 2e09a007-xxxx-xxxx-xxxx-xxxxxxxxxx
アカウント内リソース一覧を確認するには以下のコマンドで確認できる
% ibmcloud resource service-instances
OK
Name Location State Type Resource Group ID
Cloud Object Storage-acs-paas global active service_instance d72766061fce4e839ce2bdd1247e621c
Cloud Object Storage-cg global active service_instance d72766061fce4e839ce2bdd1247e621c
サービス資格情報を保管する Kubernetes シークレットを作成
Kubernetesのシークレットは、パスワード、OAuthトークン、SSHキーなどの機密情報を保存するためのリソースで、これらの情報はプレーンテキストでPodの設定ファイルやソースコードに含めるのではなく、シークレットに安全に格納しておくことが推奨される
IKSクラスタにログインしておく
ibmcloud ks cluster config --cluster <ClusterID>
API キーを使用する 例
入力するapikeyはここで確認した値
コマンド
kubectl create secret generic cos-write-access --type=ibm/ibmc-s3fs --from-literal=api-key=<api_key> --from-literal=service-instance-id=<service_instance_guid> -n <名前空間>
実際のコマンド結果
kubectl create secret generic cos-write-access --type=ibm/ibmc-s3fs --from-literal=api-key=bwxxxxxxxxxxxxxxxxxxxM --from-literal=service-instance-id=2e09a007-xxxx-xxxx-xxxx-xxxxxxxxxx -n xxxxx
secret/cos-write-access created
Key Protect IBM Cloud Object Storage s3fs プラグインを使用して作成されたバケットの暗号化の準備
暗号化しない場合は、こちらの手順は不要
バケットの暗号化をすることで、保存されるデータが安全に暗号化されることが保証されるため実施しておく
KeyProtectインスタンスの作成
IBMCloud WebConsoleの検索メニューより「Key Protect」で検索し、製品ページに遷移する
直接ページに飛ぶにはIBM Cloud Key Protect カタログ・ページを開く
インフラストラクチャーの選択:IBMCloud内のリソースであるIKSから利用するため、IBM Cloudを選択
プラン:プランは一つしかないので選択
サービス名:任意の名前
リソースグループ:どのVPCリソースグループに作成するか選択
タグ:任意で設定
最後に作成を選択し、Key Protectの注文を完了する
ルート鍵の作成
注文完了後に、作成したKey Protectのページから鍵 -> 追加を選択
ルート鍵のCRNの確認
CLIによる確認
アカウントにあるKey Protectインスタンスの一覧を表示
% ibmcloud resource service-instances --service-name kms
OK
Name Location State Type Resource Group ID
Key Protect-acs-paas jp-tok active service_instance d72766061fce4e839ce2bdd1247e621c
インスタンスのCRNを取得
% ibmcloud resource service-instance "Key Protect-acs-paas" --id
crn:v1:bluemix:public:kms:jp-tok:a/dbxxxxxxxxxxxxxx:xxxx699c-8xxe-4xxx-xxxx-7bxxxxxx:: 90xxxx9c-8xxe-xxx-xxx-xxxxxxx
UUIDをメモする
90xxxx9c-8xxe-xxx-xxx-xxxxxxxがUUID
ルート鍵一覧のIDを取得
% ibmcloud kp keys --instance-id "90xxxx9c-8xxe-xxx-xxx-xxxxxxx"
Targeting endpoint: https://jp-tok.kms.cloud.ibm.com
Retrieving keys...
OK
Key ID Key Name
1xxa7e5d-xx1b-xx6f-9xxx-xxxxxxx07e5 iks-key
CRNを出力
% ibmcloud kp key show 1xxa7e5d-xx1b-xx6f-9xxx-xxxxxxx07e5 --instance-id "90xxxx9c-8xxe-xxx-xxx-xxxxxxx" --output json | grep crn
Targeting endpoint: https://jp-tok.kms.cloud.ibm.com
"crn": "crn:v1:bluemix:public:kms:jp-tok:a/xxxxxxx0e468cbxxxxxxxdb82aee6fe:9xxxxxxx9c-882e-xxx0-a6bd-7ba0xxxxxxx914:key:1xxxxxxxd-1xxx-4xxx-xxxc-xxx1xxx07e5",
IBM Cloud Object Storage シークレットの YAML ファイルを作成
secret-key:前手順で作成したICOSインスタンスの資格情報で確認できるapikey
service-instance-id:前手順で確認したObject Storage サービス・インスタンスのGUID
kp-root-key-crn:前手順で作成したKey Protectルート鍵の詳細で確認できるCRN
name:前手順で作成したkubernetesシークレットの名前
access-key、secret-keyおよびkp-root-key-crnはbase64形式にエンコードする必要がある
エンコードコマンド
echo -n 'エンコードしたいシークレットやCRN' | base64
apiVersion: v1
data:
secret-key: <base64のapi-key>
service-instance-id: <base64のservice-instance-id>
kp-root-key-crn: <base64のCRN>
kind: Secret
metadata:
name: cos-write-access
type: ibm/ibmc-s3fs
・シークレットのデプロイ
kubectl apply -f secret.yaml -n xxxxx
クラスター内のシークレットの確認
% kubectl get secret -n xxxxx
NAME TYPE DATA AGE
cos-write-access ibm/ibmc-s3fs 3 3m2s
・kubectl create secretコマンドでやる場合(Base64形式にしないでOK)
% kubectl create secret generic cos-write-access --type=ibm/ibmc-s3fs --from-literal=api-key=bwxxxxxxxxxxxxxxxxxxxM --from-literal=service-instance-id=2e09a007-xxxx-xxxx-xxxx-xxxxxxxxxx --from-literal=kp-root-key-crn=crn:v1:bluemix:public:kms:jp-tok:a/xxxxxxx0e468cbxxxxxxxdb82aee6fe:9xxxxxxx9c-882e-xxx0-a6bd-7ba0xxxxxxx914:key:1xxxxxxxd-1xxx-4xxx-xxxc-xxx1xxx07e5 -n xxxxx
コマンドで実施した場合、下記のコマンドでyaml形式の状態を見ることができる
% kubectl get secret -n xxxxx -o yaml
apiVersion: v1
items:
- apiVersion: v1
data:
api-key: dEgxxxxx
kp-root-key-crn: Y3JuOnYxOmJsdWVtaXgxxx==
service-instance-id: xxxQxMGVh
kind: Secret
metadata:
creationTimestamp: "2024-04-16T05:56:27Z"
name: cos-write-access
namespace: xxxxxx
resourceVersion: "787308"
uid: e3bb2d45-5884-448a-9f16-b9exxxx6f
type: ibm/ibmc-s3fs
略