암호 관리를 사용하면 민감한 데이터(예: 암호)를 구성 파일에 일반 텍스트로 쓰지 않고도 사용하도록 에이전트 및 온호스트 통합을 구성할 수 있습니다. 현재 Hashicorp Vault, AWS KMS, CyberArk, New Relic CLI 난독화 및 사용자 지정 명령이 지원됩니다.
이 NerdBytes 비디오(5분 12초)에서 자세히 알아보십시오.
비밀 정의
구성 YAML 파일에서 비밀을 사용하려면:
variables
섹션을 정의합니다. 여기서 각 항목은 비밀 객체의 이름입니다.- 각 항목에 비밀 소스와 해당 비밀을 검색하기 위한 적절한 구성을 포함합니다.
- 일반 구성 섹션에서 비밀 개체의 속성으로 자동 대체될
${variable.property}
자리 표시자를 설정합니다. 비밀 개체는 간단한 문자열 또는 json 개체로 정의할 수 있습니다.
중요
비밀 검색이 실패하면 인프라 에이전트에 실행에 필요한 모든 데이터가 없기 때문에 통합이 실행되지 않습니다.
예를 들어, 다음 구성은 Vault에서 creds
라는 객체를 검색합니다(비밀에 대한 객체의 이름을 정의할 수 있음). 저장된 객체가 user
라는 속성과 password
라는 다른 속성을 가진 유효한 JSON이라고 가정 해 봅시다. 이를 사용하여 Nginx 온 호스트 통합에서 status_url
속성의 기본 HTTP 자격 증명을 설정하려고합니다.
variables: creds: vault: http: url: http://my.vault.host/v1/newengine/data/secret headers: X-Vault-Token: my-vault-tokenintegrations: - name: nri-nginx env: METRICS: "true" STATUS_URL: http://${creds.user}:${creds.password}@example.com/status STATUS_MODULE: discover REMOTE_MONITORING: true interval: 30s labels: env: production role: load_balancer
팁
단순 문자열과 유효한 JSON 개체는 모두 변수에서 검색할 수 있습니다.
JSON 객체를 사용할 때 키와 값이 모두 큰따옴표로 묶여 있는지 확인하십시오.
환경 변수 사용
환경 변수는 {{MY_ENV_VAR}}
표기법을 사용하여 variables
섹션에 사용할 수 있습니다. 이렇게 하면 환경 변수가 확장되고 해당 값이 런타임에 바뀝니다.
토큰이나 난독화 키와 같은 민감한 값이 구성 파일에 포함되지 않도록 하려면 이 방법을 사용하십시오.
호스트 내 통합 구성 파일에서 환경 변수를 사용하는 경우 passthrough_environment 설정을 정의해야 합니다.
비밀 변수
variables
섹션에서 각 구성의 비밀을 정의합니다. 각 항목은 검색된 비밀의 속성을 저장할 사용자 정의 비밀 이름입니다. 각 변수에는 다음 속성이 포함될 수 있습니다.
YAML 키 | 설명 |
---|---|
유형: 문자열 | 보안 비밀이 새로 고쳐지기까지의 시간입니다. 숫자 다음에 시간 단위가 올 수 있습니다( 예: 기본: |
| |
| |
| CyberArk 명령줄 인터페이스 구성 |
| |
|
AWS KMS 암호
Amazon KMS에서 보안 비밀을 검색하려면 aws-kms
섹션에서 다음 속성을 설정할 수 있습니다. 모든 필드가 필요한 것은 아닙니다. 예를 들어 인코딩된 KMS 문자열을 제공하려면 data
, file
또는 http
이 필요합니다.
YAML 키 | 설명 |
---|---|
유형: 문자열 | 해독할 Base64로 인코딩된 KMS 문자열 |
유형: 문자열 | 복호화할 Base64로 인코딩된 KMS 문자열이 포함된 파일 경로 |
유형: YAML 속성 | Base64로 인코딩된 KMS 문자열을 해독하도록 요청하는 데 사용할 HTTP 구성입니다. 자세한 내용은 Vault |
유형: 문자열 | AWS 자격 증명 파일 경로 |
유형: 문자열 | AWS 구성 파일 경로 |
유형: 문자열 | AWS KMS 리전 |
유형: 문자열( | 비밀 값 형식:
|
다음 예에서는 AWS KMS에서 일반 암호 문자열을 검색할 수 있습니다. 제공된 data
인코딩된 문자열에서 암호를 해독해야 합니다.
variables: myPassword: aws-kms: data: T0hBSStGTEVY region: ap-southeast-2 credential_file: "./my-aws-credentials-file" config_file: "./my-aws-config-file" type: plain
금고 비밀
Vault는 Vault에 연결하는 데 사용되는 HTTP 구성이 포함된 http
필드를 활성화해야 합니다. http 항목에는 다음 항목이 포함될 수 있습니다.
YAML 키 | 설명 |
---|---|
유형: 문자열 | 데이터를 요청할 URL |
유형: YAML 속성 | TLS 구성 속성 사용 |
유형: YAML 맵 | 요청 헤더 |
tls_config 속성
중요
비밀은 점 표기법을 사용해야 합니다(예: ${mysecret.nestedkey}
.
YAML 키 | 설명 |
---|---|
유형: 부울 | TLS 활성화 기본: |
유형: 부울 | 서버의 인증서 체인 및 호스트 확인 건너뛰기 기본: |
유형: UInt16 | 허용되는 최소 SSL/TLS 버전 기본값: |
유형: UInt16 | 허용되는 최대 SSL/TLS 버전 기본값: |
유형: 문자열 | TLS 인증서
|
다음 예에서는 보안 서버에서 Vault 토큰을 사용하여 비밀을 검색하고 서버 인증서 확인을 건너뜁니다.
variables: mydata: vault: http: url: https://my.vault.host/v1/newengine/data/secret headers: X-Vault-Token: my-vault-token tls_config: insecure_skip_verify: true
CyberArk 명령줄 인터페이스
CyberArk 명령줄 인터페이스(CLI)에서 비밀을 검색하려면 다음 구성을 사용하십시오. 모든 키가 필요합니다.
YAML 키 | 설명 |
---|---|
유형: 문자열 | CyberArk CLI 실행 파일의 전체 경로 기본: "" |
유형: 문자열 | 비밀 보유자의 애플리케이션 ID 기본: "" |
유형: 문자열 | 비밀이 담긴 금고 기본: "" |
유형: 문자열 | 비밀이 들어 있는 폴더 기본: "" |
유형: 문자열 | 비밀이 연결된 개체 기본: "" |
다음 예에서는 명령줄 인터페이스를 사용하여 CyberArk 암호를 검색합니다.
variables: credentials: cyberark-cli: cli: /full/path/to/clipasswordsdk app-id: my-appid safe: my-safe folder: my-folder object: my-object
사이버아크 REST API
CyberArk REST API를 사용하여 비밀을 검색하려면 HTTP 구성이 포함된 http
키가 있어야 합니다. http
키에는 다음 하위 키가 포함되며 url
만 필요합니다.
YAML 키 | 설명 |
---|---|
유형: 문자열 | 데이터를 요청할 URL, 이 키가 필요합니다. 기본값: 없음 |
유형: YAML 속성 | TLS 구성 속성 사용 |
유형: YAML 맵 | 요청 헤더 |
다음 예는 서버 인증서 확인을 건너뛰고 CyberArk REST API를 사용하여 비밀을 검색합니다.
variables: credentials: cyberark-api: http: url: https://hostname/AIMWebService/api/Accounts?AppID=myAppID&Query=Safe=mySafe;Object=myObject tls_config: insecure_skip_verify: true
위의 예를 참조하여 다음과 같이 사용자 이름과 비밀번호를 호출합니다.
USERNAME: ${credentials.user} PASSWORD: ${credentials.password}
참고: Microsoft SQL Server의 경우 Windows 인증 사용자 로그인을 사용하는 경우 도메인 앞에 USERNAME
붙여야 합니다. 예를 들어:
USERNAME: <domain>\${credentials.user}
New Relic CLI 난독화
중요
가능하면 단순한 난독화 대신 지원되는 비밀 공급자를 사용하는 것이 좋습니다.
구성 파일에 난독화 키가 포함되지 않도록 환경 변수를 정의하려면 아래 지침을 참조하세요.
명령 프롬프트 창이 예기치 않은 방식으로 인용 부호를 처리할 수 있으므로 명령 프롬프트 창 대신 Windows 호스트에서 Powershell을 사용하십시오.
팁
Infrastructure Agent 1.14.0 이상이 필요합니다.
New Relic CLI obfuscate 명령을 사용하여 인프라 에이전트 또는 온-호스트 통합 구성 파일의 민감한 정보를 숨길 수 있습니다.
단계:
- 모든 호스트(개발 호스트일 수 있음)에 New Relic CLI를 설치합니다 .
- 난독화된 값을 생성하려면 CLI obfuscate 명령 을 실행하십시오.
newrelic agent config obfuscate --value '<plain_text_config_value>' --key '<obfuscation_key>'
- 아래 예와 같이 cli 명령의 결과를
obfuscated
섹션의text
인수에 복사합니다. - 구성 YML 파일에서 여러 값을 참조해야 하는 경우 JSON 블록을 난독화할 수 있습니다. Windows 호스트에서 백슬래시를 사용하여 따옴표
""
를 이스케이프해야 할 수도 있습니다. 예:'{\"attribute\":\"value\"...
. 또한 명령 프롬프트 창이 예기치 않은 방식으로 인용 부호를 처리할 수 있으므로 명령 프롬프트 창보다 Windows 호스트에서 Powershell을 사용하십시오.
newrelic agent config obfuscate --value '{"attribute":"value","attribute2":"value2"}' --key '<obfuscation_key>'
YAML 키 | 설명 |
---|---|
열쇠 유형: 문자열 | New Relic CLI를 사용하여 일반 텍스트 값을 난독화할 때 사용되는 문자열 기본값: 없음 |
유형: 문자열 | newrelic-cli 명령의 출력 기본값: 없음 |
Integrations configuration example
다음 예에서는 뉴렐릭 CLI를 사용하여 난독화된 Nginx 사용자 및 비밀번호를 검색할 수 있습니다. 난독화된 값이 JSON 블록이었으므로 이 예에서는 자격 증명을 검색할 때 점 표기법을 사용합니다.
variables: creds: obfuscated: key: 'random_key_used_in_cli' secret: 'obscured_output_from_cli'integrations: - name: nri-nginx env: METRICS: "true" STATUS_URL: http://${creds.user}:${creds.password}@example.com/status STATUS_MODULE: discover REMOTE_MONITORING: true interval: 30s labels: env: production role: load_balancer
아래 예와 같이 난독화 인수에 환경 변수를 사용하는 것이 좋습니다.
variables: creds: obfuscated: key: {{OBFUSCATION_KEY}} secret: {{OBFUSCATION_TEXT}}integrations: - name: nri-nginx env: METRICS: "true" STATUS_URL: http://${creds.user}:${creds.password}@example.com/status STATUS_MODULE: discover REMOTE_MONITORING: true interval: 30s labels: env: production role: load_balancer
Agent configuration example
이 예에서는 프록시 세부 정보(사용자, 비밀번호 및 호스트)가 포함된 문자열을 검색할 수 있습니다.
variables: obfuscated_proxy: obfuscated: key: 'random_key_used_in_cli' secret: 'obscured_output_from_cli'
proxy: ${obfuscated_proxy}
사용자 지정 명령
중요
command
구성에는 인프라 에이전트 1.41.0
이상이 필요합니다. 에이전트에 환경 요구 사항에 따라 구성된 command
를 실행하는 데 필요한 권한이 있는지 확인하십시오.
동일한 호스트에서 사용 가능한 사용자 지정 명령에서 에이전트 또는 통합 구성을 로드할 수 있습니다. 인프라 에이전트는 구성이 처음에 command
출력에서 로드되어야 하는 시기를 감지하고 ttl
새로고침 시간을 기준으로 값을 업데이트된 상태로 유지합니다.
명령의 예상 출력 형식은 JSON 또는 문자열입니다.
JSON
다음 JSON 구조는 정의된 command
의 기본 출력(stdout)으로 예상됩니다.
{ "data": { "myKey": "myValue" }, "ttl": "24h"}
- 최상위
data
필드가 필요합니다. - 최상위
ttl
필드가 필요합니다.
그런 다음 ${myVariable.key}
표기법을 사용하여 모든 구성 파일에서 사용할 수 있습니다. 다음 예에서는 domain
매개변수를 사용하여 my-custom-auth
명령을 실행한 다음 결과 token
을 에이전트 구성으로 로드합니다.
variables: myToken: command: path: '/path/to/my-custom-auth-json' args: ["--domain", "myDomain", "--other_param", "otherValue"] ttl: 24h # my-custom-auth output example: {"data":{"token":"XXXXYYYYZZZZ"}, "ttl": "24h"}# the `token` result can be included as ${myToken.token} in any configuration. http: headers: "Proxy-Authorization": ${myToken.token}
문자열(텍스트/일반)
명령 출력이 일반 문자열인 경우 ${myVar}
표기법을 사용하여 구성에서 참조할 수 있습니다.
예시:
variables: myToken: command: path: '/path/to/my-custom-auth-string' args: ["arg1", "arg2"] ttl: 24h # my-custom-auth output example: "XXXXYYYYZZZZ"# the `token` result can be included as ${myToken} on any configuration. http: headers: "Proxy-Authorization": ${myToken}