Variable'lar#
Variable'lar step config'lerinde {{.KEY}} olarak kullanılan değerlerdir. Altyapı > Değişkenler sayfasında Yeni değişken ile oluşturulur. Bir repo'ya özel variable'ları repo binding sayfasından da ekleyebilirsiniz.
- Key
UPPER_SNAKE_CASEbiçimindedir, örneğinAPI_BASE_URL. Oluşturulduktan sonra değiştirilemez; silip yeniden oluşturmanız gerekir. - Bir step config'inde
{{.API_BASE_URL}}olarak kullanılır.
- name: Deploy
kind: K8S_DEPLOY
config:
image: "{{.ImageTag}}"
env:
API_BASE_URL: "{{.API_BASE_URL}}"
Tipler#
| Tip | Değer nerede durur | Notlar |
|---|---|---|
Düz (PLAIN) |
EJO'da, açık metin. | Gizli olmayan ayarlar için. |
Secret (SECRET) |
EJO'da, şifreli. | Log'larda maskelenir. Ayrıca {{.KEY_FILE}} ile değeri içeren bir dosyanın yolu olarak kullanılabilir. |
K8s Secret (K8S_SECRET) |
Cluster'ınızdaki bir Kubernetes Secret'ında. | Namespace, Secret name ve Secret key ile gösterilir. Değeri agent okur. |
External secret (EXTERNAL_SECRET) |
Kendi secret yöneticinizde (Vault, AWS Secrets Manager, Azure Key Vault, CyberArk). | Değeri agent kendi kimliğiyle okur; EJO değeri hiç görmez. |
Kaydedilmiş bir secret'ın değeri tekrar gösterilmez. Düzenlerken değer alanını boş bırakırsanız mevcut değer korunur.
İpucu: Bir dosya bekleyen araçlar için (örneğin bir kubeconfig ya da sertifika)
{{.KEY_FILE}}kullanın. Değer agent'ta geçici bir dosyaya yazılır ve step'e dosyanın yolu verilir.
Kapsamlar ve öncelik#
| Kapsam | Nerede geçerli |
|---|---|
| Global — her environment | Tüm repo'lar ve environment'lar. |
| Repo | Yalnızca o repo binding'i. Aynı key'e sahip global variable'ı override eder. |
| Environment | Yalnızca o environment'taki job'lar. Aynı key'e sahip global ve repo variable'larını override eder. |
Aynı key birden fazla kapsamda tanımlıysa öncelik sırası şöyledir: global < repo < environment. En spesifik kapsam kazanır.
Uyarı: Fork'tan açılan PR'lar
SECRET,K8S_SECRETveEXTERNAL_SECRETdeğerlerini almaz. Bu tür PR'larda bu değerlere ihtiyaç duyan step'ler fail olabilir.
Harici secret store'lar#
Secret'larınız zaten HashiCorp Vault, AWS Secrets Manager, Azure Key Vault, CyberArk Conjur veya CyberArk Central Credential Provider'da duruyorsa onları EJO'ya kopyalamanız gerekmez.
Ön koşullar#
- Admin rolü.
external_secretsyeteneğine sahip güncel bir agent. Eski agent'larda run "upgrade the agent" mesajıyla durur.- Agent'ın secret yöneticinize kendi kimliğiyle erişebilmesi: bir Kubernetes service account, bir IAM rolü ya da agent host'undaki bir token dosyası.
Kurulum#
- Ayarlar > Secret store'lar sayfasında Yeni secret store oluşturun.
- Bir ad (örneğin
vault-prod), bir provider (VAULT,AWS_SM,AZURE_KV,CYBERARK_CONJUR,CYBERARK_CCP) ve bağlantı ayarlarını girin. Bağlantı ayarları gizli olmayan bilgilerdir: Vault adresi, AWS region'ı, Key Vault URL'i gibi. Kimlik bilgisine benzeyen bir alan (token,password,secret_idgibi) reddedilir. - İzin verilen environment'lar listesine store'u kullanabilecek environment'ları ekleyin. Liste varsayılan olarak boştur; listede olmayan bir environment'taki run store'u kullanamaz ve hata mesajı store'u ve environment'ı adlandırır.
- Bağlantıyı test et ile agent'ın store'a erişebildiğini kontrol edin.
- Altyapı > Değişkenler sayfasında tipi External secret olan bir variable oluşturun ve store'u, path'i ve field'ı seçin.
Değer SECRET gibi davranır: log'larda maskelenir ve {{.KEY_FILE}} olarak da kullanılabilir. EJO her run'ın hangi secret versiyonunu kullandığını deployment sayfasında gösterir; değeri ya da hash'ini değil.
Pipeline identity (OIDC token'ları)#
EJO, pipeline'lar için bir OpenID Connect sağlayıcısı olarak çalışabilir. Bir SHELL step'i, hangi servis, environment ve deployment'a ait olduğunu söyleyen kısa ömürlü bir JWT ister. Bu token'a güvenen bulut sağlayıcıları ve secret store'lar saklanmış bir secret yerine onu kabul eder.
- name: Deploy
kind: SHELL
image: amazon/aws-cli:2.17.0
id_tokens:
AWS_JWT:
aud: sts.amazonaws.com
config:
command: aws sts get-caller-identity
- Token step'e
$AWS_JWTve dosya olarak$AWS_JWT_FILEşeklinde verilir ve log'larda maskelenir. Mümkünse dosyayı kullanın. audsabit bir değer olmalıdır; template kullanılamaz.- Token'ın ömrü varsayılan olarak 10 dakika, en fazla 1 saattir.
- Fork'tan açılan PR'lar token almaz.
- Token'ın
subclaim'iservice:<servis>:env:<environment>biçimindedir. PR run'larında sonuna:pull_requesteklenir. Güven kurallarını tamsubdeğerine bağlayın. - Discovery belgesi
https://acme.ejocloud.com/.well-known/openid-configurationadresindedir.
Ayarlar > Pipeline identity sayfası (yalnızca admin) token ömrünü, izin verilen audience listesini ve imza anahtarlarını yönetir; AWS, GCP, Azure ve Vault için örnek güven politikalarını da gösterir.
Vault, Conjur, AWS Secrets Manager ve Azure secret store'ları agent'ın kendi kimliği yerine bu token'la giriş yapabilir: store ayarlarında identity alanını ejo_pipeline_token yapın ve audience belirleyin.