OIDC로CircleaCI에서HashiCorp Vault와 인증+비밀방문Orb을 간단히 써보십시오
이걸 사용하면 CircleaCI 환경 변수에 정적으로 저장된 비밀 졸업을 할 수 있다.
CircleaCI 지원 OIDC
요즘 지지를 받고 있는 것 같아요.
GiitHub Actions와 GiitLab에서는 이전부터 지원되어 왔으며, GiitHub Action의 예는 이전에도 글에 기록되어 있습니다.
이번에는 CircleaCI, Orb로 같은 워크플로우를 구현합니다.
Organization ID 확인
Vault 측에서 OIDC의 설정을 구성하기 위해 사용해야 하는 CircleaCI 계정의 Organization ID입니다.Organization ID를 확인하려면 CircleaCI의 콘솔에서
Organization Settings
페이지까지 확인할 수 있습니다.※ Context를 하나 이상 만들지 않으면 Organization ID가 표시되지 않습니다.
Vault 설정
기본적으로 저번에 썼어요. GiitHub Actions OIDC 때와 동일합니다.
JWT Auth Method 사용
$ vault auth enable jwt
Success! Enabled jwt auth method at: jwt/
활성화된 JWT authmethod config의 bound_issuer
및 oidc_discovery_url
필드를 설정합니다.방금 확인한 Organization ID가 필요합니다.자신의 물건으로 바꾸세요${CIRCLECI_ORG_ID}
.$ vault write auth/jwt/config \
bound_issuer="https://oidc.circleci.com/org/${CIRCLECI_ORG_ID}" \
oidc_discovery_url="https://oidc.circleci.com/org/${CIRCLECI_ORG_ID}"
Success! Data written to: auth/jwt/config
JWT auth backend role 만들기
$ vault write auth/jwt/role/circleci-dev -<<EOF
{
"role_type": "jwt",
"user_claim": "sub",
"bound_claims": {
"aud": "${CIRCLECI_ORG_ID}"
},
"policies": ["circleci-dev"],
"ttl": "1h"
}
EOF
이용 가능한 클라임의 종류는 GiitHub 등에 비해 적은 것 같지만 일람표는 아래에서 확인할 수 있다.이번 예
aud
에는 bound_claims
조건에만 포함되며, 자신의 Orgnization ID로부터 요청이 들어왔다면 모두 수용한다.조건을 더 줄이려면 oidc.circleci.com/project-id
로 대체할 수 있고 특정 프로젝트 ID로부터의 요청과 같은 제어만 믿을 수 있다.이번에 상세한 내용을 생략했지만 상기 예에서
policies
에서 지정한 바와 같이 circleci-dev
이 ACL Policy는 별도로 존재하고 목적의 secret path에 필요한perrmission은 정확한grant의 전제 조건이다.$ vault kv put secret/circleci/dev password=foo
$ vault policy write circleci-dev -<<EOF
path "secret/data/circleci/dev" {
capabilities = ["read"]
}
EOF
실제 Orb 사용
그러면 실제 워크플로우에서Vault까지 OIDC 인증을 통해 임의의 비밀을 얻으려고 시도한다.
description: |
Install Vault binary, authenticate using OIDC, and get secrets.
usage:
version: 2.1
orbs:
orb-hashicorp-vault-cli: smaeda-ks/orb-hashicorp-vault-[email protected]
jobs:
my-job:
machine: true
steps:
- checkout
# Install Vault
- orb-hashicorp-vault-cli/install
# Authenticate using OIDC and obtain token
# This will automatically set VAULT_TOKEN env variable
- orb-hashicorp-vault-cli/auth-oidc:
vault-address: "http://localhost:8200"
vault-role: "circleci-dev"
- run:
name: Get secret
command: |
# export secret using $BASH_ENV
# so it can be referenced by subsequent steps within the job
FOO=$(vault kv get -field=password secret/circleci/dev)
echo "export SECRET_FOO=${FOO}" >> $BASH_ENV
workflows:
use-my-orb:
jobs:
- my-job
이번에 제작된 Orb는 install
와 auth-oidc
두 가지 지령만 제공한다.install
명령을 사용한 후 현재 사용되고 있는 excutor에서Vault의 실행 파일을 다운로드하여 경로를 통과합니다.이렇게 하면 이후 stepvault
에서 명령을 사용할 수 있다.auth-oidc
명령을 사용한 후,Circleci에서 추출한 JWT 토큰을 사용하여 원격Vault와 인증하여token을 획득한다.이때 획득한token은 자동으로 환경 변수VAULT_TOKEN
로 설정되므로 auth-oidc
를 실행한 후 Vault에 로그인한 상태vault
에서 명령을 사용할 수 있습니다.또한
vault-address
와 vault-role
는 Required 매개 변수이기 때문에 지정해야 합니다.vault-role
미리 작성된 JWT auth backend의 role을 지정합니다.이번 경우circleci-dev
죠.Namespace 등도 유상 Vault를 사용할 때 지정을 선택할 수 있습니다. 자세한 내용은 설명서를 참조하십시오.이 두 명령을 실행한 후 상기 예에서 마지막 step에서
secret/circleci/dev
path에 저장된 password
데이터를 얻었다.실제 워크플로우에서 이것은 후속 step부터 사용하죠.기타
이번에 제작된 Orb은 제 개인적인 Namespace와 관련이 있습니다. Circleci에서 verify를 받은 것이 아니기 때문에 CircleaCI의 org 설정에서 Orb의 사용을 인정하지 않은 것을 미리 허가해야 합니다.
Reference
이 문제에 관하여(OIDC로CircleaCI에서HashiCorp Vault와 인증+비밀방문Orb을 간단히 써보십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/jrsyo/articles/80556089b3591f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)