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 - deletepubsub-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 CC_NAMESPACE
kubectl delete -f pubsub-topic-editor-role.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-service-account.yaml --namespace CC_NAMESPACE
CC_NAMESPACE は、リソースを管理するNamespace Config Connector に置き換えます。
IAM ポリシーを使用したデータプレーンの保護
この例では、以前に付与された権限を使用して PubSubTopic を作成し、IAMPolicyMember リソースを使用してアクセスを制限します。
次の内容で
pubsub-topic-sample.yamlという名前のファイルを作成します。apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: name: pubsubtopic-samplekubectlを使用して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 リソースに安全に渡します。