도구 체인에서 시크릿 관리
CI 및 CD 도구 체인의 도구 통합에는 비밀번호, API 키, 인증서 또는 기타 토큰과 같은 비밀이 필요합니다. 예를 들어 IBM Cloud® API 키는 IBM Cloud 에 로그인하는 것과 같은 기본적인 파이프라인 작업을 수행합니다. 마찬가지로 서비스 ID API키는 Cloud Object Store 인스턴스의 버킷에 증거를 씁니다.
보안상의 이유로, 이러한 시크릿은 사용자가 실제 도구 체인 자동화 요구사항보다 더 많은 액세스 권한을 갖는 경우가 많으므로 사용자의 ID 또는 계정을 공개하지 않아야 합니다. 개인의 ID 또는 계정과의 제휴는 "최소 권한"의 보안 원칙을 위반합니다. 또한 사람들이 종종 역할을 바꾸거나 심지어 회사를 옮기면 자격 증명을 제거해야 하므로 툴체인 자동화가 중단될 수 있습니다. 자동화 목적으로 특별히 연결된 ID를 사용함으로써 자동화와 자동화를 사용하는 사람 간의 업무를 분리할 수 있습니다.
대신 IBM Cloud 이외의 리소스(예: GitHub Enterprise )에 사용되는 비밀은 툴체인에 필요한 적절한 액세스 권한만 있는 기업 내 기능 ID에 연결해야 합니다. 마찬가지로 IBM Cloud 리소스에 대한 비밀은 IAM 서비스 ID 에 연결된 IAM 서비스 ID API 키에 연결되어 있어야 합니다. IAM 서비스 ID 액세스 권한은 툴체인에 필요한 최소한의 권한으로 범위를 지정해야 합니다.
이와 같은 신임 정보 관리는 안전하게 수행되어야 하며 시크릿 관리 우수 사례를 준수해야 합니다. 특히, 이는 IBM Cloud® Secrets Manager, IBM® Key Protect, 또는 HashiCorp Vault 와 같은 리소스에 툴체인 시크릿을 연결합니다.
툴체인 설정 및 파이프라인 사용자 인터페이스에서 제공되는 비밀 관리 기능을 통해 IBM Cloud® Secrets Manager, IBM® Key Protect 또는 HashiCorp Vault 에 대한 비밀 통합을 사용하여 볼트에 저장된 비밀을 선택할 수 있습니다. 시크릿 선택도구 대화 상자를 사용하여 도구 체인 또는 파이프라인 편집기는 CRN에 의해 (클라우드 자원 이름) 또는 이름에 의해구성된
바인드된 시크릿 통합에서 이름 지정된 시크릿을 선택할 수 있습니다. 이는 도구 체인 및 파이프라인 내에서 런타임 시 참조에 의해 분석됩니다. 시크릿을 선택하고 나면 CRN 또는 표준 시크릿 참조가 해당 도구 체인 또는 파이프라인 보안 특성에 삽입됩니다. 여기서 형식은 crn:v1:...secret:<secret-guid> 구성된 Secrets Manager 통합인 경우 CRN별또는
{vault::integration-name.secret-name} 지원되는 제공자를 사용하고 구성된 저장소 통합인 경우 이름별입니다.
표준 by name 참조 형식은 현재 시크릿 이름에 마침표 문자를 포함하는 시크릿을 분석하지 않습니다. 이 문자는 표준 경로의 각 섹션을 구분하는 데 사용되기 때문입니다.
사용되는 시크릿 참조의 유형 ( CRN 기준 또는 이름 기준) 에 관계없이 프론트 엔드 사용자 인터페이스 컴포넌트 및 시크릿 선택도구 대화 상자는 시크릿 참조만 사용합니다. CRN별 또는 이름별 시크릿 참조의 해석된 값은 프론트 엔드에 노출되지 않으며 항상 사용 가능한 허용된 권한 (IAM 권한 부여 및 액세스 정책을 사용하여 구성됨) 에 기반하여 도구 체인 및 파이프라인 내에서 런타임 시 동적으로 해석됩니다.
IBM Cloud® 내에서 툴체인 및 파이프라인에서 by CRN 및 이름별 시크릿 참조를 확인하는 동적 프로세스는 모든 지역의 모든 IBM Cloud® Secrets Manager 및 IBM® Key Protect 공급자 인스턴스에 대한 내부 가상 프라이빗 엔드포인트(VPE)를 사용하여 수행됩니다. 이렇게 하면 툴체인, 파이프라인, IBM Cloud® Secrets Manager 및 IBM® Key Protect 공급자 인스턴스 간의 모든 요청 및 응답 데이터가 경계 내 비공개 IBM Cloud 네트워크 내에 보관되며 공용 네트워크 채널을 통해 이동하지 않습니다.
도구 체인의 바인드된 시크릿 통합에서 하나씩 선택된 시크릿을 수동으로 선택하는 것 외에도 Secret Hint 사용 옵션을 사용할 수 있습니다. 이 옵션을 사용하면 짧은 양식 시크릿 참조인 제안된 시크릿 이름 ( Hints 라고도 함) 으로 도구 체인 템플리트를 사전 정의할 수 있습니다. 시크릿 힌트의 형식은 시크릿 통합 이름이 포함되지 않는 {vault::secret-name} 입니다. 이는 모든 필수 시크릿 이름이 toolchain.yml 에 미리 채워질 수 있고 도구 체인에 대해 구성된 시크릿 통합에 대해 이러한 이름이 자동으로 분석된다는 점에서 도구 체인 작성자에게 유연성을 제공합니다.
이전에 설명한 대로 Secrets Manager 가 CRN 으로 시크릿을 참조하도록 구성할 수 있습니다. 자세한 내용은 클라우드 리소스 이름(CRN)을 참조하세요. 올바른 권한 이 있는 경우 다른 계정의 Secrets Manager 인스턴스에서 시크릿을 참조할 수 있으므로 이 형식을 사용하면 유연성이 향상됩니다. 자세한 정보는 Secrets Manager 을 참조하십시오.
CI와 CD 모두에서 사용되는 비밀 번호는 다음과 같습니다:
Hint 은 툴체인에 바인딩된 사용 가능한 이름별 비밀번호 통합에서 동일한 이름의 첫 번째 일치하는 비밀번호에 대해 자동으로 확인되는 기본 권장 이름입니다.
DevSecOps 파이프라인 시크릿
| 시크릿 | 힌트 | 정보 |
|---|---|---|
| IBM Cloud API 키 | ibmcloud-api-key |
필수입니다: 필수: CI 및 CD IBM 퍼블릭 클라우드로 인증하고 다양한 작업을 수행하는 데 사용됩니다 |
| GPG 개인 키 | signing_key |
필수입니다: CI 전용 CI 파이프라인에서 빌드한 이미지에 서명하는 데 사용되는 인증서입니다 |
| IBM 개인용 작업자 서비스 API 키 | private-worker-service-api-key |
필수: CI 전용 서비스 ID API 키 텍톤 프라이빗 워커 서비스에서 배달 파이프라인 워크로드를 실행하는 데 사용됩니다 |
| GitHub 액세스 토큰 | git-token |
선택 사항: CI 및 CD GitHub 로 인증하고 리포지토리에 대한 액세스를 제공하는 데 사용됩니다 |
| Artifactory API 토큰 | artifactory-token |
필수: CI & CD 파이프라인 태스크에서 사용되는 이미지에 액세스하는 데 사용됩니다. |
| Slack 웹훅 | slack-webhook |
선택 사항입니다: CI & CD 이 웹훅은 Slack 도구 통합을 사용하여 도구 체인 상태 알림을 게시하기로 선택한 경우 필요합니다 |
| ServiceNow API 토큰 | servicenow-api-token |
필수: CD 전용 변경 관리 작업을 위해 지금 서비스에 액세스하는 데 사용됩니다. |
| HashiCorp Vault 역할 ID | role-id |
필수입니다: 필수: CI 및 CD HashiCorp Vault 서버로 인증하는 데 사용됩니다 |
| HashiCorp Vault 시크릿 ID | secret-id |
필수입니다: 필수: CI 및 CD HashiCorp Vault 서버로 인증하는 데 사용됩니다 |
| IBM Cloud Object Storage 작성기 API 키 | cos-api-key |
필수: CI & CD Object Storage 서비스로 인증하는 데 사용됩니다. 이 키에는 writer 권한이 있어야 합니다. |
| IBM Cloud Object Storage 리더 API 키 | backup-cos-api-key |
필수: CI & CD Object Storage 서비스로 인증하는 데 사용됩니다. 이 키에는 Reader 권한이 있어야 합니다. |
| SonarQube 비밀번호 또는 인증 토큰 | sonarqube-password |
선택 사항입니다: CI : SonarQube 소스 코드 분석기로 인증하는 데 사용됩니다 |
HashiCorp Vault 서버를 사용하는 경우 HashiCorp Vault 도구 통합이 AppRole 인증 방법 방법을 사용하는지 확인하세요. AppRole 인증 방법을 사용하는 경우 HashiCorp Vault 서버를 도구체인과 성공적으로 통합하려면
role-id 및 secret-id 이 필요합니다. role-id 및 secret-id 은 그 자체로 비밀이므로, 툴체인 워크플로에서 안전하게 검색하고 적용할 수 있도록 IBM Key Protect 도구 통합을 사용하여 저장하는 것이 좋습니다. 다른 모든 툴체인 비밀은 HashiCorp Vault 도구 통합을 사용하여 저장하고 검색해야 합니다.
파이프라인 환경 속성 git-token 이 설정되지 않은 경우, ibmcloud-api-key 은 기본적으로 Git Repos and Issue Tracking 액세스 토큰을 검색하는 데 사용됩니다. 하지만 ibmcloud-api-key에 git에 대한 액세스 권한이 없는 경우, git-token을 설정해야 합니다.
시크릿 저장소 구성
IBM Cloud 에서는 민감한 데이터를 보호하고 비밀을 중앙 집중화하는 데 도움이 되는 다양한 비밀 관리 및 데이터 보호 서비스 중에서 선택할 수 있습니다. IBM Cloud 시크릿 관리 에 설명된 대로 요구사항에 따라 볼트 통합 사이에서 선택할 수 있습니다. 이 문서에서는 전제 조건에 대한 정보와 힌트라고 하는 규정된 비밀 번호 목록을 사용하는 방법에 대해 설명합니다. 템플리트에서 힌트를 사용하여 도구 체인에 첨부된 다양한 볼트 통합에서 수동으로 선택할 필요 없이 미리 구성된 시크릿으로 도구 체인을 자동으로 채울 수 있습니다.
사용 IBM Cloud® Secrets Manager 를 사용하여 도구 체인의 일부인 API 키, 이미지 서명 또는 HashiCorp Vault 자격 증명과 같은 비밀을 안전하게 저장하고 적용합니다.
템플릿에는 다음 예시와 같은 HashiCorp Vault 도구 통합도 함께 제공됩니다:
HashiCorp Vault 을 사용하려면 다음 정보를 제공해야 합니다:
- 이름: 이 도구 통합의 이름입니다. 이 이름은 도구 체인에 표시됩니다.
- 서버 URL: HashiCorp Vault 인스턴스의 서버 URL입니다. 예를 들어,
https://<vault-service>.<org>.com:8200입니다. - 통합 URL: HashiCorp Vault 통합 타일을 클릭할 때 탐색할 URL입니다.
- 시크릿 경로: 시크릿이 HashiCorp Vault 인스턴스에 저장되는 마운트 경로입니다.
- 인증 방법: HashiCorp Vault 인스턴스의 인증 방법입니다.
AppRole을(를) 사용하십시오. - 역할 ID: 다른 인증 정보가 평가되는 AppRole을 선택하는 ID입니다.
- 비밀 ID: 모든 로그인에 기본적으로 필요한 자격증명(secret_id 사용)으로, 항상 비밀로 유지됩니다.
또한 템플리트는 IBM® Key Protect for IBM Cloud® 도구 통합과 함께 제공됩니다.
Key Protect 에 role id 및 secret id 를 미리 저장한 경우, 그림 2에 표시된 대로 도구 카드에 해당 시크릿을 포함하는 Key Protect 인스턴스를 선택할 수 있습니다. 이 작업이 완료되면 HashiCorp Vault 도구 카드의 역할 ID 및 비밀 ID 필드에서 키 아이콘을 클릭하고 선택기를
사용하여 해당 필드에 비밀을 적용할 수 있습니다.
마찬가지로 도구 체인에서 사용되는 다른 모든 비밀 번호에는 텍스트 필드에 키 아이콘이 첨부되어 있습니다. 동일한 선택기 컨트롤을 사용하여 나머지 모든 인스턴스에 HashiCorp Vault 비밀 번호를 적용할 수 있습니다.
다음에서 비밀 검색 IBM Cloud Secrets Manager
get_env 명령을 사용하여 비밀번호에 안전하게 액세스합니다. 이 방법은 로그에 노출하지 않고 비밀을 검색합니다.
지원되는 시크릿 유형
현재 Secrets Manager 에서 환경 속성에서 다음 유형의 비밀을 가져오는 것을 지원합니다:
-
임의
-
IAM 인증 정보
-
키-값
사용법:
export SECRET_VALUE=$(get_env "secret_key" "")
이 예에서는 다음과 같습니다.
-
secret_key은 비밀을 저장하는 데 사용되는 이름입니다. -
SECRET_VALUE나중에 사용할 수 있도록 검색된 비밀값을 저장합니다.
비밀 유형에 따라 get_env는 특정 값을 검색합니다:
임의의 비밀 검색
{
"name": "my-secret",
"secret_type": "arbitrary",
...
"payload": "The quick brown fox jumped over the lazy dog."
}
get_env 를 my-secret 과 함께 사용하면 payload 값을 검색합니다.
Iam_credentials 비밀 검색하기
{
"name": "my-iam-credentials",
"secret_type": "iam_credentials",
...
"api_key": "RmnPBn6n1dzoo0v3kyznKEpg0WzdTpW9lW7FtKa017_u",
"api_key_id": "ApiKey-dcd0b857-b590-4507-8c64-ae89a23e8d76",
"service_id": "ServiceId-bb4ccc31-bd31-493a-bb58-52ec399800be"
}
get_env 를 my-iam-credentials 과 함께 사용하는 경우 api_key 을 검색합니다.
키-값 비밀 검색
{
"name": "my-kv-secret",
"secret_type": "key-value",
...
"data": "{\"key\":\"value\"}"
}
get_env 을 my-kv-secret 과 함께 사용하는 경우 키-값 쌍 내부의 value 을 검색합니다