﻿
{"id":27998,"date":"2025-08-29T06:34:18","date_gmt":"2025-08-29T06:34:18","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=27998"},"modified":"2025-08-29T06:34:18","modified_gmt":"2025-08-29T06:34:18","slug":"asp-net-core-ile-aws-secrets-manageri-kesfedelim","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-ile-aws-secrets-manageri-kesfedelim\/","title":{"rendered":"Asp.NET Core \u0130le AWS Secrets Manager&#8217;\u0131 Ke\u015ffedelim"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde AWS Secrets Manager ile Asp.NET Core&#8217;da gizli verilerin g\u00fcvenli\u011fini sa\u011flamay\u0131 tart\u0131\u015facak ve <em>secret<\/em> verilerin y\u00f6netiminin \u00e7e\u015fitli y\u00f6nlerini ve kavramlar\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p>Biliyorsunuz ki, her yaz\u0131l\u0131m\u0131n mutlaka API anahtarlar\u0131, mail \u015fifreleri, veritaban\u0131 ba\u011flant\u0131 c\u00fcmlecikleri vs. gibi baz\u0131 gizli ve hassas bilgileri bar\u0131nd\u0131rmas\u0131 gerekmektedir. Yaz\u0131l\u0131m i\u00e7in i\u015flevselli\u011fi s\u00fcrd\u00fcr\u00fclebilir k\u0131lman\u0131n ana damar\u0131 bu bilgiler \u00fczerinden ge\u00e7mektedir. Ancak bizler, bu t\u00fcr hassas bilgileri sabit koda eklemekten, kod kalitesi ve olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131ndan kaynakl\u0131 katiyen ka\u00e7\u0131n\u0131yoruz. Ee ka\u00e7\u0131n\u0131yoruz ka\u00e7\u0131nmas\u0131na ama ne yap\u0131yoruz da bu bilgileri yaz\u0131l\u0131mlara i\u015fliyoruz? \u0130\u015fte tam da burada ak\u0131llara <em>appsettings.json<\/em> gelebilir \ud83d\ude42 Evet, bu dosya bir yap\u0131land\u0131rma dosyas\u0131d\u0131r ama kritik arz eden hassas veriler i\u00e7in hi\u00e7te g\u00fcvenli de\u011fildir. Hele hele production verileri i\u00e7in hi\u00e7 mi hi\u00e7 g\u00fcvenli de\u011fildir!<\/p>\n<p><strong>Ee peki ne yapaca\u011f\u0131z hocam?<\/strong> dedi\u011finizi duyar gibiyim&#8230;<\/p>\n<p>Bu g\u00fcne kadar Asp.NET Core&#8217;un <a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-hassas-verilerin-korunmasisecret-manager-tool\/\" target=\"_blank\">Secret Manager Tool<\/a>&#8216;unu duymu\u015fsunuzdur. Evet, bu tool tam da bu ama\u00e7 i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak bunda da \u015f\u00f6yle bir s\u0131k\u0131nt\u0131 vard\u0131r ki; hassas verileri depolamak i\u00e7in dosya sistemine dayal\u0131 bir \u00e7\u00f6z\u00fcm getirmektedir ve bu da yaln\u0131zca development ortam\u0131 i\u00e7in g\u00fcven sa\u011flayacakt\u0131r. Bizlere ise production ortam\u0131 i\u00e7in bu hassas verileri g\u00fcvenilir ve merkezi bir yerde depolayabilece\u011fimiz alan laz\u0131md\u0131r. Bunun i\u00e7in internette yapaca\u011f\u0131m\u0131z aramalar neticesinde kar\u015f\u0131la\u015faca\u011f\u0131m\u0131z \u00e7e\u015fitli teknolojiler aras\u0131ndan en g\u00f6ze batan se\u00e7enek <em>AWS Secrets Manager<\/em>&#8216;d\u0131r diyebiliriz.<\/p>\n<h4>AWS Secrets Manager<\/h4>\n<p>Uygulamalar\u0131n\u0131z\u0131n gizli ve hassas verilerini son derece g\u00fcvenli bir \u015fekilde depolamak ve yap\u0131land\u0131rmak i\u00e7in \u00f6zel olarak tasarlanm\u0131\u015ft\u0131r. Ayr\u0131ca secret rotation, replication vs. gibi davran\u0131\u015flar\u0131 da bar\u0131nd\u0131rmaktad\u0131r.<\/p>\n<p>AWS Secrets Manager, test edilebilmesi i\u00e7in 30 g\u00fcnl\u00fck bir deneme s\u00fcresi sunmaktad\u0131r. Sonras\u0131nda saklanan her gizli veri i\u00e7in ayl\u0131k 0,40 ABD dolar\u0131 (replikasyonlar dahil) \u00f6denmesi gerekecektir. Bunun d\u0131\u015f\u0131nda, her 10.000 API request&#8217;e kar\u015f\u0131l\u0131k hassas verilerin sunulmas\u0131 veya yeni yap\u0131land\u0131rmalar\u0131n ger\u00e7ekle\u015ftirilmesi i\u00e7in ayl\u0131k yakla\u015f\u0131k 0,05 ABD dolar\u0131 tutar\u0131nda bir \u00fccretlendirme s\u00f6z konusu olacakt\u0131r.<\/p>\n<h4>AWS Secrets Manager Dashboard&#8217;unu Ke\u015ffedelim<\/h4>\n<p>\u0130lk olarak AWS Secrets Manager&#8217;\u0131n dashboard&#8217;unu ke\u015ffederek ba\u015flayal\u0131m&#8230; Bunun i\u00e7in AWS Management Console \u00fczerinden a\u015fa\u011f\u0131daki gibi ilgili servisi aratal\u0131m;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"894\" height=\"172\" class=\"aligncenter size-full wp-image-28002\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim.png 894w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-300x58.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-768x148.png 768w\" sizes=\"auto, (max-width: 894px) 100vw, 894px\" \/><\/a>Ard\u0131ndan a\u00e7\u0131lan sayfada <em>Store a new secret<\/em> butonuna t\u0131klayarak test ama\u00e7l\u0131 baz\u0131 yap\u0131land\u0131rmalarda bulunmak i\u00e7in kurcalamaya ba\u015flayal\u0131m. Bunun i\u00e7in bir sonraki sayfada <em>&#8216;Other type of secret&#8217;<\/em> sekmesini se\u00e7erek herhangi bir yap\u0131land\u0131rma de\u011ferini key\/value format\u0131nda girelim.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"1334\" height=\"448\" class=\"aligncenter size-full wp-image-28003\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1.png 1334w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1-300x101.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1-1024x344.png 1024w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-1-768x258.png 768w\" sizes=\"auto, (max-width: 1334px) 100vw, 1334px\" \/><\/a>Tabi yap\u0131land\u0131rmay\u0131 bu \u015fekilde olu\u015fturmam\u0131z bizim i\u00e7in yeterli olacakt\u0131r. Ancak, \u00e7al\u0131\u015fma s\u00fcrecinde bu hassas veriyi \u00e7ok daha kolay bir \u015fekilde elde edebilmek i\u00e7in bir sonraki ad\u0131mda secret name de\u011feri ve bir yandan da yan\u0131nda iste\u011fe ba\u011fl\u0131 olarak k\u0131sa bir a\u00e7\u0131klama tan\u0131ml\u0131yor olaca\u011f\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-2.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"337\" height=\"324\" class=\"aligncenter size-full wp-image-28004\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-2.png 337w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-2-300x288.png 300w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/a>Ayr\u0131ca y\u00fcksek eri\u015filebilirlik sa\u011flamak i\u00e7in a\u015fa\u011f\u0131daki gibi <em>Replicate secret<\/em> k\u0131sm\u0131nda yap\u0131land\u0131rmada bulunabilir ve b\u00f6ylece di\u011fer AWS region&#8217;lar\u0131nda hassas verilerin read-only kopyalar\u0131n\u0131 olu\u015fturabilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-3.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"661\" height=\"256\" class=\"aligncenter size-full wp-image-28005\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-3.png 661w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-3-300x116.png 300w\" sizes=\"auto, (max-width: 661px) 100vw, 661px\" \/><\/a>Tabi bu \u00f6zelli\u011fin ekstradan \u00fccretlendirilece\u011fini de hatr\u0131n\u0131zdan \u00e7\u0131karmaman\u0131z\u0131 \u00f6neririm&#8230; Ve son olarak bir sonraki b\u00f6l\u00fcmde de a\u015fa\u011f\u0131daki gibi <em>automatic rotation<\/em> yap\u0131land\u0131rmas\u0131nda bulunabilirsiniz. Ancak bu k\u0131sm\u0131 \u015fimdilik atlayacak ve makalemizin ilerleyen b\u00f6l\u00fcmlerinde ayr\u0131ca ele al\u0131yor olaca\u011f\u0131z.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-4.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-4.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"487\" height=\"172\" class=\"aligncenter size-full wp-image-28006\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-4.png 487w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-4-300x106.png 300w\" sizes=\"auto, (max-width: 487px) 100vw, 487px\" \/><\/a>Evet, b\u00f6ylece dashboard \u00fczerinden <em>AWS Secrets Manager<\/em> servisinde yap\u0131land\u0131r\u0131lm\u0131\u015f bir de\u011ferimiz mevcuttur diyebiliriz. \u015eimdi gelin bu yap\u0131land\u0131rmaya Asp.NET Core Web API \u00fczerinden nas\u0131l eri\u015febilece\u011fimizi teknik olarak inceleyelim&#8230;<\/p>\n<h4>AWS Secrets Manager&#8217;a AWS .NET SDK \u0130le Eri\u015fim<\/h4>\n<p>\u00d6ncelikle bo\u015f bir Asp.NET Core Web API uygulamas\u0131 olu\u015ftural\u0131m ve ard\u0131ndan AWS Secrets Manager SDK&#8217;ini a\u015fa\u011f\u0131daki talimatlar arac\u0131l\u0131\u011f\u0131yla projeye kural\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nInstall-Package AWSSDK.Extensions.NETCore.Setup\r\nInstall-Package AWSSDK.SecretsManager\r\n<\/pre>\n<\/div>\n<p>Bu kurulumdan sonra &#8216;Program.cs&#8217; dosyas\u0131nda a\u015fa\u011f\u0131daki gibi \u00e7al\u0131\u015fma sergileyebiliriz;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing Amazon.SecretsManager;\r\nusing Amazon.SecretsManager.Model;\r\n\r\nvar builder = WebApplication.CreateBuilder(args);\r\n\r\nbuilder.Services.AddDefaultAWSOptions(builder.Configuration.GetAWSOptions());\r\nbuilder.Services.AddAWSService&lt;IAmazonSecretsManager&gt;();\r\nvar app = builder.Build();\r\n\r\napp.MapGet(&quot;\/secret&quot;, async (IAmazonSecretsManager amazonSecretsManager) =&gt;\r\n{\r\n    var request = new GetSecretValueRequest()\r\n    {\r\n        SecretId = &quot;prod\/XProject\/ConnectionString&quot;\r\n    };\r\n\r\n    var data = await amazonSecretsManager.GetSecretValueAsync(request);\r\n    return Results.Ok(data.SecretString);\r\n});\r\n\r\napp.Run();\r\n<\/pre>\n<\/div>\n<p>Burada g\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere 6. ve 7. sat\u0131rlarda AWS SDK dependency&#8217;leri IoC Container&#8217;a eklenmekte ve \u00f6zellikle AWS Secrets Manager&#8217;\u0131n servisi olan <em>IAmazonSecretsManager<\/em> yap\u0131land\u0131r\u0131lmaktad\u0131r. Akabinde, <code>\/secret<\/code> endpoint&#8217;i i\u00e7erisinde <code>prod\/XProject\/ConnectionString<\/code> &#8216;SecretId&#8217; de\u011ferini temsil eden bir talep\/request nesnesi olu\u015fturulmakta ve <code>GetSecretValueAsync<\/code> metoduyla bu de\u011fere kar\u015f\u0131l\u0131k veri istenmektedir. Bu kadar basit&#8230; Bu geli\u015ftirme neticesinde uygulamay\u0131 derleyip, \u00e7al\u0131\u015ft\u0131r\u0131rsak e\u011fer ilgili endpoint&#8217;e yap\u0131lan iste\u011fe kar\u015f\u0131n a\u015fa\u011f\u0131daki response&#8217;un elde edildi\u011fini g\u00f6rmekteyiz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-5.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-5.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"782\" height=\"119\" class=\"aligncenter size-full wp-image-28009\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-5.png 782w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-5-300x46.png 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-5-768x117.png 768w\" sizes=\"auto, (max-width: 782px) 100vw, 782px\" \/><\/a><\/p>\n<h4>AWS Secrets&#8217;\u0131 Asp.NET Core \u0130le Runtime&#8217;da Entegre Etme<\/h4>\n<p>Esas\u0131nda, Asp.NET Core uygulamalar\u0131nda AWS Secrets Manager&#8217;dan hassas verilerin okunmas\u0131 bu kadar basit. Ancak, ger\u00e7ek bir uygulamada bu tarz hassas verilerin kullan\u0131m\u0131 tabi ki de yukar\u0131daki gibi Get iste\u011fi \u00fczerine kurulu olmasa gerek, \u00f6yle de\u011fil mi? \u0130deal olarak, bu hassas verilerin <code>builder.Configuration<\/code> \u00fczerinden yap\u0131land\u0131r\u0131lmas\u0131 beklenir! Ee bunun i\u00e7inde bu verilerin <em>appsettings.json<\/em> dosyas\u0131n\u0131n ya da environment&#8217;\u0131n bir par\u00e7as\u0131 olmas\u0131 gerekmektedir.<\/p>\n<p>Bunun i\u00e7in hassas verilere her ihtiya\u00e7 durumunda, AWS&#8217;ye istek g\u00f6nderilmeksizin t\u00fcm bu verilerin AWS Secrets Manager&#8217;dan elde edilebilmesi i\u00e7in uygulama ba\u015flat\u0131l\u0131rken k\u00fcm\u00fclatif bir \u015fekilde \u00e7ekilmeleri gerekmektedir. Evet, bu i\u015flem i\u00e7in de AWS Secrets Manager&#8217;\u0131 Configuration Provider olarak eklememiz gerekecektir. Bunu da yapabilmek i\u00e7in <a href=\"https:\/\/www.nuget.org\/packages\/Amazon.Extensions.Configuration.SystemsManager\" target=\"_blank\">Amazon.Extensions.Configuration.SystemsManager<\/a> k\u00fct\u00fcphanesinden istifade edece\u011fiz.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nInstall-Package Amazon.Extensions.Configuration.SystemsManager\r\n<\/pre>\n<\/div>\n<p>Burada tek yapmam\u0131z gereken a\u015fa\u011f\u0131daki gibi bir yap\u0131land\u0131rmada bulunmakt\u0131r;<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nif (!builder.Environment.IsDevelopment())\r\n    builder.Configuration.AddSystemsManager(source =&gt;\r\n    {\r\n        source.Path = $&quot;\/aws\/reference\/secretsmanager\/{builder.Environment.EnvironmentName}\/XProject\/ConnectionString&quot;;\r\n        source.Optional = false;\r\n        source.ReloadAfter = TimeSpan.FromMinutes(5);\r\n    });\r\n<\/pre>\n<\/div>\n<p>Kodu incelerseniz e\u011fer development environment&#8217;\u0131n\u0131n d\u0131\u015f\u0131ndaki ortamlarda, <code>AddSystemsManager<\/code> metoduyla, AWS Secrets Manager&#8217;da bulunan uygulamayla ilgili t\u00fcm yap\u0131land\u0131rma verileri uygulamaya eklenmektedir. Burada <code>source.Optional<\/code> \u00f6zelli\u011fine <em>false<\/em> de\u011ferini vererek, belirtilen path&#8217;de ki yap\u0131land\u0131rma verilerinin kesinlikle uygulamaya kat\u0131lmas\u0131 gerekti\u011fini aksi taktirde uygulaman\u0131n hata f\u0131rlataca\u011f\u0131n\u0131 ifade ediyor, <code>source.ReloadAfter<\/code> \u00f6zelli\u011fiyle de AWS&#8217;den al\u0131nan bu hassas verilerin ne kadar periyot aral\u0131\u011f\u0131nda yeniden \u00e7ekilmesi gerekti\u011fini belirtiyoruz. B\u00f6ylece uygulamaya dair g\u00fcncel yap\u0131land\u0131rma verilerini sunucular\u0131 yeniden ba\u015flatmaya gerek kalmaks\u0131z\u0131n rotasyon edebiliyoruz. <u>Tabi bu rotasyonun ek maliyetler do\u011furaca\u011f\u0131n\u0131 ve belirtilen periyodik s\u00fcre a\u015f\u0131m\u0131yla ters orant\u0131l\u0131 olacak \u015fekilde AWS faturalar\u0131n\u0131za bu maliyetlerin yans\u0131t\u0131laca\u011f\u0131n\u0131 unutmay\u0131n\u0131z.<\/u><\/p>\n<p>\u015eimdi bu \u00e7al\u0131\u015fmay\u0131 test edebilmek i\u00e7in uygulaman\u0131n <em>launchSettings.json<\/em> dosyas\u0131ndaki profiller \u00fczerinden birinin (ya da yeni olu\u015fturulan bir profilin) <em>ASPNETCORE_ENVIRONMENT<\/em> de\u011ferini &#8216;prod&#8217; olarak de\u011fi\u015ftirelim.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;$schema&quot;: &quot;https:\/\/json.schemastore.org\/launchsettings.json&quot;,\r\n  &quot;profiles&quot;: {\r\n    .\r\n    .\r\n    .,\r\n    &quot;prod&quot;: {\r\n      &quot;commandName&quot;: &quot;Project&quot;,\r\n      &quot;dotnetRunMessages&quot;: true,\r\n      &quot;launchBrowser&quot;: true,\r\n      &quot;applicationUrl&quot;: &quot;https:\/\/localhost:7155;http:\/\/localhost:5097&quot;,\r\n      &quot;environmentVariables&quot;: {\r\n        &quot;ASPNETCORE_ENVIRONMENT&quot;: &quot;prod&quot;\r\n      }\r\n    }\r\n  }\r\n}\r\n<\/pre>\n<\/div>\n<p>Ve bu i\u015flem neticesinde uygulamay\u0131 derleyip, bu profil ile tekrar aya\u011fa kald\u0131ral\u0131m.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\ndotnet run --launch-profile &quot;prod&quot;\r\n<\/pre>\n<\/div>\n<p><a href=\"https:\/\/localhost:7155\/connectionstring\" target=\"_blank\">https:\/\/localhost:7155\/connectionstring<\/a> adresi \u00fczerinden bir istekte bulundu\u011fumuz taktirde a\u015fa\u011f\u0131daki gibi hassas verilerin AWS Secrets Manager&#8217;dan sorunsuz bir \u015fekilde y\u00fcklendi\u011fini g\u00f6rebilirsiniz.<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-6.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-6.png\" alt=\"Asp.NET Core \u0130le AWS Secrets Manager&#039;\u0131 Ke\u015ffedelim\" width=\"765\" height=\"72\" class=\"aligncenter size-full wp-image-28011\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-6.png 765w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2025\/08\/Asp.NET-Core-Ile-AWS-Secrets-Manageri-Kesfedelim-6-300x28.png 300w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/a><\/p>\n<h4>Version Stages<\/h4>\n<p>\u0130\u00e7eri\u011fimizin sonlar\u0131na do\u011fru AWS Secrets Manager&#8217;\u0131n \u00f6nemli kavramlar\u0131ndan biri olan <em>Versioning<\/em>&#8216;e de temas etmekte fayda g\u00f6rmekteyim. Bu \u00f6zellik ile AWS&#8217;de tutulan hassas verilere dair bir de\u011fi\u015fiklik s\u00f6z konusu oldu\u011funda s\u00fcr\u00fcmleme ger\u00e7ekle\u015ftirebilmekte ve b\u00f6ylece k\u0131smi olarak bir g\u00fcvenlik sa\u011flanabilmektedir. D\u00fc\u015f\u00fcn\u00fcrseniz bu, ihtiya\u00e7 dahilinde olduk\u00e7a kritik arz edebilen bir \u00f6zelliktir diyebiliriz. Gizli bir veri g\u00fcncellenecek, ard\u0131ndan eski s\u00fcr\u00fcmlere eri\u015fim sa\u011flanmas\u0131 i\u00e7in otomatik versiyonlama ger\u00e7ekle\u015ftirilecektir. G\u00fcn gelecek basit bir hatadan kaynakl\u0131 bir kriz an\u0131nda eski yap\u0131land\u0131rmaya geri d\u00f6n\u00fc\u015f gerekecek ve bu \u00f6zellik sayesinde h\u0131zl\u0131ca hareket edilerek, uygulama korunmu\u015f olacakt\u0131r.<\/p>\n<p>Burada unutulmamas\u0131 gereken husus \u015fudur ki; verinin t\u00fcm s\u00fcr\u00fcmleri de\u011fil, yaln\u0131zca <em>g\u00fcncel<\/em> (<code>AWSCURRENT<\/code>) ve <em>\u00f6nceki<\/em> (<code>AWSPREVIOUS<\/code>) versiyonlar tutulmaktad\u0131r.<\/p>\n<p>E\u011fer ki, bir yap\u0131land\u0131rman\u0131n bir \u00f6nceki s\u00fcr\u00fcm\u00fc elde edilmek isteniyorsa, request&#8217;in a\u015fa\u011f\u0131daki gibi <code>AWSPREVIOUS<\/code> <em>VersionStage<\/em> de\u011feri ile yap\u0131lmas\u0131 yeterli olacakt\u0131r.<\/p>\n<div style=\"font-size:12px;\">\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\napp.MapGet(&quot;\/previous-version&quot;, async (IAmazonSecretsManager amazonSecretsManager) =&gt;\r\n{\r\n    var request = new GetSecretValueRequest()\r\n    {\r\n        SecretId = &quot;prod\/XProject\/ConnectionString&quot;,\r\n        VersionStage = &quot;AWSPREVIOUS&quot;\r\n    };\r\n\r\n    var data = await amazonSecretsManager.GetSecretValueAsync(request);\r\n    return Results.Ok(data.SecretString);\r\n});\r\n<\/pre>\n<\/div>\n<p>Nihai olarak;<br \/>\nBu i\u00e7eri\u011fimizde, AWS Secrets Manager servisiyle uygulamalar\u0131m\u0131z\u0131n hassas verilerini g\u00fcvenli bir \u015fekilde depolaman\u0131n farkl\u0131 bir yolunun fark\u0131ndal\u0131\u011f\u0131na eri\u015fmi\u015f ve bir yandan da Asp.NET Core ile birlikte AWS SDK&#8217;i e\u015fli\u011finde kullan\u0131m\u0131n\u0131 incelemi\u015f olduk. Art\u0131k ihtiya\u00e7 dahilinde AWS&#8217;nin bu nimetinden istifade ka\u00e7\u0131n\u0131lmazd\u0131r diyebiliriz \ud83d\ude42<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<p>Not: \u00d6rnek \u00e7al\u0131\u015fmaya a\u015fa\u011f\u0131daki GitHub adresinden eri\u015febilirsiniz.<br \/>\n<a href=\"https:\/\/github.com\/gncyyldz\/AWSSecretManagerExample\" target=\"_blank\">https:\/\/github.com\/gncyyldz\/AWSSecretManagerExample<\/a><\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde AWS Secrets Manager ile Asp.NET Core&#8217;da gizli verilerin g\u00fcvenli\u011fini sa\u011flamay\u0131 tart\u0131\u015facak ve secret verilerin y\u00f6netiminin \u00e7e\u015fitli y\u00f6nlerini ve kavramlar\u0131n\u0131 inceleyece\u011fiz. Biliyorsunuz ki, her yaz\u0131l\u0131m\u0131n mutlaka API anahtarlar\u0131, mail \u015fifreleri, veritaban\u0131 ba\u011flant\u0131&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":28013,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4730],"tags":[5247,4731,5434,5433],"class_list":["post-27998","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","tag-asp-net-core-aws","tag-aws","tag-aws-secret","tag-aws-secrets-manager"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27998","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=27998"}],"version-history":[{"count":7,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27998\/revisions"}],"predecessor-version":[{"id":28014,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/27998\/revisions\/28014"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/28013"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=27998"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=27998"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=27998"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}