AES-256 GCM 암호화로 마이그레이션

Looker는 AES-256 Galois/Counter Mode(GCM) 암호화를 사용해서 다음을 포함하여 내부적으로 저장된 민감한 정보를 암호화합니다.

  • Looker 내부 데이터베이스 백업
  • 데이터베이스 및 서비스 연결 정보
  • 사용자 인증 정보
  • 사용자 속성 값
  • 제공하도록 캐시되거나 준비된 고객 데이터

Looker가 암호화하는 데이터에 대한 자세한 목록을 보려면 지원 요청 열기를 수행합니다.

데이터는 고유한 데이터 키를 사용해서 암호화되며 확인을 보장하기 위해 서명되고 버전 관리되는 암호화 엔벨로프를 포함합니다. 이 모드를 사용하려면 외부 고객 마스터 키(CMK)를 사용해야 합니다. CMK는 키 암호화 키(KEK)를 가져오고, 암호화, 복호화하는 데 사용되며, KEK는 데이터 키를 가져오고, 암호화, 복호화하는 데 사용됩니다.

암호화는 Looker 내부 데이터베이스 및 캐시에만 사용됩니다. 고객 데이터베이스는 어떤 방식으로든 Looker 암호화의 영향을 받지 않습니다. 또한 정적 데이터(디스크에 저장된 데이터)만 이 방식으로 암호화됩니다.

고객 호스팅 설치는 고유한 AWS KMS 계정 또는 고유한 커스텀 키 관리 시스템을 사용할 수 있습니다. 모든 데이터 키와 KEK는 고객 호스팅 Looker 설치에서 내부적으로 암호화되고 사용됩니다. AWS KMS를 사용하지 않는 경우 외부 CMK를 안전하게 보관해야 합니다.

GCM 암호화를 사용하려는 기존 고객 호스팅 설치는 기존 암호화에서 새로운 GCM 암호화로 마이그레이션해야 합니다. 새 고객 호스팅 설치는 GCM 암호화에 대한 추가 구성이 필요합니다.

다음 섹션의 절차를 순서대로 수행하세요.

Looker 중지 및 전체 백업 만들기

기존 Looker 인스턴스에서 GCM 암호화로 마이그레이션하는 경우 암호화 마이그레이션에 문제가 발생할 경우를 대비해서 전체 백업을 만들어야 합니다. 새 Looker 인스턴스를 설치할 경우 이 섹션을 건너뜁니다.

Looker의 내부 데이터베이스를 사용하는 경우:

cd looker
./looker stop
tar -zcvf /tmp/looker-pre-encrypt.tar.gz  /home/lookerops/looker --exclude=.cache --exclude=log --exclude=.tmp --exclude=.snapshots --exclude=looker.jar --exclude=authorized_keys --exclude=dr-log --exclude=core

Looker 애플리케이션 데이터를 저장하기 위해 외부 MySQL 데이터베이스를 실행하는 경우 데이터베이스를 개별적으로 백업합니다. 데이터베이스가 MySQL 인스턴스이면 스냅샷을 만듭니다. 데이터베이스가 비교적 작으므로 몇 분 정도만 걸립니다. 그런 후 Looker를 중지합니다.

Looker가 클러스터링된 경우 계속하기 전에 모든 노드를 중지해야 합니다.

cd looker
./looker stop

나중에 마이그레이션 명령어를 실행할 때 노드가 계속 실행 중이면 명령어가 실패하고 다음 메시지가 표시됩니다. "이 백엔드 Looker 데이터베이스에 연결된 다른 라이브 노드가 있습니다. Looker가 최근 1분 내에 종료된 경우 잠시 후 다시 시도하세요. 그렇지 않으면 클러스터의 모든 노드가 종료되어 있는지 확인합니다."

CMK 생성

AWS KMS를 사용하는 경우 AWS 관리 콘솔 또는 API를 사용해서 CMK를 만듭니다.

AWS KMS를 사용하지 않는 경우 Base64, 32바이트 CMK를 생성합니다. 환경 변수 또는 파일에 CMK를 저장할 수 있습니다.

  • CMK를 생성하고 환경 변수에 저장하려면 다음 명령어를 사용해서 CMK를 생성할 수 있습니다.

    openssl rand -base64 32
    

    CMK를 생성한 후 이를 복사하고 다음 명령어를 사용해서 LKR_MASTER_KEY_ENV 환경 변수에 CMK를 저장합니다. 여기서 <CMK_value>는 이전 명령어로 생성한 CMK입니다.

    export LKR_MASTER_KEY_ENV=<CMK_value>
    

    Looker가 클러스터링되었으면 클러스터의 각 노드에서 이전 명령어를 실행합니다.

  • CMK를 생성하고 파일에 저장하려면 다음 명령어를 사용할 수 있습니다. 여기서 <path_to_CMK_file>은 CMK를 저장할 경로 및 파일 이름입니다.

    openssl rand -base64 32 > <path_to_key_file>
    

CMK 파일을 생성한 후 현재 사용자에 대한 키 파일 권한을 읽기 전용으로 설정합니다.

chmod 0400 <path_to_key_file>

CMK를 생성한 후 계속하기 전 이를 안전한 영구 위치에 저장합니다. 내부 데이터베이스를 암호화한 후 CMK가 손실되면 인스턴스가 손실될 수 있습니다.

AWS IAM 역할 만들기

AWS KMS를 사용 중이 아니면 이 섹션을 건너뛰세요.

AWS KMS를 사용하는 경우에는 CMK에 고유한 새 IAM 역할을 만들고, 이를 Looker 인스턴스에 연결하는 것이 좋습니다.

다음은 CMK에 필요한 최소 권한이 포함된 IAM 역할 예시입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "kms:GenerateRandom",
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:Decrypt",
                "kms:Encrypt",
                "kms:Generate*",
            ],
            "Resource": "arn:aws:kms:*:*:key/*"
        }
    ]
}

환경 변수 설정

AWS KMS를 사용하는 경우 AWS_REGION 환경 변수를 AWS 리전으로 설정하고 LKR_AWS_CMK 환경 변수를 CMK의 별칭으로 설정합니다.

export AWS_REGION=<AWS_region>
export LKR_AWS_CMK=alias/<CMK_alias>

또한 선택적으로 LKR_AWS_CMK_EC 환경 변수를 설정해서 커스텀 AWS 암호화 컨텍스트를 설정할 수 있습니다. 이 환경 변수를 설정하지 않으면 Looker가 기본 암호화 컨텍스트인 Looker_Encryption_Context 문자열을 사용합니다.

export LKR_AWS_CMK_EC=<My_Encryption_Context>

AWS KMS를 사용 중이 아니고 CMK를 파일에 저장하는 경우에는 LKR_MASTER_KEY_FILE 환경 변수를 CMK 파일의 경로로 설정합니다.

export LKR_MASTER_KEY_FILE=<path_to_key_file>

AWS KMS를 사용 중이 아니고 CMK를 환경 변수에 저장하는 경우에는 LKR_MASTER_KEY_ENV 환경 변수를 CMK의 값으로 설정합니다.

export LKR_MASTER_KEY_ENV=<CMK_value>

Looker가 클러스터링되었으면 클러스터의 각 노드에서 이전 명령어를 실행합니다.

내부 데이터베이스 암호화

기존 Looker 인스턴스를 GCM 암호화로 마이그레이션하는 경우 Looker 내부 데이터베이스를 마이그레이션하고 Looker를 시작합니다.

java -jar looker.jar migrate_encryption
./looker  start

Looker 인스턴스가 데이터베이스 사용자 인증 정보가 포함된 YAML 파일 경로를 제공하는 -d <db.yaml> 또는 --internal-db-creds=<db.yaml> 시작 옵션으로 시작되는 경우 java -jar looker.jar migrate_encryption 명령어에 동일한 옵션을 포함해야 합니다.

예를 들면 java -jar looker.jar migrate_encryption -d /path/file입니다.

새 Looker 인스턴스를 설치하는 경우 새 Looker 인스턴스를 시작할 때 암호화 프로세스가 시작됩니다.

암호화 프로세스는 일반적으로 1분도 걸리지 않습니다. Looker가 시작되었으면 Looker 로그에서 GCM을 검색하여 새 암호화를 확인할 수 있습니다.

grep GCM log/looker.log

2018-10-29 22:42:20.279 +0000 [INFO|007d0|crypt] :: Starting migration from AES-128-CBC Legacy to AES-GCM-256
2018-10-29 22:42:20.468 +0000 [INFO|007d0|db:looker] :: (0.000152s) INSERT INTO "SETTING" ("KEY", "VALUE") VALUES

문제 해결

이 섹션에서는 일반적인 오류와 이러한 오류에 대한 해결 방법을 보여줍니다.

  • "migrate_encryption" 태스크를 찾을 수 없음: Looker 인스턴스를 Looker 6.4로 업데이트합니다.

  • Looker를 시작할 수 없음: 지원 키 저장소 누락: Looker가 CMK를 찾을 수 없습니다. LKR_MASTER_KEY_FILE 환경 변수의 CMK 경로가 올바른지 확인하세요.

  • Looker를 시작할 수 없음: 마스터 키 크기가 잘못됨, 32바이트여야 하지만 X임: CMK는 길이가 정확히 32바이트여야 합니다.

  • Looker를 시작할 수 없음: 지원 키 파일의 권한이 0400이어야 하지만 XXX임: CMK 파일은 chmod 값이 0400이고 읽기 전용이어야 합니다.