정보 보안 숨기기 deploy

Cloud Foundry Advent Calendar 2017 16일째 글입니다.
저도 사용자로서cloudfoundry에서push 응용 프로그램을 사용하지만credential 정보의 관리가 어렵다고 생각해서 여기서 공유하고 싶습니다.

정보



DB와 API 인증에 사용된 ID, 패스 등을 취합해 이번 기고문에서credential 정보라고 부른다.

모티프

cf push 큰 사고 안 날까 www
push시...
  • 분명히 제본 환경에서push를 하려고 했지만 manfest 파일이 지정한 디렉터리는push에 의해 정식 환경w
  • 에 이르렀다.
  • 문서가 업데이트되지 않았습니다. cf set-env로 이전 값 w
  • 를 덮어씁니다.
    잠깐만, 다들 이런 경험이 있을 것 같아.
    나는 왜 이런 문제가 발생했는지 스스로 생각해 보았다.
    그냥 디자인할 때 프로그램이 너무 많아서!cf push -f path/to/manifest 해결되면 사고는 무한히 줄어들 것이다.
    1에 관해서는 manifest.yml라는 manfest 파일을 넣지 않으면 다소 개선될 수 있다.cf push에서 참고한 manfest 파일의 기본값manifest.yml 때문에
    2에 관해서는 본 투고의 주요 내용이다.
    나는 정보를 파악하는 방법에 힘써 없애고 싶다cf set-env.

    정보의 파악 방법

    cf push -f path/to/manifest 해결되면 사고는 무한히 줄어들 것이다.
    필요한 정보를 매니페스트에 잘 전달할 필요가 있다.
    나는 세 가지 방법을 생각해 냈다.

    github로 관리(안 돼, 안 돼.)


    manifest-stg.yml
    ---
    applications:
    - name: app-stg
      buildpack: php_buildpack
      instances: 1
      routes:
      - route: app-stg.hogehoge.com
      env:
        DB_USERNAME: fooooooo
        DB_PASSWORD: damedamedamedame
    
    cf set-env하지 않고 완성할 수 있도록 manifet으로 구성 관리를 해봤습니다.
    Bad Pratice 맞죠?
    어렸을 때 할머니한테 credential 정보를 github 같은 거에 주면 안 된다는 얘기를 들은 적이 있는 것 같아요.

    concourse를 통한 관리


    clodfoundry용 CI/CD 도구Concourse.콘셉트는 각 잡들을 파이프라인으로 관리해 시각화할 수 있고 항상 멋있어 보여서 좋아해요.

    그럼 콘서트의 상세한 사용법은 생략되었지만 cf의push를 진행하기 위해 Resourcecf-resource가 있습니다.
    에서 발췌 README
    pipeline.yml
    - put: resource-deploy-web-app
        params:
          manifest: build-output/manifest.yml
          environment_variables:
            key: value
            key2: value2
    
    이렇게 하면 push를 진행할 수 있다.
    이것environment_variables을 잘 사용하여credential 정보를 숨깁니다.
    pipeline.yml
    - put: resource-deploy-web-app
        params:
          manifest: build-output/manifest.yml
          environment_variables:
            key: ((value))
            key2: ((value2))
    
    Conciourse에서 파이프 셋업 시 다른 파일에서 수치를 참조할 수 있습니다(참조: Concourse:set-pipeline
    credential 정보를 다른 파일에 넣고github로 관리하지 마세요.
    그럼 그 서류는 어떻게 관리할까...그렇게 생각해.
    팀과 공유하세요.
    vault, credhub합쳐서 사용하다 기타 파일은 필요 없습니다.

    서비스 관리


    마지막으로 서비스로 관리하는 방법을 씁니다.
    하지만 내일@legnoh 기사에서 서비스에 대해 자세히 소개할 것 같으니 여기서 간단히 소개해 드리겠습니다.
    manifest-stg.yml
    ---
    applications:
    - name: app-stg
      buildpack: php_buildpack
      instances: 1
      routes:
      - route: app-stg.hogehoge.com
      services:
      - dbservice
    
    이렇게 대상 app와 서비스를 연결합니다.
    market placecf market-place에 서비스로 존재하는 경우 직접 사용하십시오.
    그런 거 없어요!이런 분들은 UserProvided Service 인스턴스하세요.
    terminal
    $ cf cups devservice -p "DB_USERNAME, DB_PASSWORD"
    ## ここらから対話式
    DB_USERNAME> gooood
    DB_PASSWORD> ariariariari
    OK
    
    이 정도면 됐어.
    이 방법은 콘서트에 의존하지 않기 때문에 누구나 실행할 수 있다.
    더 자세히 알고 싶어졌지.
    그러니까 내일@legnoh 투고를 점검해 봅시다!

    최후


    베스트인지 모르겠지만 여러분도 크리덴셜 메시지를 숨겨서 안심하고 안전한 cf life를 보내주세요.
    성탄절이 다가오니 신나서 보내드렸습니다.

    좋은 웹페이지 즐겨찾기