IAM を使用したリソースへのアクセスの保護
Kubernetes ユーザーとサービス アカウントには、Config Connector リソースを管理する権限が必要です。Config Connector を使用すると、Kubernetes のロールベース アクセス制御(RBAC)を使用する ID で、プロジェクトのコントロール プレーンを管理できます。また、Identity and Access Management(IAM)ポリシーを参照することもできます。
IAMPolicy と IAMPolicyMember を参照できるリソースは、リソース リファレンスに一覧表示されています。これらのリソースには、「IAMPolicy / IAMPolicyMember によって参照可能」というプロパティがあります。
このトピックでは、Identity and Access Management を使用して Google Cloud リソースに安全にアクセスする方法について説明します。
始める前に
このページの手順を完了するには、まず Config Connector をクラスタにインストールします。
RBAC によるコントロール プレーン アクセスの保護
この例では、サービス アカウントを作成し、PubSubTopic
を管理する権限を付与します。このサービス アカウントは、他のタイプの Config Connector リソースを管理できません。
次の内容のファイルを
pubsub-topic-service-account.yaml
という名前で作成します。apiVersion: v1 kind: ServiceAccount metadata: name: pubsub-topic-service-account namespace: default
これを適用して
pubsub-topic-service-account
サービス アカウントを作成します。kubectl apply -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。次のコマンドの出力に
no
が含まれていることを確認して、pubsub-topic-service-account
がPubSubTopic
リソースを作成できないことを確認します。kubectl auth can-i get pubsubtopics --as=system:serviceaccount:default:pubsub-topic-service-account
次に、Pub/Sub トピックの作成を可能にする
ClusterRole
を作成します。ClusterRole は、
rules.apiGroups
とrules.resources
で指定された値があるリソースのみを管理できます。apiGroups
とresources
の値を確認するには、リソースのリファレンスをご覧ください。次の内容のファイルを
pubsub-topic-editor-role.yaml
という名前で作成します。apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: creationTimestamp: null name: pubsub-topic-editor rules: - apiGroups: - pubsub.cnrm.cloud.google.com resources: - pubsubtopics verbs: - get - list - watch - create - update - patch - delete
pubsub-topic-editor.yaml
を適用してClusterRole
を作成します。kubectl apply -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。次に、ClusterRole とサービス アカウント間で RoleBinding を作成します。次の内容のファイルを
pubsub-topic-editor-rolebinding.yaml
という名前で作成します。apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: pubsub-topic-editor-rolebinding. subjects: - kind: ServiceAccount name: pubsub-topic-service-account roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: pubsub-topic-editor
クラスタに
pubsub-topic-editor-rolebinding.yaml
を適用します。kubectl apply -f pubsub-topic-editor-rolebinding.yaml --namespace CC_NAMESPACE
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。次のコマンドの出力が
yes
であることを確認して、pubsub-topic-service-account
がPubSubTopic
リソースの作成を許可されていることを確認します。kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
クリーンアップ
kubectl delete
を使用して、サービス アカウント、IAM ロール、ロール バインディングを削除します。
kubectl delete -f pubsub-topic-editor-rolebinding.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-editor-role.yaml --namespace <var>CC_NAMESPACE</var>
kubectl delete -f pubsub-topic-service-account.yaml --namespace <var>CC_NAMESPACE</var>
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。
IAM ポリシーを使用したデータプレーンの保護
この例では、以前に付与された権限を使用して PubSubTopic
を作成し、IAMPolicyMember
リソースを使用してアクセスを制限します。
次の内容で
pubsub-topic-sample.yaml
という名前のファイルを作成します。apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-sample
kubectl
を使用してpubsub-topic-sample.yaml
を適用します。kubectl apply -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。次の内容の
iampolicymember.yaml
という名前のファイルを作成し、EMAIL_ADDRESS
を Google Cloud アカウントのメールアドレスに置き換えます。apiVersion: iam.cnrm.cloud.google.com/v1beta1 kind: IAMPolicyMember metadata: name: iampolicymember-sample spec: resourceRef: apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic name: pubsubtopic-sample role: roles/pubsub.admin member: "user:EMAIL_ADDRESS"
iampolicymember.yaml
を適用します。kubectl apply -f iampolicymember.yaml --namespace CC_NAMESPACE
CC_NAMESPACE
は、リソースを管理するNamespace Config Connector に置き換えます。このコマンドを実行し、出力でメールアドレスを探して、ポリシーが Google Cloud に適用されていることを確認し、
PROJECT_ID
を実際のプロジェクト ID に置き換えます。gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
Pub/Sub トピックへのアクセスは、IAMPolicyMember
で保護されています。
クリーンアップ
kubectl delete
を使用して、Pub/Sub トピックと IAMPolicyMember を Google Cloud プロジェクトから削除します。
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
次のステップ
Secret を使用して、情報を Google Cloud リソースに安全に渡します。