Takip et

Çapraz Hesap S3 Yüklemesi ile AWS CodePipeline Tetikleme Rehberi

Bulut ortamlarında CI/CD süreçlerini yönetirken, farklı AWS hesapları arasında güvenli ve otomatik tetikleyiciler kurmak çoğu zaman karmaşık bir süreç haline gelebilir. Peki, bir geliştirme hesabındaki S3 paketine yüklenen bir dosyanın, üretim hesabındaki CodePipeline’ı otomatik olarak nasıl başlatacağını hiç merak ettiniz mi?

Bu kapsamlı rehberde, çapraz hesap (cross-account) S3 yüklemesi olayını kullanarak AWS CodePipeline’ı EventBridge ve IAM Rolleri aracılığıyla nasıl tetikleyeceğinizi adım adım öğreneceğiz. Özellikle büyük ölçekli kuruluşlar ve çoklu hesap stratejisi uygulayan ekipler için hayati önem taşıyan bu otomasyon, geliştirme ve dağıtım süreçlerinizi hızlandırırken güvenlik standartlarınızı da yükseltmenize yardımcı olacaktır. Bu makale, konuya yeni başlayanlardan deneyimli DevOps mühendislerine kadar herkesin faydalanabileceği detaylı bilgiler ve pratik örnekler sunmaktadır.

Günümüzün bulut tabanlı mimarilerinde, kuruluşlar genellikle farklı iş yükleri, ortamlar veya güvenlik seviyeleri için birden fazla AWS hesabı kullanır. Bu “çoklu hesap stratejisi”, kaynak izolasyonu, maliyet yönetimi, güvenlik ve operasyonel verimlilik gibi birçok avantaj sunar. Örneğin, bir yazılım geliştirme ekibinin bir Geliştirme (Dev) hesabı, bir Test hesabı ve bir Üretim (Prod) hesabı bulunabilir. Her hesabın kendi S3 paketleri, EC2 örnekleri ve diğer AWS hizmetleri olabilir. Ancak, bu izolasyon beraberinde bazı entegrasyon zorlukları da getirir.

Bir geliştirme hesabında test edilen ve onaylanan bir uygulamanın veya yapılandırma dosyasının, üretim ortamına otomatik olarak dağıtılması gerektiğinde, çapraz hesap entegrasyonu kaçınılmaz hale gelir. İşte bu noktada, geliştirme hesabındaki bir S3 paketine yapılan bir yüklemenin, üretim hesabındaki CodePipeline’ı tetiklemesi senaryosu devreye girer. Bu tür bir otomasyon, manuel adımları ortadan kaldırarak insan hatası riskini azaltır, dağıtım sürelerini kısaltır ve sürekli entegrasyon/sürekli teslimat (CI/CD) süreçlerini daha verimli hale getirir.

Bir başka gerçek dünya senaryosu ise, farklı iş birimlerinin veya ekiplerin kendi AWS hesaplarını yönettiği büyük bir kurumu ele alabiliriz. Örneğin, pazarlama departmanı web sitesi içeriğini kendi S3 paketine yüklerken, operasyon departmanı bu içeriği otomatik olarak CDN’e dağıtmak veya farklı bir bölgeye senkronize etmek isteyebilir. Bu durumda, pazarlama hesabındaki S3 olaylarının, operasyon hesabındaki bir CodePipeline’ı tetiklemesi, iki farklı departmanın iş akışlarını sorunsuz bir şekilde birleştirmeyi sağlar. Benzer şekilde, bir yazılım tedarikçisi, müşterilerinin AWS hesaplarına güvenli bir şekilde güncellemeler dağıtmak için bu modeli kullanabilir. Kaynak hesabın (tedarikçi) S3 paketine yeni bir yazılım paketi yüklendiğinde, hedef hesaplardaki (müşteriler) CodePipeline’lar tetiklenebilir ve güncellemeler otomatik olarak dağıtılabilir.

Çapraz hesap entegrasyonunun temel faydaları arasında şunlar sayılabilir:

  • Güvenlik İzolasyonu: Üretim ortamlarının geliştirme ve test ortamlarından tamamen ayrılmasını sağlar, böylece bir hesapta yaşanan güvenlik ihlali diğerini etkilemez.
  • Kaynak ve Maliyet Yönetimi: Her hesabın kaynakları ve maliyetleri ayrı ayrı yönetilebilir.
  • Otomasyon ve Hız: Manuel müdahaleyi azaltarak dağıtım süreçlerini otomatikleştirir ve hızlandırır. Bu durum, özellikle sık güncellemeler yapılan ortamlarda büyük bir avantajdır.
  • Yönetişim ve Uyumluluk: Farklı ortamlara farklı güvenlik ve uyumluluk politikaları uygulanmasını kolaylaştırır.

Dolayısıyla, çapraz hesap S3 yüklemesiyle CodePipeline tetikleme, modern DevOps pratiklerinin ve kurumsal bulut mimarilerinin vazgeçilmez bir parçası haline gelmiştir. Bu sayede, karmaşık dağıtım senaryolarını basit ve güvenli bir şekilde otomatize edebilir, ekipler arası iş birliğini artırabilir ve genel operasyonel verimliliği yükseltebilirsiniz.

Uzman İpucu: Çoklu hesap mimarisi sadece güvenlik ve maliyet için değil, aynı zamanda servis limitlerinden daha verimli faydalanmak ve farklı bölgelerdeki kaynakları yönetmek için de kritik öneme sahiptir. CodePipeline gibi CI/CD araçları için kaynak hesabınızda bir ‘artifact’ S3 bucket’ı, hedef hesaplarınızda ise ‘deployment’ S3 bucket’ları bulundurmak iş akışınızı sadeleştirecektir.

Temel AWS Bileşenleri Nelerdir? CodePipeline, EventBridge ve IAM Rolleri

Bu çapraz hesap tetikleme senaryosunu anlamak ve başarılı bir şekilde uygulamak için, birkaç temel AWS hizmetinin rolünü ve işleyişini bilmek önemlidir. Öncelikle, ana oyuncularımız olan AWS CodePipeline, Amazon S3, Amazon EventBridge ve AWS Identity and Access Management (IAM) hakkında kısa bir genel bakış sunalım.

AWS CodePipeline Nedir?

AWS CodePipeline, yazılım yayınlama sürecinizi modelleyen, görselleştiren ve otomatikleştiren tamamen yönetilen bir sürekli teslimat (CD) hizmetidir. Geliştiricilerin kod değişikliklerini her onaylandığında yayınlamasına yardımcı olur. CodePipeline, uygulamanızı hızlı ve güvenilir bir şekilde teslim etmenize olanak tanıyan bir dizi oluşturma, test etme ve dağıtım aşamasından geçer. Bir kod değişikliği algılandığında (örneğin bir S3 yüklemesi), CodePipeline otomatik olarak tetiklenir ve tanımlanmış tüm adımları sırasıyla yürütür. Bu adımlar arasında kodun derlenmesi, testlerin çalıştırılması, Docker imajlarının oluşturulması ve nihayetinde bir üretim ortamına dağıtım yapmak gibi süreçler yer alabilir.

Amazon S3 (Simple Storage Service) ve Olay Bildirimleri

Amazon S3, ölçeklenebilir, yüksek oranda kullanılabilir, güvenli ve dayanıklı bir bulut depolama hizmetidir. Nesneleri (dosyaları) depolamak için kullanılır. Bu senaryoda S3, CodePipeline’ı tetikleyecek dosyaların (örneğin, uygulama kod paketleri, yapılandırma dosyaları, deployment scriptleri) yüklendiği kaynak görevi görür. S3’ün önemli bir özelliği, paketlerdeki olaylar (örneğin, yeni bir nesnenin oluşturulması, mevcut bir nesnenin silinmesi) hakkında bildirim gönderebilmesidir. Bu bildirimler doğrudan SNS, SQS veya Lambda’ya gönderilebildiği gibi, daha esnek entegrasyonlar için EventBridge’e de gönderilebilir.

Amazon EventBridge Nedir?

Amazon EventBridge, AWS hizmetlerinden, SaaS uygulamalarından ve kendi özel uygulamalarınızdan gerçek zamanlı veri akışlarını kolaylaştıran sunucusuz bir olay veri yolu hizmetidir. EventBridge, olayları alıp bunları hedef hizmetlere (Lambda fonksiyonları, SQS kuyrukları, SNS konuları, başka EventBridge veri yolları ve hatta CodePipeline gibi) yönlendiren kuralları tanımlamanıza olanak tanır. Entegrasyon senaryomuzda EventBridge, S3 paketindeki bir dosya yükleme olayını alacak ve bu olayı çapraz hesap olarak hedef EventBridge veri yoluna iletmek için bir köprü görevi görecektir. Bu sayede olayların akışı merkezi ve güvenli bir şekilde yönetilmiş olur.

AWS Identity and Access Management (IAM) ve Rollerin Önemi

AWS IAM, AWS kaynaklarınıza erişimi güvenli bir şekilde yönetmenizi sağlar. Bu, kimlerin kimliğini doğrulayabileceğini (authentication) ve hangi kaynaklara hangi izinlerle erişebileceğini (authorization) kontrol etmenizi içerir. Çapraz hesap entegrasyonlarında IAM Rolleri kritik bir öneme sahiptir. Bir IAM Rolü, belirli bir görev için geçici izinler sağlayan bir AWS kimliğidir. Rolleri, kullanıcılar, uygulamalar veya AWS hizmetleri üstlenebilir. Bizim senaryomuzda:

  • Kaynak hesaptaki EventBridge’in olayı hedef hesaba gönderebilmesi için bir IAM Rolü ve izinler gerekecektir.
  • Hedef hesaptaki EventBridge veri yolunun (event bus) bu olayı kabul edebilmesi için bir kaynak politikası (resource policy) tanımlanması gerekecektir.
  • Hedef hesaptaki CodePipeline’ın tetiklenebilmesi için EventBridge tarafından üstlenilebilecek bir IAM Rolü ve gerekli CodePipeline tetikleme izinleri gerekecektir.

IAM Rolleri sayesinde, iki farklı hesap arasında doğrudan bir kullanıcı veya anahtar paylaşımı yapmak yerine, güvenli ve yetkilendirilmiş bir etkileşim modeli oluşturulur. Bu, en az ayrıcalık (least privilege) prensibini uygulamanızı ve güvenlik duruşunuzu güçlendirmenizi sağlar. IAM, bu karmaşık çapraz hesap yetkilendirme akışının bel kemiğini oluşturur ve doğru yapılandırma, tüm sistemin güvenliği ve işlevselliği için hayati önem taşır. Bu bileşenlerin uyumlu bir şekilde çalışmasıyla, S3’teki basit bir dosya yüklemesi, karmaşık bir CodePipeline sürecini farklı bir AWS hesabında güvenli bir şekilde tetikleyebilir.

Çapraz Hesap Tetikleme Mimarisi Nasıl İşler? EventBridge + IAM Rolleri

Çapraz hesap tetikleme mimarisi, olayın çıktığı kaynaktan hedefe ulaşana kadar izlediği yol ve bu yoldaki yetkilendirme mekanizmaları üzerine kuruludur. Temelde iki ana AWS hesabımız var: olayı başlatan “Kaynak Hesap” ve olayı alıp CodePipeline’ı tetikleyen “Hedef Hesap”. Bu mimarinin kalbinde Amazon EventBridge ve AWS IAM Rolleri yatar. Şimdi bu akışı ve bileşenlerin nasıl etkileşimde bulunduğunu adım adım inceleyelim.

Olay Akışı ve Mekanizması

  1. S3 Olay Bildirimi (Kaynak Hesap):

    Sürecimiz, Kaynak Hesap’taki bir S3 paketine (örneğin, my-source-artifact-bucket) yeni bir nesne yüklendiğinde başlar. S3 paketi, bu tür olayları (s3:ObjectCreated:*) EventBridge’e göndermek üzere yapılandırılmıştır. Bu, S3’ün yerel bir EventBridge veri yoluna (default event bus) olay göndermesini sağlar.

  2. EventBridge Kuralı (Kaynak Hesap):

    Kaynak Hesap’taki EventBridge varsayılan veri yoluna (default event bus) gelen S3 olaylarını dinleyen bir kural tanımlanır. Bu kural, belirli bir S3 paketinden gelen ve önceden belirlenmiş bir desene uyan olayları (örneğin, sadece .zip uzantılı dosyaların yüklenmesi) yakalar. Kuralın hedefi, bu olayı Hedef Hesap’taki özel bir EventBridge veri yoluna göndermektir. Bu çapraz hesap gönderimi için, kuralın hedeflerinden biri olarak Hedef Hesap’ın AWS Hesap Kimliği belirtilir.

  3. IAM Yetkilendirmesi (Kaynak Hesap):

    Kaynak Hesap’taki EventBridge kuralının olayı Hedef Hesap’a gönderebilmesi için, EventBridge’in bu işlemi yapmasına izin veren bir IAM Rolü (örneğin, EventBridgeCrossAccountSenderRole) üstlenmesi gerekir. Bu rol, events:PutEvents eylemini Hedef Hesap’taki belirli bir EventBridge veri yoluna (veya tüm veri yollarına) karşı gerçekleştirmesine izin veren bir ilkeye (policy) sahip olmalıdır. Ayrıca, bu rolün güven ilişkisi (trust policy), EventBridge hizmetinin (events.amazonaws.com) bu rolü üstlenmesine izin vermelidir.

  4. EventBridge Kaynak Politikası (Hedef Hesap):

    Hedef Hesap’taki EventBridge varsayılan veri yolu (default event bus), Kaynak Hesap’tan gelen olayları kabul etmesi için bir kaynak politikasına (resource policy) sahip olmalıdır. Bu politika, Kaynak Hesap’tan belirli bir prensibe (örneğin, arn:aws:iam::SOURCE_ACCOUNT_ID:role/EventBridgeCrossAccountSenderRole) sahip olan olayların alınmasına izin verir. Bu adım, olayların hedef veri yoluna güvenli bir şekilde ulaşmasını sağlar.

  5. EventBridge Kuralı (Hedef Hesap):

    Hedef Hesap’taki EventBridge varsayılan veri yoluna gelen olayları dinleyen başka bir kural tanımlanır. Bu kural, Kaynak Hesap’tan gelen S3 olaylarını filtreler (örneğin, olay kaynağı ve detayı üzerinde eşleşmeler yaparak). Kuralın hedefi ise AWS CodePipeline’ı tetiklemektir. CodePipeline, belirli bir artefakt girişini bekleyen bir başlangıç aşamasına sahip olmalıdır.

  6. IAM Yetkilendirmesi (Hedef Hesap):

    Hedef Hesap’taki EventBridge kuralının CodePipeline’ı tetikleyebilmesi için, EventBridge’in bu işlemi yapmasına izin veren bir IAM Rolü (örneğin, EventBridgeCodePipelineInvokerRole) üstlenmesi gerekir. Bu rol, codepipeline:StartPipelineExecution gibi eylemleri belirli bir CodePipeline kaynağına (veya tüm CodePipeline’lara) karşı gerçekleştirmesine izin veren bir ilkeye sahip olmalıdır. Yine, bu rolün güven ilişkisi EventBridge hizmetinin bu rolü üstlenmesine izin vermelidir.

  7. CodePipeline Tetiklenmesi (Hedef Hesap):

    Son olarak, Hedef Hesap’taki EventBridge kuralı tarafından tetiklenen CodePipeline, tanımlanmış tüm aşamaları (kaynak, derleme, dağıtım vb.) başlatır. Bu, uygulamanın otomatik olarak inşa edilmesini, test edilmesini ve dağıtılmasını sağlar.

Bu mimari, her adımda yetkilendirme kontrolleri yaparak yüksek güvenlik seviyesi sağlar. IAM Rolleri ve Kaynak Politikaları, sadece yetkili varlıkların belirli eylemleri gerçekleştirmesine izin verir. EventBridge, bu olay tabanlı mimarinin merkezi koordinatörüdür, olayları güvenilir bir şekilde alır, filtreler ve doğru hedeflere yönlendirir. Bu entegrasyonun gücü, birbirinden izole edilmiş bulut ortamları arasında karmaşık iş akışlarını otomatikleştirme yeteneğinden gelir.

Adım Adım Kurulum: Kaynak Hesaptaki S3 ve EventBridge Yapılandırması

Şimdi teoriden pratiğe geçelim ve çapraz hesap tetikleme senaryomuzun ilk kısmını, yani Kaynak Hesap’taki (Source Account) yapılandırmayı gerçekleştirelim. Bu bölümde, S3 paketimizdeki olayların EventBridge’e nasıl yönlendirileceğini ve EventBridge’in bu olayları Hedef Hesap’a nasıl göndereceğini adım adım göreceğiz. Unutmayın, bu adımlar Kaynak Hesap’ınızda yapılacaktır.

1. S3 Paketini Oluşturma ve EventBridge Bildirimlerini Etkinleştirme

Öncelikle, CodePipeline’ı tetikleyecek dosyaları barındıracak bir S3 paketi oluşturmamız gerekiyor. Bu paket, nesne oluşturma olaylarını EventBridge’e gönderecek şekilde yapılandırılmalıdır.

  1. AWS Yönetim Konsolu’nda S3 hizmetine gidin.
  2. Yeni bir paket oluşturun (örneğin, my-source-artifact-bucket-12345). Paket adınızın benzersiz olduğundan emin olun.
  3. Paket oluşturulduktan sonra, paketinizin özelliklerine (Properties) gidin.
  4. “Event notifications” bölümünü bulun ve “Create event notification” seçeneğine tıklayın.
  5. Bildirim için bir ad verin (örneğin, SendToEventBridge).
  6. “Events” bölümünde, ihtiyacınıza göre olay türlerini seçin. Genellikle All object create events (Put, Post, Copy, Multipart Upload) seçeneği yeterlidir.
  7. “Destination” olarak “EventBridge” seçeneğini işaretleyin ve kaydedin.

Bu yapılandırma sayesinde, my-source-artifact-bucket-12345 adlı S3 paketine yeni bir dosya yüklendiğinde, S3 otomatik olarak varsayılan EventBridge veri yolunuza bir olay gönderecektir. Bu olay, daha sonraki adımlarda kullanacağımız tetikleyicinin başlangıç noktasıdır.

2. EventBridge Kuralı Oluşturma (Kaynak Hesaptan Hedef Hesaba Olay Gönderme)

Şimdi Kaynak Hesap’taki EventBridge’e gelen S3 olaylarını yakalayıp, bunları Hedef Hesap’a yönlendirecek bir kural tanımlayalım.

  1. AWS Yönetim Konsolu’nda EventBridge hizmetine gidin.
  2. Sol menüden “Rules” seçeneğine tıklayın ve “Create rule” butonuna basın.
  3. Kural için bir ad verin (örneğin, S3ToTargetAccountRule) ve isteğe bağlı bir açıklama ekleyin.
  4. “Define pattern” adımında “Event pattern” seçeneğini seçin.
  5. Olay deseni (event pattern) için aşağıdaki JSON’u kullanın. Bu desen, S3’ten gelen nesne oluşturma olaylarını ve spesifik paket adınızı filtreleyecektir:

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["my-source-artifact-bucket-12345"]
    },
    "reason": ["PutObject", "CompleteMultipartUpload"]
  }
}
    

Deseni onayladıktan sonra "Select event bus" kısmında "AWS default event bus" seçeneğinin işaretli olduğundan emin olun.

  1. "Select targets" adımında, "AWS service" olarak "Event bus in another account" seçeneğini seçin.
  2. "Account ID" alanına Hedef Hesap'ın 12 haneli AWS Hesap Kimliğini girin.
  3. "Event bus" bölümünde "Default event bus" seçeneğini seçin.
  4. EventBridge'in bu çapraz hesap gönderme işlemini yapabilmesi için bir IAM Rolü'ne ihtiyacı vardır. "Execution role" altında "Create a new role for this specific resource" seçeneğini seçin ve rol için bir ad verin (örneğin, EventBridgeCrossAccountSenderRole). EventBridge, bu rolü oluşturacak ve gerekli izinleri ekleyecektir.
  5. Kuralı oluşturmak için gerekli adımları tamamlayın.

3. EventBridgeCrossAccountSenderRole İçin IAM İzinlerini Kontrol Etme (İsteğe Bağlı)

Önceki adımda EventBridge tarafından otomatik olarak oluşturulan rolün, Hedef Hesap'a olay gönderme iznine sahip olduğundan emin olmalıyız. Genellikle EventBridge bunu doğru bir şekilde yapar, ancak doğrulamak önemlidir.

  1. AWS Yönetim Konsolu'nda IAM hizmetine gidin.
  2. Sol menüden "Roles" seçeneğine tıklayın ve oluşturduğunuz EventBridgeCrossAccountSenderRole rolünü arayın.
  3. Rolün "Permissions" sekmesinde, aşağıdaki gibi bir ilkenin (policy) bağlı olduğundan emin olun. Bu ilke, EventBridge'in Hedef Hesap'taki varsayılan veri yoluna olay göndermesine izin verir:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "events:PutEvents",
            "Resource": "arn:aws:events:REGION:TARGET_ACCOUNT_ID:event-bus/default"
        }
    ]
}
    

REGION yerine kullandığınız AWS bölgesini (örneğin, eu-central-1) ve TARGET_ACCOUNT_ID yerine Hedef Hesap'ın kimliğini yazdığınızdan emin olun.

Bu adımları tamamladığınızda, Kaynak Hesap'taki S3 paketine yapılan herhangi bir dosya yüklemesi, EventBridge aracılığıyla Hedef Hesap'taki EventBridge veri yoluna güvenli bir şekilde iletilmeye hazır olacaktır. Şimdi sıra Hedef Hesap'taki yapılandırmada.

Hedef Hesaptaki EventBridge ve CodePipeline Yapılandırması Nasıl Yapılır?

Kaynak Hesap'taki S3 ve EventBridge yapılandırmasını tamamladığımıza göre, şimdi sıra Hedef Hesap'ta (Target Account) gelen olayları karşılamak ve CodePipeline'ı tetiklemek için gerekli adımları atmaya geldi. Bu kısım, Kaynak Hesap'tan gelen olayların işlenmesi ve dağıtım sürecinin başlatılması için kritik öneme sahiptir.

1. EventBridge Varsayılan Veri Yolu İçin Kaynak Politikası Oluşturma (Hedef Hesap)

Hedef Hesap'taki EventBridge varsayılan veri yolu, Kaynak Hesap'tan gelen olayları kabul etmesi için açıkça yetkilendirilmelidir. Bu yetkilendirme, bir kaynak politikası (resource policy) aracılığıyla yapılır.

  1. AWS Yönetim Konsolu'nda Hedef Hesap'ınızda EventBridge hizmetine gidin.
  2. Sol menüden "Event buses" seçeneğine tıklayın.
  3. "Default" isimli veri yolunu seçin ve "Permissions" sekmesine tıklayın.
  4. "Add permission" butonuna tıklayın ve aşağıdaki ilkeyi (policy) yapıştırın. Bu ilke, Kaynak Hesap'tan gelen events:PutEvents eylemine izin verir:

{
  "Sid": "AllowAccountToPutEvents",
  "Effect": "Allow",
  "Principal": {
    "AWS": "arn:aws:iam::SOURCE_ACCOUNT_ID:root"
  },
  "Action": "events:PutEvents",
  "Resource": "arn:aws:events:REGION:TARGET_ACCOUNT_ID:event-bus/default"
}
    

SOURCE_ACCOUNT_ID yerine Kaynak Hesap'ın 12 haneli AWS Hesap Kimliğini, REGION yerine kullandığınız AWS bölgesini ve TARGET_ACCOUNT_ID yerine Hedef Hesap'ın kimliğini yazdığınızdan emin olun. "Principal": {"AWS": "arn:aws:iam::SOURCE_ACCOUNT_ID:root"} yerine, Kaynak Hesap'taki EventBridge tarafından kullanılan IAM Rolünü ("Principal": {"AWS": "arn:aws:iam::SOURCE_ACCOUNT_ID:role/EventBridgeCrossAccountSenderRole"}) belirterek daha dar bir yetkilendirme yapabilirsiniz, bu daha güvenli bir yaklaşımdır. Daha basit bir başlangıç için root prensip kullanılabilir.

2. CodePipeline Oluşturma (Hedef Hesap)

Hedef Hesap'ta, Kaynak Hesap'tan gelen S3 olayını kullanarak tetikleyeceğimiz bir CodePipeline oluşturmamız gerekiyor. Bu CodePipeline, uygulamamızı dağıtmak için gerekli adımları içerecektir.

  1. AWS Yönetim Konsolu'nda Hedef Hesap'ınızda CodePipeline hizmetine gidin.
  2. "Create pipeline" butonuna tıklayın.
  3. Pipeline'a bir ad verin (örneğin, MyAppDeploymentPipeline).
  4. "Service role" için yeni bir rol oluşturmasına izin verin veya mevcut bir rolü seçin (örneğin, CodePipelineServiceRole). Bu rol, CodePipeline'ın S3, CodeBuild gibi diğer AWS hizmetlerine erişimi için gerekli izinlere sahip olacaktır.
  5. "Source stage" olarak "Amazon S3" seçeneğini seçin.
  6. "S3 bucket" olarak, CodePipeline'ın tetiklenmesiyle kullanılacak olan artefaktların depolanacağı bir S3 paketi belirtin (bu genellikle Kaynak Hesap'taki S3 paketinden kopyalanacak olan artefakttır, veya CodePipeline'ın kendi artefact bucket'ı olabilir).
    Uzman İpucu: CodePipeline için ayrı bir Artifact S3 paketi oluşturmak en iyi pratiklerden biridir. Bu paket, pipeline'ın çıktılarının ve geçici dosyalarının depolanmasında kullanılır. Kaynak S3'ten gelen olaylar CodePipeline'ı tetiklerken, pipeline'ın kendisi bu Artifact paketini kullanarak işlem yapar.
  7. "S3 object key" alanına, CodePipeline'ı tetikleyecek dosyanın (artefaktın) tam anahtarını girin (örneğin, app-release.zip).
  8. "Change detection options" altında, "AWS CodePipeline" veya "Amazon EventBridge (recommended)" seçeneğini seçin. Bizim senaryomuzda EventBridge'i kullanacağımız için burada S3 Polling'i kapatabiliriz.
  9. Diğer aşamaları (Build, Deploy) kendi ihtiyacınıza göre yapılandırın veya şimdilik atlayın. Örneğin, bir CodeBuild projesi tanımlayarak derleme aşamasını, bir AWS Elastic Beanstalk veya AWS CodeDeploy uygulaması tanımlayarak dağıtım aşamasını ekleyebilirsiniz.
  10. Pipeline'ı oluşturun.

3. EventBridge Kuralı Oluşturma (Hedef Hesaptan CodePipeline Tetikleme)

Şimdi Kaynak Hesap'tan gelen olayları yakalayıp, CodePipeline'ı tetikleyecek son EventBridge kuralını tanımlayalım.

  1. AWS Yönetim Konsolu'nda Hedef Hesap'ınızda EventBridge hizmetine tekrar gidin.
  2. Sol menüden "Rules" seçeneğine tıklayın ve "Create rule" butonuna basın.
  3. Kural için bir ad verin (örneğin, S3EventToCodePipelineRule) ve isteğe bağlı bir açıklama ekleyin.
  4. "Define pattern" adımında "Event pattern" seçeneğini seçin.
  5. Olay deseni (event pattern) için aşağıdaki JSON'u kullanın. Bu desen, Kaynak Hesap'tan gelen ve belirli bir S3 paketindeki nesne oluşturma olaylarını filtreleyecektir:

{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "account": ["SOURCE_ACCOUNT_ID"],
  "detail": {
    "bucket": {
      "name": ["my-source-artifact-bucket-12345"]
    },
    "reason": ["PutObject", "CompleteMultipartUpload"]
  }
}
    

SOURCE_ACCOUNT_ID yerine Kaynak Hesap'ın kimliğini ve S3 paket adını kendi paket adınızla değiştirdiğinizden emin olun. Bu kural, Kaynak Hesap'tan geldiğini doğruladığımız ve S3'ten kaynaklanan olayları hedefleyecektir.

  1. "Select targets" adımında, "AWS service" olarak "CodePipeline" seçeneğini seçin.
  2. "Pipeline" açılır listesinden az önce oluşturduğunuz CodePipeline'ı (örneğin, MyAppDeploymentPipeline) seçin.
  3. "Execution role" altında "Create a new role for this specific resource" seçeneğini seçin ve rol için bir ad verin (örneğin, EventBridgeCodePipelineInvokerRole). Bu rol, EventBridge'in CodePipeline'ı başlatmasına izin veren izinlere sahip olacaktır.
  4. Kuralı oluşturmak için gerekli adımları tamamlayın.

Bu adımlarla Hedef Hesap'taki yapılandırmayı tamamlamış oluyorsunuz. Artık, Kaynak Hesap'taki S3 paketinize bir dosya yüklediğinizde, bu olay EventBridge aracılığıyla Kaynak Hesap'tan Hedef Hesap'a iletilecek ve Hedef Hesap'taki CodePipeline'ınız otomatik olarak tetiklenerek dağıtım sürecinizi başlatacaktır. Bu, çapraz hesap CI/CD süreçleriniz için güçlü ve otomatik bir temel oluşturur.

Güvenlik ve İleri Düzey İpuçları Nelerdir?

Çapraz hesap entegrasyonları, karmaşık olduğu kadar güvenlik açısından da dikkatli planlama gerektirir. Otomasyonun faydalarını maksimize ederken güvenlik duruşunuzu korumak için bazı ileri düzey ipuçları ve en iyi pratikleri göz önünde bulunduralım.

1. En Az Ayrıcalık (Least Privilege) Prensibi

Bu makalede oluşturduğumuz IAM rolleri ve politikaları için her zaman "en az ayrıcalık" prensibini uygulayın. Bu, bir rolün veya kullanıcının yalnızca görevini yerine getirmesi için kesinlikle gerekli olan minimum izinlere sahip olması gerektiği anlamına gelir. Örneğin:

  • EventBridgeCrossAccountSenderRole için events:PutEvents eylemini yalnızca belirli bir hedef EventBridge veri yoluna (ARN ile) ve hatta belirli olay desenlerine karşı kısıtlayın.
  • EventBridgeCodePipelineInvokerRole için codepipeline:StartPipelineExecution eylemini yalnızca belirli bir CodePipeline ARN'sine karşı kısıtlayın.
  • S3 paket izinlerinde, sadece EventBridge'in olay bildirimlerini göndermesine izin verin ve gereksiz okuma/yazma izinlerinden kaçının.

Ayrıca, IAM rol güven ilişkilerinde (trust policies), rolü üstlenecek hizmeti (örneğin, events.amazonaws.com) ve isteğe bağlı olarak dış kimliği (External ID) veya belirli bir kaynak ARN'sini belirterek daha fazla kısıtlama getirebilirsiniz. Örneğin:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "sts:ExternalId": "MY_UNIQUE_EXTERNAL_ID"
        }
      }
    }
  ]
}
    

External ID kullanımı, "confused deputy" sorununu önlemeye yardımcı olan ek bir güvenlik katmanıdır, özellikle çapraz hesap rol üstlenme senaryolarında önemlidir.

2. KMS Enkripsiyonu

S3 paketinizde depolanan artefaktlar veya hassas veriler için AWS Key Management Service (KMS) kullanarak sunucu tarafı şifrelemeyi etkinleştirin. Bu, depolanan verilerinizin hem aktarım sırasında hem de bekleme durumundayken güvende olmasını sağlar. CodePipeline'ın ve CodeBuild'ın da şifrelenmiş artefaktları işleyebilmesi için ilgili IAM rollerinin KMS anahtarlarınıza erişim iznine sahip olduğundan emin olun.

3. Yapılandırmayı Kod ile Yönetme (IaC)

Tüm bu yapılandırmaları (S3 paketleri, EventBridge kuralları, IAM rolleri ve CodePipeline'lar) AWS CloudFormation veya Terraform gibi Altyapıyı Kod Olarak (Infrastructure as Code - IaC) araçları ile yönetmek, tutarlılık, tekrarlanabilirlik ve hata oranının düşürülmesi açısından kritik öneme sahiptir. IaC, sürüm kontrolü altında yapılandırmalarınızı saklamanıza, değişiklikleri izlemenize ve kolayca geri alabilmenize olanak tanır. Özellikle çoklu hesap ortamlarında, her hesaptaki yapılandırmaların manuel olarak yapılması hem zaman alıcı hem de hataya açık olacaktır.

4. Kapsamlı İzleme ve Günlüğe Kaydetme (Monitoring & Logging)

EventBridge ve CodePipeline süreçlerinizin etkin bir şekilde izlenmesi, sorun giderme ve güvenlik denetimi için hayati öneme sahiptir:

  • Amazon CloudWatch Logs: EventBridge kurallarınızın ve CodePipeline aşamalarınızın günlüklerini CloudWatch Logs'a gönderecek şekilde yapılandırın. Bu günlükler, olayların başarılı bir şekilde işlenip işlenmediğini veya herhangi bir hata olup olmadığını anlamanıza yardımcı olur.
  • Amazon CloudWatch Metrics ve Alarmlar: EventBridge için kural tetiklenme metriklerini, CodePipeline için başarılı/başarısız pipeline çalıştırma metriklerini izleyin. Belirli eşik değerleri aşıldığında (örneğin, başarısız pipeline çalıştırmaları) sizi bilgilendirecek CloudWatch Alarmları kurun.
  • AWS CloudTrail: Tüm AWS API çağrılarını CloudTrail ile kaydedin. Bu, kimin ne zaman hangi AWS kaynağında hangi eylemi gerçekleştirdiğini denetlemenize olanak tanır. Özellikle IAM rol üstlenmeleri ve çapraz hesap erişimleri için CloudTrail kayıtları kritik bilgiler sağlar.

5. Vaka Analizi: Küresel Yazılım Dağıtımı

Bir yazılım şirketi düşünün. Bu şirketin ana bir "Merkezi Geliştirme" hesabı var ve dünya genelinde farklı coğrafyalarda müşterileri için "Bölgesel Dağıtım" hesapları bulunuyor. Şirket, yeni bir yazılım güncellemesi yayınladığında, bu güncelleme merkezi geliştirme hesabındaki bir S3 paketine yükleniyor. Bu yükleme, daha önce açıkladığımız çapraz hesap EventBridge ve IAM mimarisini kullanarak her bir bölgesel dağıtım hesabındaki CodePipeline'ı tetikliyor. Her bölgesel CodePipeline, yazılımı kendi bölgesindeki EC2/ECS/Lambda gibi hedeflere otomatik olarak dağıtıyor. Bu sayede:

  • Yeni yazılım sürümleri dakikalar içinde küresel olarak dağıtılabiliyor.
  • Her bölgenin kendi spesifik yapılandırması ve dağıtım mantığı kendi CodePipeline'ında izole edilmiş oluyor.
  • Merkezi ekip, tek bir yerden güncellemeyi yönetirken, dağıtımın sorumluluğu bölgesel hesaplara devrediliyor.
  • Güvenlik, IAM rolleri ve EventBridge kaynak politikaları ile sıkı bir şekilde yönetiliyor, böylece merkezi hesabın tüm bölgesel hesaplara doğrudan tam erişimi engelleniyor.

Bu tip bir mimari, özellikle büyük ve coğrafi olarak dağılmış organizasyonlar için yüksek verimlilik ve güvenlik sağlar. İleri düzey ipuçlarını uygulayarak bu tür karmaşık senaryoları daha sağlam ve yönetilebilir hale getirebilirsiniz.

Sonuç ve Sıkça Sorulan Sorular

Bu kapsamlı rehberde, AWS'nin gücünü kullanarak çapraz hesap S3 yüklemeleriyle CodePipeline tetikleme mekanizmasını detaylı bir şekilde inceledik. Modern bulut mimarilerinde sıklıkla karşılaşılan çoklu hesap stratejisinin getirdiği entegrasyon zorluklarını aşmak için Amazon S3, EventBridge ve IAM Rollerinin nasıl bir araya getirilebileceğini adım adım öğrendik. Kaynak hesaptaki bir S3 paketine yapılan basit bir dosya yüklemesinin, EventBridge'in çapraz hesap olay gönderme yeteneği ve doğru yapılandırılmış IAM izinleri sayesinde hedef hesaptaki bir CodePipeline'ı nasıl otomatik olarak tetiklediğini gördük. Bu otomasyon, CI/CD süreçlerini hızlandırmanın, manuel hataları azaltmanın ve kurumsal dağıtım stratejilerini güvenli bir şekilde uygulamanın anahtarıdır.

En az ayrıcalık prensibi, KMS şifrelemesi, Altyapıyı Kod Olarak (IaC) yönetimi ve kapsamlı izleme gibi ileri düzey güvenlik ve operasyonel ipuçları, bu tür bir mimarinin sadece işlevsel değil, aynı zamanda sağlam ve yönetilebilir olmasını sağlar. Bu yaklaşım, yazılım dağıtımlarınızı otomatikleştirirken bulut ortamınızın güvenliğini ve verimliliğini en üst düzeye çıkarmanıza yardımcı olacaktır. Umuyoruz ki bu rehber, kendi çapraz hesap otomasyon çözümlerinizi tasarlamanız ve uygulamanız için size sağlam bir temel sunmuştur.

Sıkça Sorulan Sorular

1. Çapraz hesap entegrasyonunda neden IAM Rolleri kullanmak zorundayım?

IAM Rolleri, iki farklı AWS hesabı arasında güvenli ve geçici izinler sağlamanın en iyi yoludur. Doğrudan kullanıcı kimlik bilgilerini veya erişim anahtarlarını paylaşmak yerine, bir rol tanımlayarak diğer hesabın bu rolü belirli bir süre için üstlenmesine izin verirsiniz. Bu, en az ayrıcalık prensibini uygulamanızı, güvenlik açıklarını azaltmanızı ve kimlik bilgilerinin ifşa riskini ortadan kaldırmanızı sağlar. Rollerin güven ilişkileri (trust policies) ve izin politikaları (permission policies) sayesinde, tam olarak hangi eylemlerin hangi kaynaklar üzerinde gerçekleştirilebileceğini hassas bir şekilde kontrol edebilirsiniz.

2. S3 olayları doğrudan CodePipeline'ı tetikleyemez mi, neden EventBridge'e ihtiyacım var?

Evet, S3 olayları doğrudan CodePipeline'ı tetikleyebilir ancak bu genellikle aynı hesap içindeki tetiklemeler için geçerlidir. Çapraz hesap senaryosunda, S3'ün olayları doğrudan başka bir hesaptaki CodePipeline'ı tetiklemesi karmaşık ve güvensiz olabilir. EventBridge, çapraz hesap olay yönlendirmesi için tasarlanmış merkezi bir hizmettir. Olayları farklı hesaplar arasında güvenli bir şekilde iletmek, filtrelemek ve dönüştürmek için güçlü yetenekler sunar. EventBridge sayesinde, olay akışınızı merkezi olarak yönetebilir ve karmaşık mantıkları kurallarla tanımlayabilirsiniz. Bu, mimariyi daha modüler, ölçeklenebilir ve yönetilebilir hale getirir.

3. Kaynak Hesaptaki S3'e yüklenen dosyanın içeriği Hedef Hesaptaki CodePipeline'a nasıl ulaşır?

EventBridge, S3 olayının sadece meta verisini (örneğin, paket adı, nesne anahtarı, boyut) iletir, dosyanın kendisini değil. CodePipeline, tetiklendiğinde genellikle kendi "Source" aşamasında bir S3 paketi belirtir. Bu S3 paketi, tetikleyici olaydaki nesne anahtarına göre Kaynak Hesaptaki S3 paketinden artefaktı çekebilmelidir. Bu, hedef CodePipeline hizmet rolünün (CodePipelineServiceRole) Kaynak Hesaptaki S3 paketine s3:GetObject izinlerine sahip olması gerektiği anlamına gelir. Güvenli erişim için, Kaynak S3 paketi üzerinde hedef CodePipeline rolüne izin veren bir bucket policy veya CodePipeline rolünde cross-account s3 erişimi için bir IAM politikası tanımlanmalıdır. Ancak, CodePipeline'ı tetiklemenin en yaygın yolu, Kaynak Hesaptaki S3 paketinin sadece tetikleyici olarak kullanılması ve CodePipeline'ın kendisinin kaynak kodunu bir CodeCommit veya GitHub reposundan çekmesi veya CodePipeline'ın Artifact Source olarak yine kendi hesabındaki bir S3'ü kullanmasıdır. Eğer artefakt gerçekten Kaynak S3'ten çekilecekse, S3 paket politikası şu şekilde güncellenmelidir:


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::TARGET_ACCOUNT_ID:role/CodePipelineServiceRole"
      },
      "Action": [
        "s3:GetObject",
        "s3:GetObjectVersion"
      ],
      "Resource": "arn:aws:s3:::my-source-artifact-bucket-12345/*"
    }
  ]
}
    

4. Dağıtımı geri almak istersem ne yapmalıyım?

CodePipeline, dağıtım süreçlerinin geri alınması (rollback) için yerleşik özelliklere sahiptir. Bir dağıtımı geri almak için genellikle iki yaklaşım kullanılır:

  • Önceki başarılı sürümü dağıtma: CodePipeline geçmişinde, daha önce başarılı bir şekilde dağıtılmış bir pipeline çalıştırmasını manuel olarak seçip tekrar çalıştırmak. Bu, önceki iyi bilinen bir duruma geri dönmenizi sağlar.
  • Geri alma aşamaları: CodePipeline tanımınıza özel geri alma aşamaları (rollback stages) eklemek. Bu aşamalar, bir hata durumunda otomatik olarak devreye girer veya manuel olarak tetiklenebilir ve önceki sürümü veya bir geri alma scriptini çalıştırarak sistemi eski haline döndürür. Örneğin, CodeDeploy ile bir dağıtım yapıyorsanız, CodeDeploy'in kendi geri alma yeteneklerini kullanabilirsiniz.

5. EventBridge kuralımı test etmek için ne yapabilirim?

EventBridge konsolu üzerinde "Send test event" özelliğini kullanarak kuralınızın beklediğiniz olay desenine tepki verip vermediğini test edebilirsiniz. S3 olayının bir JSON örneğini buraya yapıştırarak kuralın eşleşip eşleşmediğini ve hedefi doğru tetikleyip tetiklemediğini görebilirsiniz. Ayrıca, EventBridge için CloudWatch Logs'a teslim günlüklerini (delivery logs) etkinleştirerek olayların hedeflere başarılı bir şekilde iletilip iletilmediğini detaylı olarak izleyebilirsiniz. Kaynak hesabınızdaki S3 paketine gerçek bir test dosyası yüklemek de uçtan uca test için en güvenilir yöntemdir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version