Docker Secret Nedir? Nasıl Kullanılır?
4 min read

Docker Secret Nedir? Nasıl Kullanılır?

Docker secret, Swarm dağıtımlarında hassas verilerinizin güvenliğini sağlar.
Docker Secret Nedir? Nasıl Kullanılır?
Photo by Fer Troulik / Unsplash

Docker secret, Docker swarm mode dağıtımlarında kullanılan gizli verilerin güvenli bir şekilde depolanması ve dağıtılması için kullanılan bir özelliktir. Secrets, Dockerfiles veya Docker Compose dosyalarında tanımlanmaz ve direk olarak Docker API veya CLI aracılığıyla yönetilir. Secrets, verilerin açık olarak görülmemesi veya Docker swarm dağıtımı içindeki servisler veya konteynerler arasında güvenli bir şekilde paylaşılmasını sağlar.

Docker swarm secrets, Docker swarm modda çalışan servislerin ve konteynerlerin güvenli veri erişimi için kullanılabilir. Kullanım amaçlarını listelersek;

  1. Güvenli veri saklama: Örneğin, parola, token veya sertifika gibi gizli verileri saklamak için kullanılabilir.
  2. Veri paylaşımı: Docker swarm dağıtımı içinde birden fazla servis veya konteyner arasında gizli verilerin paylaşılması için kullanılabilir.
  3. Dynamic Configuration: Servislerin ve konteynerlerin runtime'da konfigurasyonlarını dinamik olarak güncellemesi için gizli veriler kullanılabilir.
  4. Güvenli dosya erişimi: Docker swarm dağıtımı içindeki servislerin veya konteynerlerin güvenli bir şekilde dosya erişimi yapması için kullanılabilir.
  5. API Key management: API anahtarlarının güvenli bir şekilde saklanması ve paylaşılması için kullanılabilir.

1. Docker Swarm Secret Komutları

Docker secret komutunun çeşitli parametreleri vardır ve aşağıdaki kod örnekleri bu parametreleri açıklar:

1.1. Secret Oluşturma:

docker secret create [OPTIONS] SECRET [file|-]

Parametreler:

  • SECRET: Oluşturulacak secret'ın adı.
  • file: Oluşturulacak secret verisinin bulunduğu dosya yolu.
  • -: Standart giriş (STDIN) aracılığıyla secret verisi girilir.

Örnek:

echo "secret_password" | docker secret create mysecret -

1.2. Secret Listeleme:

docker secret ls [OPTIONS]

Parametreler:

  • -f, --filter: Listede gösterilen secret'ları filtrelemek için kullanılan filtre.
  • -q, --quiet: Sadece secret'ların ID'lerini gösterir.

Örnek:

docker secret ls

1.3. Secret Görüntüleme

docker secret inspect [OPTIONS] SECRET [SECRET...]

Parametreler:

  • SECRET: İncelenecek secret'ın adı.

Örnek:

docker secret inspect mysecret

1.4. Secret Silme

docker secret rm [OPTIONS] SECRET [SECRET...]

Parametreler:

  • SECRET: Silinecek secret'ın adı.

Örnek:

docker secret rm mysecret

Bu örnekler, Docker secret komutunun farklı parametrelerini gösterir ve nasıl kullanabileceğinizi açıklar. Herhangi bir veri gizliliği ihtiyacı olan uygulama için farklı parametreler ve konfigürasyonlar kullanılabilir.

2. Docker Swarm Secret Nasıl Kullanılır?

Docker secret'lar, Docker CLI aracılığıyla yönetilir. Aşağıdaki kodlar, Docker secret nasıl oluşturulabileceği ve kullanılabileceği hakkında bir fikir verir:

1. Secret oluşturma: Aşağıdaki kod, terminalden gireceğiniz (STDIN) girdi ile bir secret oluşturmak için kullanılabilir.

echo "secret_password" | docker secret create mysecret -

Parametreler:

  • mysecret: Oluşturulacak secret'ın adı.
  • secret_password: Depolanacak gizli veri.

Eğer şifreleceğiniz veri dosyadaysa, secret'ı dosya belirterek de oluşturabilirsiniz.

docker secret create mysecret /path/to/secret_file.txt

2. Secret dağıtımı: Aşağıdaki kod, bir secret'ı bir servise dağıtmak için kullanılabilir.

docker service create --name myservice --secret mysecret myimage

Parametreler:

  • myservice: Dağıtılacak servisin adı.
  • mysecret: Dağıtılacak secret'ın adı.
  • myimage: Dağıtılacak servisin Docker image'ı.

3. Secret erişimi: Aşağıdaki kod, bir secret'ın içeriğine erişmek için kullanılabilir.

docker exec -it mycontainer sh
cat /run/secrets/mysecret

Parametreler:

  • mycontainer: Secret'ın erişileceği konteynerin adı.
  • mysecret: Erişilecek secret'ın adı.
🔎
Oluşturulan tüm secret'lar, dağıtılan Linux container'ların /run/secrets dizininde kendi adıyla oluşturulan dosyada tutulur. Eğer container Windows ise C:\ProgramData\Docker\Secrets dizininde tutulur.

3. Çalışan Swarm Service'e Nasıl Secret Eklenir ve Çıkarılır?

Docker Swarm üzerinde çalışan mevcut bir servise secret eklemek veya çıkarmak için aşağıdaki adımları takip edin:

1. Secret'ı Docker Swarm'a ekleyin.

docker secret create mysecret /path/to/secret_file.txt

2. Servisi güncellemek için docker service update komutunu kullanın.

  • Servise secret eklemek için;
docker service update --secret-add mysecret myservice
  • Servisten secret çıkarmak için;
docker service update --secret-rm mysecret myservice

Parametreler:

  • mysecret: Eklenecek secret'ın adı.
  • myservice: Güncellenecek servis adı.

Bu komut, mevcut bir servise secret ekler ve aynı zamanda, çalışan bir konteyner içinde secret'ın kullanılabilir olduğunu garantiler.

4. Çalışan Stack Compose Dosyasında Secret Kullanımı

Docker compose dosyasınızda parola gibi sensitive verileri açıkça yazmak yerine secretları kullanarak verilerinizin güvenliğini sağlayabilirsiniz. Docker Stack Compose dosyasında secret kullanmak için aşağıdaki adımları izleyebilirsiniz:

Eğer Docker Swarm tarafından docker secret create komutuyla oluşturulmuş bir secret'ı compose dosyanıza koymak istiyorsanız aşağıdaki örneği inceleyebilirsiniz.

version: "3.7"
services:
  myservice:
    ...
    secrets:
      - mysecret

secrets:
  mysecret:
    external: true

Docker Compose dosyasında secrets sekmesinde, external: true parametresi, Docker Swarm tarafından oluşturulmuş bir secret'ın tanımlandığını belirtir. Bu parametre, Docker Swarm tarafından oluşturulmuş bir secret'ın dosya yolu olmaksızın, doğrudan Docker Swarm tarafından yönetildiğini gösterir.

Fakat secret'ı daha önce oluşturmamış ve dosya yolu ile stack oluşturma esnasında oluşturmak istiyorsanız aşağıdaki örneği inceleyebilirsiniz.

version: "3.7"
services:
  myservice:
    ...
    secrets:
      - mysecret
      - myothersecret

secrets:
  mysecret:
    file: /path/to/secret_file.txt
  myothersecret:
  	file: /path/to/other_secret_file.txt

Bu iki yönemden biri ile compose dosyanızı oluşturduktan sonra stack'i deploy edip kullanmaya başlayabilirsiniz.

docker stack deploy -c /path/to/docker-compose.yml mystack

Bu konfigürasyon dosyaları, Docker Compose dosyasında secret tanımlamayı ve Docker Swarm tarafından secret'ın servise dağıtılmasını sağlar. Bu şekilde, secret servise ve çalışan konteynerlere güvenli bir şekilde yerleştirilir.

Son olarak bir kullanım senaryosu üzerinden secretları sonlandıralım.

version: "3.7"
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
    secrets:
      - db_root_password

secrets:
  db_root_password:
    external: true

Parametreler:

  • db: Veritabanı servisi.
  • mysql:5.7: Veritabanı için kullanılan Docker image.
  • MYSQL_ROOT_PASSWORD_FILE: Veritabanı kök parolasının yolu.
  • db_root_password: Secret'ın adı.

Bu Compose dosyası, Docker Swarm tarafından yönetilen bir MySQL veritabanı ayağa kaldırır ve root parolasını güvenli bir şekilde Secret yoluyla sağlar. external: true parametresi, dışarıdan oluşturulmuş bir secret'ı tanımlar ve kullanmasını sağlar.