호드는 자체 환경설정 파일에 저장되거나 외부 소스에서 획득할 수 있는 암호를 얻기 위해 API를 구현합니다. 호드를 통해 데이터를 정렬하면 호드의 권한 모델을 사용하여 액세스를 제어할 수 있으며, 자동화된 프로세스에서 해당 프로세스를 요청한 사용자를 가장할 수 있습니다.
현재 호드는 즉시 사용할 수 있는 외부 암호 제공자로 AWS Parameter Store만 지원하지만, ISecretProvider 인터페이스를 통해 다른 구현도 추가할 수 있습니다.
암호 환경설정
암호는 globals.json 파일의 secrets 목록에서 정의됩니다. 각 항목에는 암호 식별자(id), 키-값 쌍 세트(data), 액세스할 수 있는 사용자를 제어하는 ACL이 포함되어 있습니다.
sources 배열에 항목을 추가하여 외부 제공자에서 추가 키와 값을 병합할 수 있습니다. 여기의 각 항목에는 암호를 획득하는 출처인 제공자의 이름(name)과 제공자별 구문에서 암호를 찾는 데 사용되는 경로(path)가 포함되어 있습니다.
외부 제공자의 암호는 두 가지 형식을 취할 수 있으며, format 프로퍼티로 결정됩니다.
text암호는 지정된key프로퍼티를 사용하여 암호의 키/값 쌍 세트에 추가되는 단순한 스트링 값입니다.json암호는 JSON 오브젝트로 파싱되어 프로퍼티 이름을 키로 사용해 암호의 키/값 쌍으로 병합됩니다.
예시 암호는 다음과 같이 환경설정할 수 있습니다.
"secrets": [
{
"id": "horde-secrets",
// Some hard-coded property values
"data": {
"aws-region": "us-east-1"
},
// 일부 값은 AWS Parameter Store에서 읽습니다.
"sources": [
// AWS Parameter Store에서 단일 암호를 읽고 'aws-secret-access-key'에 할당합니다.
{
"provider": "AwsParameterStore",
"key": "aws-secret-access-key",
"path": "name-of-secret-in-parameter-store"
},
// AWS Parameter Store에서 JSON 오브젝트를 읽고 모든 키/값 쌍을 이 암호에 병합합니다.
{
"provider": "AwsParameterStore",
"format": "json",
"path": "name-of-secret-in-parameter-store"
},
],
// 호드 에이전트만 액세스하도록 허용합니다.
"acl": {
"entries": [
{
"claim": {
"type": "http://epicgames.com/ue/horde/role",
"value": "agent"
},
"actions": [
"ViewSecret"
]
}
]
}
}
]
암호는 사용자가 요청 시 외부 제공자에서 쿼리되며, 호드에서 캐시되지 않습니다.
암호 사용하기
가장 일반적인 암호 사용 사례는 빌드 자동화 파이프라인 중에 사용하는 것입니다. 이 시나리오에서 호드 서버 URL 및 크리덴셜은 호드 에이전트에 의해 자동으로 주입된 환경 변수에서 가져오며, 추가 환경설정을 거의 하지 않아도 파이프라인을 통해 작업을 시작하는 사용자를 대신하여 암호를 요청할 수 있습니다.
다음은 암호를 사용하는 일반적인 3가지 방법입니다.
1. Horde-GetSecrets BuildGraph 작업 사용하기
이 작업은 파일을 파라미터로 받아서 읽고, 호드에서 가져온 값을 사용하여 {{ secret-name.property }} 형식으로 암호를 확장한 후 다시 작성합니다. 기존 파일을 업데이트하는 대신 BuildGraph 프로퍼티에 템플릿을 넣어 다음과 같이 확장할 수도 있습니다.
<Property Name="AwsEnvironmentText" Multiline="true">
AWS_REGION={{horde-secrets.aws-region}}
AWS_ACCESS_KEY_ID={{horde-secrets.aws-access-key-id}}
AWS_SECRET_ACCESS_KEY={{horde-secrets.aws-secret-access-key}}
</Property>
<Horde-GetSecrets File="credentials.txt" Text="$(AwsEnvironmentText)"/>
2. Horde-SetSecretEnvVar BuildGraph 작업 사용하기
이 작업은 런타임 시 환경 변수를 암호 값으로 설정합니다. 환경 변수는 시스템 수준에서 설정되지 않고 자손 프로세스에서 상속되므로, 현재 단계가 끝날 때까지 환경 변수에 해당 암호가 포함됩니다.
<Horde-SetSecretEnvVar Name="AWS_SECRET_ACCESS_KEY" Secret="horde-secrets.aws-secret-access-key"/>
3. 호드 API 사용하기
HTTP 암호 엔드포인트는 호드의 API 문서에 나열되어 있으며, AutomationTool 에는 런타임 시 쿼리하기 위해 다음과 같은 유틸리티 메서드가 포함됩니다.
IReadOnlyDictionary<string, string> secret = await CommandUtils.GetHordeSecretAsync(new SecretId("my-secret-name"));
string propertyValue = await CommandUtils.GetHordeSecretAsync(new SecretId("my-secret-name"), "propertyName")