조직 정책을 사용하면 조직의 리소스를 중앙에서 프로그래매틱 방식으로 제어할 수 있습니다. 조직 정책 관리자는 전체 조직에 정책을 구성하여 다음과 같은 이점을 얻을 수 있습니다.
- 조직의 리소스 사용 방법에 대한 제한사항 구성을 중앙에서 제어합니다.
- 개발팀이 규정을 준수할 수 있도록 가드레일을 정의하고 설정합니다.
- 프로젝트 소유자와 해당 팀에서 규정을 위반하지 않고 신속하게 이동할 수 있도록 지원합니다.
Google Distributed Cloud (GDC) 에어 갭은 조직 정책을 만들고 관리할 수 있는 콘솔 UI나 전용 CLI를 제공하지 않습니다. Kubernetes API 또는 kubectl CLI를 사용해야 합니다.
ID 및 액세스 관리와의 차이점
ID 및 액세스 관리 (IAM)와 조직 정책은 상호 보완적인 액세스 및 거버넌스 기능을 제공합니다.
- IAM은 권한 부여에 중점을 둡니다. 어떤 리소스(리소스 범위)에 대해 누가 (사용자, 그룹, 서비스 계정과 같은 구성원) 어떤 작업 (역할)을 수행할 수 있는지 정의합니다. IAM 역할을 통해 부여된 권한은 가산적이며 거부 규칙이 없습니다.
- 조직 정책은 가드레일을 설정하는 데 중점을 둡니다. 이를 통해 관리자는 속성 기반 액세스 제어 (ABAC)를 사용하여 특정 서비스를 사용 중지하거나 주체 속성을 기반으로 리소스 수정을 제한하는 등 조직 전체의 리소스에 프로그래매틱 제한을 구성할 수 있습니다. 구성원이 IAM 역할을 보유하더라도 조직 정책이 우선 적용되어 작업을 차단합니다.
시작하기 전에
조직 정책을 구성하기 전에 필요한 권한을 요청하고 환경을 준비해야 합니다.
IAM 역할 요청
조직 IAM 관리자에게 연락하여 수행해야 하는 작업에 따라 다음 IAM 역할을 요청하세요.
- 제한된 서비스 정책 관리자(
gdchrestrictedservice-policy-admin): 제한된 서비스 정책을 만들고, 업데이트하고, 삭제합니다. - 속성별 제한 정책 관리자(
gdchrestrictbyattributes-policy-admin): 속성 기반 액세스 제어 정책을 생성, 업데이트, 삭제합니다.
개발 환경 준비
kubectl CLI 액세스를 구성하기 위해 kubeconfig 파일을 생성합니다.
정책 구성
GDC에서는 두 가지 유형의 조직 정책을 구성할 수 있습니다.
- 제한된 서비스 정책 (
GDCHRestrictedService): 클러스터에서 사용하거나 수정할 수 있는 서비스를 제한합니다. - 속성 기반 액세스 제어 정책 (
GDCHRestrictByAttributes): ID 공급자에서 매핑된 주체 속성을 기반으로 클러스터의 리소스에 대한 액세스를 조건부로 제한합니다.
제한된 서비스 정책 구성
GDCHRestrictedService 정책 유형을 사용하면 특정 API를 차단하여 클러스터에서 사용할 수 있거나 수정할 수 있는 서비스를 제한할 수 있습니다. 예를 들어 특정 프로젝트로 서비스를 제한하거나 테스트하는 동안 새 서비스에 대한 액세스를 차단할 수 있습니다. 서비스 리소스와 동일한 클러스터에서 이 정책을 만듭니다. 클러스터에서 여러 서비스 또는 프로젝트에 대해 여러 정책 인스턴스를 만들 수 있습니다.
GDCHRestrictedService는 CREATE, UPDATE, DELETE 작업을 지원합니다. GET 및 LIST 읽기 작업을 제한하려면 IAM 역할 바인딩을 사용하여 액세스 권한을 부여하고 취소하세요.
제한된 서비스 정책을 구성합니다.
정책 매니페스트를 정의합니다.
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATION다음을 바꿉니다.
POLICY_NAME: 조직 정책의 이름입니다.API_GROUP: 제한할 서비스의 API 그룹입니다. 지원되는 서비스 표에 나열되어 있습니다.KIND: 제한할 리소스 종류입니다. 지원되는 서비스 표에 나열되어 있습니다.DISABLED_OPERATION: 이 정책에서 차단하는 작업 그룹입니다. 허용되는 값은CREATE,UPDATE,DELETE입니다.disabledOperations필드의 기본값은*입니다. 서비스를 완전히 사용 중지하려면CREATE,UPDATE,DELETE를 나열하고 모든 종류를 지정하세요.
기본적으로 정책은 클러스터의 모든 네임스페이스에 적용됩니다. 특정 네임스페이스 또는 프로젝트로 정책 범위를 지정하려면 클러스터 내에서 조직 정책의 범위 정의를 참고하세요.
GDCHRestrictedService정책은 GDC에서 다음 서비스 하위 집합을 지원합니다.서비스 API 그룹 kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebook데이터베이스 서비스 - Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequest백업 backup.gdc.googBackupRepositoryManagerSpark용 Dataproc 컨테이너 (마켓 서비스) sparkoperator.k8s.ioSparkApplication서비스가 표에 여러 종류를 나열하는 경우 (예: 데이터베이스 서비스) 제한하려는 개별 종류만 지정할 수 있습니다. 예를 들어
DBCluster작업을 계속 허용하면서Restore작업을 차단할 수 있습니다.다음 예시에서는 마켓 서비스 업데이트를 제한합니다.
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: no-update-to-marketplace-service spec: match: kinds: - apiGroups: - "marketplace.gdc.goog" kinds: - MarketplaceService parameters: disabledOperations: - "UPDATE"kubectl CLI를 사용하여 정책을 적용합니다.
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml다음을 바꿉니다.
CLUSTER_KUBECONFIG: 정책을 적용할 클러스터의 kubeconfig 파일POLICY_NAME: 조직 정책 파일의 이름
속성 기반 액세스 제어 정책 구성
GDCHRestrictByAttributes 정책 유형을 사용하면 주체 속성을 기반으로 리소스에 대한 액세스를 조건부로 제한하는 ABAC 정책을 만들 수 있습니다. 예를 들어 이 정책 유형을 사용하여 특정 ID 속성(예: citizenship=USA 또는 citizenship=UK)이 있는 사용자 또는 서비스 계정만 스토리지 버킷에 대한 쓰기 또는 수정 작업을 실행할 수 있도록 제한할 수 있습니다.
리소스와 동일한 클러스터에서 이 정책을 만듭니다. 클러스터에서 여러 리소스 또는 프로젝트에 대해 여러 정책 인스턴스를 만들 수 있습니다.
속성 기반 액세스 제어 정책을 구성합니다.
IdentityProviderConfig리소스의 맞춤 ID 속성을 매핑하는 패치 JSON 파일을 만듭니다.cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFCUSTOM_ATTRIBUTE을 매핑할 ID 속성의 이름으로 바꿉니다(예:citizenship).platform네임스페이스에서IdentityProviderConfig리소스를 패치합니다.kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'다음을 바꿉니다.
CLUSTER_KUBECONFIG: ID 공급자가 상주하는 클러스터의 kubeconfig 파일IDENTITY_PROVIDER_CONFIG_NAME:IdentityProviderConfig리소스의 이름
정책 매니페스트를 정의합니다.
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUE다음을 바꿉니다.
POLICY_NAME: 조직 정책의 이름입니다.API_GROUP: 제한할 리소스의 API 그룹입니다(예:object.gdc.goog).KIND: 제한할 리소스 종류(예:Bucket)CUSTOM_ATTRIBUTE: ID 공급자에서 매핑된 맞춤 주체 속성입니다(예:citizenship).ALLOWED_ATTRIBUTE_VALUE: 허용된 맞춤 속성 값입니다(예:USA). 속성이 허용된 값 중 하나와 일치하지 않는 주체의 요청은 거부됩니다.
기본적으로 정책은 클러스터의 모든 네임스페이스에 적용됩니다. 특정 네임스페이스 또는 프로젝트로 정책 범위를 지정하려면 클러스터 내에서 조직 정책의 범위 정의를 참고하세요.
다음 예시에서는
project-foo네임스페이스의Bucket리소스 수정 권한을citizenship=USA또는citizenship=UK속성이 있는 주체로 제한합니다.apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"kubectl CLI를 사용하여 정책을 적용합니다.
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yaml다음을 바꿉니다.
CLUSTER_KUBECONFIG: 정책을 적용할 클러스터의 kubeconfig 파일POLICY_NAME: 조직 정책 파일의 이름
클러스터 내에서 조직 정책의 범위 정의
조직 정책을 정의할 때 모든 네임스페이스에 영향을 미칠지, 특정 네임스페이스에만 영향을 미칠지, 아니면 지정된 목록을 제외한 모든 네임스페이스에 영향을 미칠지 결정합니다. 이를 위해 정책 정의의 .spec.match.excludedNamespaces, .spec.match.namespaceSelector, .spec.match.namespaces, .spec.match.scope 매개변수를 조합하여 사용합니다.
이러한 매개변수에 대해 자세히 알아보려면 조직 정책 일치 섹션 페이지를 참고하세요. 예를 들어 owner: dba-team 라벨이 있는 네임스페이스에서만 데이터베이스를 만들 수 있도록 허용하려면 다음 정책을 만드세요.
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: db-restricted-to-dbas
spec:
match:
scope: Namespaced
namespaceSelector:
matchExpressions:
# We are restricting the use of the service in namespaces that
# don't have the owner: dba-team label
- key: owner
operator: NotIn
values:
- dba-team
kinds:
- apiGroups:
- "postgresql.dbadmin.gdc.goog"
kinds:
- DBCluster
- BackupPlan
- Import
- Restore
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
기존 정책 롤백
기존 정책의 적용을 중지하려면 kubectl CLI를 사용하여 정책을 삭제합니다. 정책이 정의된 클러스터와 정책 유형에 해당하는 IAM 역할 (예: gdchrestrictedservice-policy-admin 또는 gdchrestrictbyattributes-policy-admin)에 액세스할 수 있는 kubeconfig 파일을 사용합니다.
조직 정책을 삭제하려면 다음 단계를 따르세요.
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
다음을 바꿉니다.
CLUSTER_KUBECONFIG: 조직 정책이 있는 클러스터의 kubeconfig 파일POLICY_TYPE: 삭제할 조직 정책의 유형입니다(예:GDCHRestrictedService또는GDCHRestrictByAttributes).POLICY_NAME: 삭제할 조직 정책의 이름
감사 모드에서 정책 테스트
정책을 적용하지 않고 테스트할 수 있습니다. 정책을 테스트하여 정책이 기존 시스템을 중단하지 않는지 확인하거나 동작이 얼마나 광범위한지 추정합니다. 테스트를 추가하려면 정책 정의에 enforcementAction를 추가하세요. 이 매개변수에 사용할 수 있는 값은 세 가지입니다.
deny: 정책이 적용됩니다. 기본 설정입니다.dryrun: 작업이 허용되지만 감사 로그와 정책 상태 모두에 정책 위반이 표시됩니다.kubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME으로 위반을 검사합니다.warn: 정책 위반을 트리거한 요청에 대한 응답에 경고도 표시된다는 점을 제외하고dryrun와 동일합니다.
예를 들어 마켓을 사용 중지하는 정책을 테스트하려면 다음 정책을 만드세요.
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: disable-marketplace-service-project-alice
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: ["marketplace.gdc.goog"]
kinds: ["MarketplaceService"]