AWS CLI Kurulum ve Yapılandırma Rehberi

AWS CLI olmadan AWS yönetimi yapmak, fare olmadan bilgisayar kullanmaya benziyor. Konsol üzerinden her şeyi tıklayarak yapabilirsiniz, evet, ama bu yaklaşım otomasyon için hiç uygun değil ve üstelik can sıkıcı. AWS CLI ise tam anlamıyla bir güç aracı. Birkaç satır komutla S3 bucket oluşturmaktan EC2 instance başlatmaya, IAM politikalarını yönetmekten CloudFormation stack deploy etmeye kadar her şeyi terminal üzerinden yapabilirsiniz. Bu yazıda AWS CLI’ı sıfırdan kurup yapılandıracağız, farklı ortamlar için profil yönetimini ele alacağız ve gerçek dünya senaryolarıyla pratik kullanım örneklerine bakacağız.

AWS CLI Nedir ve Neden Kullanmalısınız

AWS CLI (Command Line Interface), Amazon’un sunduğu resmi komut satırı aracıdır. Python tabanlı bir araç olan AWS CLI, AWS servislerini REST API üzerinden yönetmenizi sağlar. Konsol üzerinden tek tek yapacağınız işlemleri betik haline getirip otomatize etmenin en pratik yolu budur.

Gerçek bir senaryo düşünelim: Diyelim ki her gece production ortamında kullanılmayan EC2 instance’larını kapatmanız, sabah tekrar başlatmanız gerekiyor. Bunu konsol üzerinden yapmak hem zaman alır hem de insan hatasına açıktır. AWS CLI ile bunu cron job’a bağlı birkaç satırlık bir betikle çözebilirsiniz.

AWS CLI’ın öne çıkan avantajları:

  • Otomasyon desteği: Shell betikleri, CI/CD pipeline’ları ve cron job’larla mükemmel entegrasyon
  • Hız: Konsol yerine komut satırından çok daha hızlı işlem yapabilirsiniz
  • Tekrarlanabilirlik: Aynı komutu farklı ortamlarda aynı sonuçla çalıştırabilirsiniz
  • Betik entegrasyonu: Bash, Python, PowerShell gibi dilerseniz her dille kullanabilirsiniz
  • Çıktı formatlama: JSON, YAML, tablo veya düz metin çıktısı alabilirsiniz

Kurulum

AWS CLI’ın şu an aktif kullanımda olan iki majör versiyonu var: v1 ve v2. AWS, artık v2’yi öneriyor. V2, v1’e göre daha iyi performans, daha iyi hata mesajları ve AWS SSO desteği gibi özellikler sunuyor. Bu yazıda v2 üzerinden gideceğiz.

Linux Üzerine Kurulum

Linux sistemlerde kurulum oldukça basit. AWS, her platform için hazır binary paketleri sunuyor.

# Kurulum paketini indir
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"

# Paketi çıkar
unzip awscliv2.zip

# Kurulumu başlat
sudo ./aws/install

# Kurulumu doğrula
aws --version

ARM tabanlı sistemler (Raspberry Pi, AWS Graviton tabanlı EC2) için farklı binary kullanmanız gerekiyor:

curl "https://awscli.amazonaws.com/awscli-exe-linux-aarch64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

Kurulum sonrası şöyle bir çıktı görmelisiniz:

aws-cli/2.x.x Python/3.x.x Linux/x.x.x exe/x86_64.ubuntu.22

Eğer mevcut bir kurulumu güncellemek istiyorsanız --update flag’ini kullanın:

sudo ./aws/install --update

macOS Üzerine Kurulum

macOS kullanıcıları için iki yol var. Homebrew kullananlar için:

brew install awscli

Homebrew kullanmıyorsanız resmi pkg dosyasını da kullanabilirsiniz. AWS’nin sitesinden .pkg dosyasını indirip çift tıklamanız yeterli.

Windows Üzerine Kurulum

Windows için MSI installer mevcut. AWS’nin resmi sayfasından MSI dosyasını indirip yükledikten sonra PowerShell veya CMD’den doğrudan kullanabilirsiniz.

Windows üzerinde WSL (Windows Subsystem for Linux) kullanıyorsanız Linux kurulum adımlarını izlemeniz yeterli. Hatta birçok sysadmin, Windows’ta bile WSL üzerinden çalışmayı tercih ediyor çünkü Linux bash betikleri doğrudan çalışıyor.

IAM Kullanıcısı ve Access Key Oluşturma

AWS CLI’ı yapılandırmadan önce bir IAM kullanıcısı ve bu kullanıcıya ait access key’e ihtiyacınız var. Root hesabınızı asla CLI için kullanmayın. Bu kritik bir güvenlik kuralıdır.

IAM konsolundan yeni bir kullanıcı oluştururken şu adımları izleyin:

  • AWS Management Console’a giriş yapın
  • IAM servisine gidin
  • “Users” bölümünden “Add users” seçin
  • Kullanıcıya anlamlı bir isim verin (örn: john-sysadmin-cli)
  • “Programmatic access” seçeneğini işaretleyin
  • İlgili politikaları atayın (least privilege prensibine uyun)
  • Kullanıcı oluşturulunca Access Key ID ve Secret Access Key bilgilerini kaydedin

Secret Access Key’i bu ekranda bir kez görürsünüz. Mutlaka güvenli bir yere not edin, çünkü daha sonra göremezsiniz.

Önemli not: Access key’leri kesinlikle Git reponuza commit etmeyin, paylaşımlı ortamlarda ekrana basmayın ve düzenli olarak rotate edin.

Temel Yapılandırma

Kurulum tamamlandıktan sonra aws configure komutuyla yapılandırmaya başlayabilirsiniz:

aws configure

Bu komut sizi interaktif bir yapılandırma sürecine alır:

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-west-1
Default output format [None]: json

Default region: Hangi AWS bölgesini varsayılan olarak kullanmak istediğinizi belirler. Türkiye’deki çoğu şirket için eu-central-1 (Frankfurt) veya eu-west-1 (İrlanda) yaygın tercihler arasında.

Default output format: Üç seçenek var:

  • json: Makine tarafından okunabilir, betiklerle iyi çalışır
  • table: İnsan gözüyle okumak için güzel ama betiklerle çalışması zor
  • text: Basit metin çıktısı, awk ve grep ile iyi çalışır
  • yaml: AWS CLI v2 ile gelen yeni format, okunabilirliği yüksek

Yapılandırma dosyaları iki farklı yerde saklanır:

  • ~/.aws/credentials: Access key bilgileri
  • ~/.aws/config: Bölge, çıktı formatı ve diğer ayarlar

Bu dosyalara doğrudan bakabilirsiniz:

cat ~/.aws/credentials
cat ~/.aws/config

Profil Yönetimi

Gerçek dünyada tek bir AWS hesabıyla çalışmıyorsunuz. Genellikle development, staging ve production gibi farklı ortamlar için farklı hesaplarınız var. Bunları ayrı profiller olarak yapılandırabilirsiniz.

# Dev ortamı için profil oluştur
aws configure --profile dev

# Production ortamı için profil oluştur
aws configure --profile production

# Müşteri A için profil oluştur
aws configure --profile musteri-a

Belirli bir profili kullanmak için --profile parametresini ekleyin:

# Dev profilini kullanarak S3 bucket listele
aws s3 ls --profile dev

# Production profilini kullanarak EC2 instance listele
aws ec2 describe-instances --profile production

Her seferinde --profile yazmak zahmetli olabilir. Bu durumda AWS_PROFILE ortam değişkenini kullanabilirsiniz:

export AWS_PROFILE=production
aws s3 ls  # Artık production profilini kullanır

# İşiniz bitince sıfırlayın
unset AWS_PROFILE

~/.aws/credentials dosyasının içi böyle görünür:

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[dev]
aws_access_key_id = AKIAxxxxxxxxxxDEV
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxDEV

[production]
aws_access_key_id = AKIAxxxxxxxxxxPROD
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxPROD

~/.aws/config dosyasında ise şu yapıyı görürsünüz:

[default]
region = eu-central-1
output = json

[profile dev]
region = eu-west-1
output = json

[profile production]
region = eu-central-1
output = table

Dikkat edin, credentials dosyasında profil adı direkt köşeli parantez içinde ([production]) yazılırken, config dosyasında [profile production] şeklinde yazılıyor. Bu küçük fark bazen kafa karıştırabiliyor.

EC2 Üzerinde IAM Role Kullanımı

Eğer AWS EC2 üzerinde bir uygulama veya betik çalıştırıyorsanız, access key kullanmak yerine IAM role atamanız gerekir. Bu hem daha güvenli hem de daha pratik bir yaklaşımdır.

EC2 instance’ınıza bir IAM role atadıktan sonra AWS CLI hiçbir ek yapılandırma gerektirmeden çalışır. Instance metadata servisi üzerinden geçici kimlik bilgileri otomatik olarak alınır.

# EC2 üzerinde, herhangi bir kimlik bilgisi yapılandırması yapmadan
aws s3 ls  # IAM role izinleri dahilinde çalışır

# Hangi kimlikle işlem yaptığınızı kontrol edin
aws sts get-caller-identity

sts get-caller-identity komutu, kimin kim olduğunu doğrulamak için çok kullanışlı bir araçtır. Şu çıktıyı verir:

{
    "UserId": "AIDAIOSFODNN7EXAMPLE",
    "Account": "123456789012",
    "Arn": "arn:aws:iam::123456789012:user/john-sysadmin-cli"
}

Ortam Değişkenleriyle Kimlik Doğrulama

CI/CD sistemleri gibi yapılandırma dosyası kullanamadığınız durumlarda ortam değişkenleri işinizi görür. Bu yöntem özellikle GitHub Actions, Jenkins veya GitLab CI gibi pipeline’larda çok kullanılır.

export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="eu-central-1"

# Artık aws komutları bu değişkenleri kullanır
aws s3 ls

Ortam değişkenleri, yapılandırma dosyalarına göre önceliklidir. Yani hem dosya hem de ortam değişkeni tanımlıysa ortam değişkeni kullanılır. Bu davranışı bilmek, beklenmedik durumlarda debug yaparken çok işe yarar.

Pratik Kullanım Örnekleri

Yapılandırma tamamlandıktan sonra gerçek senaryolara geçelim.

S3 Operasyonları

# Bucket listele
aws s3 ls

# Belirli bir bucket'ın içeriğini listele
aws s3 ls s3://benim-bucket-adim/

# Yerel dosyayı S3'e kopyala
aws s3 cp /var/log/uygulama.log s3://log-bucket/2024/uygulama.log

# Yerel dizini S3'e senkronize et (yalnızca değişenleri kopyalar)
aws s3 sync /var/log/uygulama-loglari/ s3://log-bucket/uygulama-loglari/

# S3'teki dosyayı sil
aws s3 rm s3://log-bucket/eski-log.log

# Yeni bucket oluştur (bucket adları global olarak benzersiz olmalı)
aws s3api create-bucket 
  --bucket benzersiz-bucket-adim-2024 
  --region eu-central-1 
  --create-bucket-configuration LocationConstraint=eu-central-1

EC2 Yönetimi

# Çalışan EC2 instance'larını listele
aws ec2 describe-instances 
  --filters "Name=instance-state-name,Values=running" 
  --query "Reservations[].Instances[].{ID:InstanceId,Type:InstanceType,IP:PublicIpAddress,Name:Tags[?Key=='Name'].Value|[0]}" 
  --output table

# Instance'ı durdur
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

# Instance'ı başlat
aws ec2 start-instances --instance-ids i-1234567890abcdef0

# Belirli bir instance hakkında detaylı bilgi
aws ec2 describe-instances --instance-ids i-1234567890abcdef0

Çıktıyı Filtrelemek: Query Kullanımı

AWS CLI’ın en güçlü özelliklerinden biri JMESPath sorgu dili desteğidir. Büyük JSON yanıtlarından yalnızca ihtiyacınız olan bilgileri çekebilirsiniz.

# Yalnızca instance ID'lerini listele
aws ec2 describe-instances 
  --query "Reservations[].Instances[].InstanceId" 
  --output text

# Name tag'i olan instance'ların adlarını ve ID'lerini listele
aws ec2 describe-instances 
  --query "Reservations[].Instances[].{InstanceId:InstanceId, Name:Tags[?Key=='Name'].Value|[0]}" 
  --output json

# Yalnızca "Name" tag'i "web-server" olan instance'ları getir
aws ec2 describe-instances 
  --filters "Name=tag:Name,Values=web-server" 
  --query "Reservations[].Instances[].InstanceId" 
  --output text

Bu query yapısını kavramak biraz zaman alabilir ama bir kez anladıktan sonra AWS CLI’ı çok daha verimli kullanmaya başlarsınız.

Gerçek Dünya Senaryosu: Eski AMI’lerin Temizlenmesi

Şirkette her gün yeni AMI (Amazon Machine Image) oluşturulduğunu, ancak eskilerin silinmediğini düşünün. Bu durum hem maliyeti artırır hem de yönetimi zorlaştırır. Aşağıdaki betik, 30 günden eski AMI’leri listeler:

#!/bin/bash

# 30 günden eski AMI'leri bul ve listele
THRESHOLD_DATE=$(date -d "30 days ago" +%Y-%m-%dT%H:%M:%S)

echo "30 günden eski AMI'ler:"
aws ec2 describe-images 
  --owners self 
  --query "Images[?CreationDate<='${THRESHOLD_DATE}'].{ImageId:ImageId,Name:Name,Created:CreationDate}" 
  --output table 
  --profile production 
  --region eu-central-1

echo ""
echo "Silmek için: aws ec2 deregister-image --image-id <ami-id>"

Bu betikle önce listeyi inceleyebilir, sonra silme kararını bilinçli olarak verebilirsiniz. Otomasyonda güvenlik önemlidir, önce listele sonra sil.

AWS SSO ile Yapılandırma

Modern AWS ortamlarında IAM Identity Center (eski adıyla AWS SSO) giderek yaygınlaşıyor. Bu yaklaşım, uzun ömürlü access key’ler yerine geçici kimlik bilgileri kullanıyor. AWS CLI v2, bu yapıyı doğrudan destekliyor.

# SSO oturumu yapılandır
aws configure sso

# Çıkan sorulara yanıt verin:
# SSO session name: sirket-sso
# SSO start URL: https://sirketim.awsapps.com/start
# SSO region: eu-central-1
# SSO registration scopes: sso:account:access

# Yapılandırdıktan sonra giriş yapın
aws sso login --profile dev-sso

# SSO profilini kullanarak komut çalıştırın
aws s3 ls --profile dev-sso

SSO oturumlarının süresi dolduğunda aws sso login komutuyla yenilemeniz gerekir. Bu, güvenlik açısından access key kullanmaktan çok daha iyi bir yaklaşımdır.

Hata Ayıklama ve Debug İpuçları

Bir şeyler ters gittiğinde debug modunu açabilirsiniz:

# Detaylı hata çıktısı için --debug flag'i kullan
aws s3 ls --debug 2>&1 | head -50

# Hangi kimlik bilgileriyle çalıştığını kontrol et
aws sts get-caller-identity

# Konfigürasyonu kontrol et
aws configure list

# Belirli bir profil için konfigürasyonu kontrol et
aws configure list --profile production

aws configure list çıktısı şöyle görünür:

      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************MPLE shared-credentials-file
secret_key     ****************EKEY shared-credentials-file
    region                eu-central-1      config-file    ~/.aws/config

Bu çıktı, hangi değerlerin nereden geldiğini gösterir. Ortam değişkeni, yapılandırma dosyası veya başka bir kaynaktan geliyorsa bunu anlayabilirsiniz.

Güvenlik Tavsiyeleri

AWS CLI kullanırken dikkat etmeniz gereken güvenlik pratikleri:

  • Access key rotation: Access key’leri düzenli olarak (en az 90 günde bir) rotate edin. aws iam create-access-key ve aws iam delete-access-key komutlarıyla bu işlemi betikleştirebilirsiniz
  • Least privilege: CLI kullanıcınıza yalnızca ihtiyacı olan izinleri verin, AdministratorAccess vermeyin
  • MFA zorunluluğu: Önemli hesaplar için MFA’yı aktif edin ve aws sts get-session-token ile geçici token alın
  • Gitignore: .aws/ dizinini hiçbir zaman Git’e commit etmeyin
  • Şüpheli aktivite: CloudTrail loglarını izleyerek CLI üzerinden yapılan işlemleri takip edin
  • Shared makineler: Paylaşımlı sunucularda aws configure yerine ortam değişkeni kullanın ve oturum sonunda unset yapın

Access key’in ne zaman oluşturulduğunu kontrol etmek için:

aws iam list-access-keys --user-name john-sysadmin-cli 
  --query "AccessKeyMetadata[].{KeyId:AccessKeyId,Created:CreateDate,Status:Status}" 
  --output table

Alias ve Kısayollar

Sık kullandığınız uzun komutları alias haline getirerek iş akışınızı hızlandırabilirsiniz. Bu alias’ları ~/.bashrc veya ~/.bash_profile dosyanıza ekleyin:

# Çalışan instance'ları hızlıca listele
alias ec2-running="aws ec2 describe-instances 
  --filters 'Name=instance-state-name,Values=running' 
  --query 'Reservations[].Instances[].{ID:InstanceId,Type:InstanceType,IP:PublicIpAddress}' 
  --output table"

# Hangi kimlikle çalıştığını kontrol et
alias aws-whoami="aws sts get-caller-identity"

# S3 bucket listesi
alias s3ls="aws s3 ls"

# Profil değiştirme kısayolu
alias aws-dev="export AWS_PROFILE=dev && echo 'Dev profiline geçildi'"
alias aws-prod="export AWS_PROFILE=production && echo 'UYARI: Production profilinde çalışıyorsunuz!'"

Bu alias’lar terminal oturumunuzu çok daha verimli hale getirir.

Sonuç

AWS CLI, modern bulut yönetiminin vazgeçilmez bir parçası. Bu yazıda kurulumdan başlayıp yapılandırmaya, profil yönetiminden güvenlik pratiklerine kadar geniş bir yelpazede konuları ele aldık.

Özellikle şu noktalara dikkat etmenizi öneririm: Birden fazla AWS hesabıyla çalışıyorsanız profil yönetimini mutlaka düzgün kurun, access key yerine IAM role kullanabildiğiniz her durumda role tercih edin ve sts get-caller-identity komutunu bir alışkanlık haline getirin.

AWS CLI’ı öğrenmek başta biraz ezber gibi gelebilir ama günlük kullanımda inanılmaz bir verimlilik sağlıyor. Konsolda dakikalar süren işlemler CLI’da saniyelere iniyor. Bunun üzerine bir de otomasyon katmanı eklediğinizde ortam yönetimi bambaşka bir boyuta taşınıyor.

Bir sonraki adım olarak AWS CLI üzerine inşa edilmiş araçları incelemenizi öneririm. aws-vault gibi araçlar access key yönetimini daha güvenli hale getiriyor, awsp ile profil değiştirme kolaylaşıyor. AWS ekosistemi genişledikçe CLI hakimiyetiniz de değer kazanıyor.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir