curity

identity server중에 하나로 새로 배우게 되었다.

회원가입후 라이센스 받기

https://developer.curity.io/

커뮤니티 에디션으로 라이센스를 받아서 다운로드해두자.

arogocd / helm으로 설치

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: curity
  namespace: argocd
spec:
  destination:
    name: ''
    namespace: curity
    server: 'https://kubernetes.default.svc'
  source:
    path: ''
    repoURL: 'https://curityio.github.io/idsvr-helm/'
    targetRevision: 0.9.26
    chart: idsvr
    helm:
      parameters:
        - name: curity.adminUiHttp
          value: 'true'
        - name: curity.config.uiEnabled
          value: 'true'
        - name: curity.config.password
          value: YOUR-PASS
        - name: curity.admin.logging.stdout
          value: 'true'
        - name: ingress.enabled
          value: 'true'
        - name: ingress.runtime.host
          value: curity.yourdomain.com
        - name: ingress.admin.host
          value: admin.curity.yourdomain.com
        - name: networkpolicy.enabled
          value: 'false'
        - name: replicaCount
          value: '3'
  project: default
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

ingress로 접근하는법

https://admin.curity.yourdomain.com/admin/

port forwarding으로 접근하는법

export POD_NAME=$(kubectl get pods -l "role=curity-idsvr-admin" -o jsonpath="{.items[0].metadata.name}")

kubectl port-forward $POD_NAME 6749:6749

http://localhost/admin/

port forwarding으로는 접근이 되고 ingress로 안되면 helm 옵션중에 network policy를 끄고 실행해봐라 그럼 될것이다.

Run Basic Setup

설정해둔 url로 접근하면 다음 화면이 나온다.

설정해둔 비번으로 로그인

Run Basic Setup 클릭

커뮤니티 라이센스를 발급받아서 업로드 해주자.

next 클릭

일단 기본값으로 모두 next를 누르면 된다.

마지막에 커밋버튼을 클릭하자.

curity는 유저데이터등은 db에 저장하지만 이 설정파일등은 xml로 로컬에 저장하는것같다.

다 로딩이 되면

admin 하나와 runtime 모듈 3개가 올라와 있다.

url change

baseurl을 수정해주자.

general 메뉴에서도 수정

변경할때마다 commit을 해야한다.

jdbc

curity는 jdbc드라이버를 포함하고 있지 않다. 오라클 라이센스때문에 직접 다운받아서 컨테이너에 넣어줘야한다.

kubectl cp ~/Downloads/mysql-connector-java-8.0.26.jar -n curity $(kubectl get pods -l "role=curity-idsvr-admin" -o jsonpath="{.items[0].metadata.name}"):/opt/idsvr/lib/plugins/data.access.jdbc/

//todo 이부분은 나중에 좀더 다듬어야할듯. 매번 컨테이너 올라올때마다 넣어줄수는 없으니.

이제 jdbc connection string을 적어주자.

https://curity.io/docs/idsvr/latest/system-admin-guide/data-sources/jdbc.html?highlight=session#mysql-and-mariadb

create

jdbc:mysql://MYSQL_HOST:3306/se_curity_store?useSSL=false

설정하자.

추가 완료

테이블을 생성해줘야한다.

스크립트는 어드민 컨테이너에 있다.

가지고와서 디비에 적용해주자.

create database se_curity_store;
kubectl cp -n curity $(kubectl get pods -l "role=curity-idsvr-admin" -o jsonpath="{.items[0].metadata.name}"):/opt/idsvr/etc/mysql-create_database.sql ~/Downloads/mysql-create_database.sql

이상하게 에러가 나서 Linked Accounts 앞까지만 먼저 실행하고 완료후 뒤 스크립트를 실행하였다.

commit

디비까지 완료

현재까지 구조

custom image

Dockerfile을 만들어서 커스터마이즈하자 jdbc 파일을 복사해야함.

나중에 쓸려고 git도 설치가 완료가 되야함.

cat > Dockerfile <<EOF
FROM curity.azurecr.io/curity/idsvr:6.4.1

COPY mysql-connector-java-8.0.26.jar /opt/idsvr/lib/plugins/data.access.jdbc/

USER root

RUN apt update -y
RUN apt install git curl -y

USER idsvr:idsvr
EOF

docker build . -t curity-custom

docker run -it -e PASSWORD=YOUR-PASS -p 6749:6749 -p 8443:8443 --name curity curity-custom

잘 실행되나 보고 jdbc driver 있는지 보고 git/curl잘되는지 확인하면 된다.

설정파일 백업

user data는 외부 디비에 저장되므로 상관없지만 설정파일은 pod가 옮겨지면 모두 없어진다.

admin에 xml로 생성이 되니 이걸 백업 받아야한다.

설정파일을 저장할 깃허브 repo를 만들자. 그리고 PAT(personal access token)을 생성 저장해두자.

curity가 commit hooks를 지원한다.

컨테이너에 /opt/idsvr/usr/bin/post-commit-scripts/ 에 스트립트를 넣어주면 실행을 한다.

https://curity.io/docs/idsvr/latest/configuration-guide/commit-hooks.html#commit-hook-scripts

custom image를 만들때 이 파일을 아에 넣어주면 좋을거같다.

vi full-backup.cli
#!/bin/sh
git config --global user.email "teamsmiley@gmail.com"
git config --global user.name "smiley"

cd /tmp

rm -rf /tmp/curity

git clone https://teamsmiley:PAT@github.com/teamsmiley/curity.git # replace PAT with your PAT

/opt/idsvr/bin/idsh << EOF
show configuration | display xml | save /tmp/curity/config-backup.xml
EOF

cd curity

git add --all
git commit -m "curity commit update"
git push

vi Dockerfile

FROM curity.azurecr.io/curity/idsvr:6.4.1

USER root

RUN apt update -y
RUN apt install git curl vim -y

USER root

COPY mysql-connector-java-8.0.26.jar /opt/idsvr/lib/plugins/data.access.jdbc/
RUN chown -R idsvr:root /opt/idsvr/lib/plugins/data.access.jdbc/mysql-connector-java-8.0.26.jar
RUN chmod -R 400 /opt/idsvr/lib/plugins/data.access.jdbc/mysql-connector-java-8.0.26.jar

COPY full-backup.cli /opt/idsvr/usr/bin/post-commit-scripts/
RUN chown -R idsvr:idsvr /opt/idsvr/usr/bin/post-commit-scripts/
RUN chmod -R 500 /opt/idsvr/usr/bin/post-commit-scripts/full-backup.cli

RUN mkdir -p /home/idsvr
RUN chown -R idsvr:idsvr /home/idsvr

USER idsvr:idsvr

EXPOSE 8443
EXPOSE 6749
EXPOSE 4465
EXPOSE 4466

이제 이 도커파일을 빌드해서 registry에 등록

export CR_PAT=YOUR_PAT
echo $CR_PAT | docker login ghcr.io -u USERNAME --password-stdin
# docker build . -t ghcr.io/OWNER/IMAGE_NAME:latest
docker build . -t ghcr.io/teamsmiley/curity:latest
# docker push ghcr.io/OWNER/IMAGE_NAME:latest
docker push ghcr.io/teamsmiley/curity:latest

이제 이 이미지를 써보자.

이제 웹사이트에서 뭔가를 바구고 commit을 해보자.

컨테이너에 /tmp에 파일이 저장됫는지 확인

생성되었다.

자동으로 깃으로 매번 커밋을 한다.

잘 안되면 로그를 보자 .

tail -f /opt/idsvr/var/log/post-commit-scripts.log

복구

git에 커밋되있는 파일을 가지고 secret를 만든다.

kubectl create secret generic idsvr-config \
    --from-file=default-conf=default-conf.xml

helm으로 복구할때 다음 옵션을 사용한다.

--set curity.config.configurationSecret=idsvr-config

--set curity.config.configurationSecretItemName=default-conf

helm 옵션을 통한 백업

helm 옵션에 curity.config.backup=true를 사용하자.

commit 을 할때마다 secret에 추가 데이터가 저장이 된다.

날짜-트랜잭션 ID로 저장이 된다.

helm 을 이용해서 복구

  • curity.config.configurationSecret

  • curity.config.configurationSecretItemName를 사용

백업을 복원합니다

helm으로 복구할때 다음 옵션을 사용한다.

--set curity.config.configurationSecret=curity-idsvr-config-backup

--set curity.config.configurationSecretItemName=2021-09-01-65E-71EF1-563AE.xml

여러개 있을때 헷갈리기도 하겟다. git방식이 더 나을수도 잇을거같다.

Last updated

Was this helpful?