3.4. SCRAM 보안을 사용하여 Kafka 스토리지 구성
Kafka 클러스터에 Salted Challenge Response Authentication Mechanism(SCRAM-SHA-512)을 사용하도록 AMQ Streams Operator 및 Service Registry Operator를 구성할 수 있습니다.
사전 요구 사항
- OperatorHub 또는 명령줄을 사용하여 Service Registry Operator를 설치했습니다.
- AMQ Streams Operator를 설치하거나 OpenShift 클러스터에서 Kafka에 액세스할 수 있습니다.
이 섹션에서는 AMQ Streams Operator를 사용할 수 있다고 가정하지만 Kafka 배포를 사용할 수 있습니다. 이 경우 Service Registry Operator에서 예상하는 Openshift 시크릿을 수동으로 생성해야 합니다.
프로세스
- OpenShift 웹 콘솔에서 Installed Operators 를 클릭하고 AMQ Streams Operator 세부 정보를 선택한 다음 Kafka 탭을 선택합니다.
- Create Kafka 를 클릭하여 Service Registry 스토리지의 새 Kafka 클러스터를 프로비저닝합니다.
Kafka 클러스터에 SCRAM-SHA-512 인증을 사용하도록
권한 부여
및tls
필드를 구성합니다. 예를 들면 다음과 같습니다.apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster namespace: registry-example-kafkasql-scram # Change or remove the explicit namespace spec: kafka: config: offsets.topic.replication.factor: 3 transaction.state.log.replication.factor: 3 transaction.state.log.min.isr: 2 log.message.format.version: '2.7' inter.broker.protocol.version: '2.7' version: 2.7.0 storage: type: ephemeral replicas: 3 listeners: - name: tls port: 9093 type: internal tls: true authentication: type: scram-sha-512 authorization: type: simple entityOperator: topicOperator: {} userOperator: {} zookeeper: storage: type: ephemeral replicas: 3
데이터를 저장하기 위해 Service Registry에서 자동으로 생성한 기본 Kafka 주제 이름은
kafkasql-journal
입니다. 환경 변수를 설정하여 이 동작 또는 기본 주제 이름을 재정의할 수 있습니다. 기본값은 다음과 같습니다.-
REGISTRY_KAFKASQL_TOPIC_AUTO_CREATE=true
-
REGISTRY_KAFKASQL_TOPIC=kafkasql-journal
Kafka 주제를 수동으로 생성하지 않으려면 다음 단계를 건너뜁니다.
-
Kafka Topic 탭을 클릭한 다음 Kafka Topic 생성 을 클릭하여
kafkasql-journal
주제를 생성합니다.apiVersion: kafka.strimzi.io/v1beta1 kind: KafkaTopic metadata: name: kafkasql-journal labels: strimzi.io/cluster: my-cluster namespace: registry-example-kafkasql-scram spec: partitions: 2 replicas: 1 config: cleanup.policy: compact
Kafka 사용자 리소스를 생성하여 서비스 레지스트리 사용자에 대한 SCRAM 인증 및 권한 부여를 구성합니다.
metadata
섹션에 사용자 이름을 지정하거나 기본my-user
를 사용할 수 있습니다.apiVersion: kafka.strimzi.io/v1beta1 kind: KafkaUser metadata: name: my-user labels: strimzi.io/cluster: my-cluster namespace: registry-example-kafkasql-scram spec: authentication: type: scram-sha-512 authorization: acls: - operation: All resource: name: '*' patternType: literal type: topic - operation: All resource: name: '*' patternType: literal type: cluster - operation: All resource: name: '*' patternType: literal type: transactionalId - operation: All resource: name: '*' patternType: literal type: group type: simple
참고이 간단한 예제에서는 관리자 권한을 가정하고 Kafka 주제를 자동으로 생성합니다. 서비스 레지스트리에 필요한 주제 및 리소스에 대해
권한 부여
섹션을 구체적으로 구성해야 합니다.다음 예제에서는 Kafka 주제를 수동으로 생성할 때 필요한 최소 구성을 보여줍니다.
... authorization: acls: - operations: - Read - Write resource: name: kafkasql-journal patternType: literal type: topic - operations: - Read - Write resource: name: apicurio-registry- patternType: prefix type: group type: simple
워크로드 및 시크릿을 클릭하여 AMQ Streams가 Kafka 클러스터에 연결하기 위해 Service Registry에서 생성하는 두 가지 시크릿을 찾습니다.
-
my-cluster-cluster-ca-cert
- Kafka 클러스터의 PKCS12 신뢰 저장소 포함 my-user
- 사용자의 키 저장소 포함참고시크릿 이름은 클러스터 또는 사용자 이름에 따라 다를 수 있습니다.
-
수동으로 보안을 생성하는 경우 다음 키-값 쌍을 포함해야 합니다.
my-cluster-ca-cert
-
ca.p12
- PKCS12 형식의 신뢰 저장소 -
ca.password
- truststore 암호
-
my-user
-
암호
- 사용자 암호
-
서비스 레지스트리를 배포하도록 다음 예제 설정을 구성합니다.
apiVersion: registry.apicur.io/v1 kind: ApicurioRegistry metadata: name: example-apicurioregistry-kafkasql-scram spec: configuration: persistence: "kafkasql" kafkasql: bootstrapServers: "my-cluster-kafka-bootstrap.registry-example-kafkasql-scram.svc:9093" security: scram: truststoreSecretName: my-cluster-cluster-ca-cert user: my-user passwordSecretName: my-user
일반 비보안 사용 사례와 다른 bootstrapServers
주소를 사용해야 합니다. 주소는 TLS 연결을 지원해야 하며 type: tls
필드의 지정된 Kafka 리소스에 있습니다.