IAM으로 리소스 액세스 보안
Kubernetes 사용자 및 서비스 계정에는 구성 커넥터 리소스를 관리할 수 있는 권한이 필요합니다. 구성 커넥터를 사용하면 Kubernetes 역할 기반 액세스 제어(RBAC)를 사용하는 ID로 프로젝트의 컨트롤 플레인을 관리할 수 있습니다. Identity and Access Management(IAM) 정책을 참조할 수도 있습니다.
IAMPolicy 및 IAMPolicyMember를 참조할 수 있는 리소스는 리소스 참조에 나열되어 있습니다. 이러한 리소스에는 'IAMPolicy/IAMPolicyMember에서 참조할 수 있는' 속성이 있습니다.
이 주제에서는 Identity and Access Management를 사용하여 Google Cloud 리소스에 대한 액세스를 보호하는 방법을 설명합니다.
시작하기 전에
이 페이지의 단계를 완료하려면 먼저 클러스터에 구성 커넥터를 설치합니다.
RBAC를 통한 컨트롤 플레인 액세스 보안
이 예시에서는 서비스 계정을 만들고 PubSubTopic
을 관리할 수 있는 권한을 부여합니다. 이 서비스 계정은 다른 유형의 구성 커넥터 리소스를 관리할 수 없습니다.
다음 콘텐츠로
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.다음 명령어의 결과에
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.다음으로 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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.다음 명령어의 결과가
yes
인지 살펴서pubsub-topic-service-account
으로PubSubTopic
리소스를 만들 수 있음을 확인합니다.kubectl auth can-i get pubsubtopics \ --as=system:serviceaccount:default:pubsub-topic-service-account
삭제
kubectl delete
를 사용하여 서비스 계정, IAM 역할 및 Rolebinding을 제거합니다.
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.다음 콘텐츠로
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
를 구성 커넥터가 관리하는 리소스의 네임스페이스로 바꿉니다.이 명령어를 실행하고 결과에서 이메일 주소를 찾아
PROJECT_ID
를 프로젝트 ID로 바꾸어 정책이 Google Cloud에 적용되었는지 확인합니다.gcloud beta pubsub topics get-iam-policy projects/PROJECT_ID/topics/pubsubtopic-sample
Pub/Sub 주제에 대한 액세스가 이제 IAMPolicyMember
로 보호됩니다.
삭제
kubectl delete
을 사용하여 Google Cloud 프로젝트에서 Pub/Sub 주제 및 IAMPolicyMember를 제거합니다.
kubectl delete -f iampolicymember.yaml --namespace CC_NAMESPACE
kubectl delete -f pubsub-topic-sample.yaml --namespace CC_NAMESPACE
다음 단계
보안 비밀을 사용하여 Google Cloud 리소스에 정보를 안전하게 전달합니다.