MS_ConfigEncryption - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ã
-
.NET ã® config
-
DevPartner ã®è§£æçµæã§æ°ãã€ããã®ã ãã©ã
*.config ã® RSA æå·å㯠connectionStringSection 以å€ãå¯èœãããã
è£è¶³ïŒæ¬ããŒãžã®å¯Ÿè±¡ã¯ .NET FrameworkïŒ: æ¬ããŒãžãæ±ã
**ä¿è·ãããæ§æïŒProtected ConfigurationïŒ**ã¯ã
System.Configurationã®ä»çµã¿ã§ããã
.NET Core 以éã«ã¯ååšããªããã.NET Frameworkã Web.config / App.config â aspnet_regiis ã§ãã»ã¯ã·ã§ã³åäœã«æå·åãã§ãã â æ¬ããŒãž ã.NETïŒCore ç³»ïŒã appsettings.json â ãæå·åã®ä»çµã¿ã¯ãªãã â 代ããã«ãç§å¯æ å ±ã config ã«çœ®ããªããèšèšã«ãã ã»ç°å¢å€æ° ã»User SecretsïŒéçºæïŒ ã»ãKey Vault / Secrets ManagerãïŒæ¬çªïŒâ ã»ãããŒãžã IDïŒããããç§å¯æ å ±ãæããªãïŒèšèšææ³ããé ãããããæããªãããžç§»ã£ãââ
ãšããã®ãæãéèŠãªå€åã§ããã
詳现㯠FaaS config ã«ãèšãããæ¬ããŒãžã¯ãæ¢åã® .NET Framework è³ç£ãä¿å®ããéã«å¿ èŠãªç¥è
ãšããŠèªãã®ã劥åœã§ããã
app.config ã®ãã«ãåºåãã*.exe.config ã«ãªãã
ASP.NET ã® Web ã¢ããªã±ãŒã·ã§ã³æ¯ã®èšå®
ãã·ã³ã®èšå®ãšããŠãæå·åã»åŸ©å·åã眲åã»æ€èšŒã®ããŒãå«ãã
- ASP.NET ãš MachineKey ã®é¢ä¿ããŸãšããŠã¿ã - ãã°ããéèš
https://blog.shibayan.jp/entry/20130331/1364728631
appSettingsSection ãåãåºãã *.config ãªã©ã
éåžžãæå·åã®å¿ èŠãªæ©å¯æ å ±ãåãã Section ã aspnet_regiis.exe ã§æå·åã
ã«ã¹ã¿ã ã¢ããªã±ãŒã·ã§ã³ã®èšå®
DBMS ãªã©ãžã®ãæ¥ç¶æåå
åœè£ è³æ Œæ å ±
ã»ãã·ã§ã³ç¶æ ãããã€ãçšã®æ¥ç¶æåå
-
以äžã® Section ã¯éåžžãæå·åãåºæ¥ãªãã
- processModel
- runtime
- mscorlib
- startup
- system.runtime.remoting
- configProtectedData
- satelliteassemblies
- cryptographySettings
- cryptoNameMapping
- cryptoClasses
-
ãã ããaspnet_setreg.exe ããŒã«ã䜿çšããã°æå·åãå¯èœã
- äŸ
- ASP.NET ãŠãŒãã£ãªãã£ã䜿çšããŠè³æ Œæ
å ±ããã³ã»ãã·ã§ã³ç¶æ
ã®æ¥ç¶æååãæå·åããæ¹æ³
https://support.microsoft.com/ja-jp/help/329290/
- ASP.NET ãŠãŒãã£ãªãã£ã䜿çšããŠè³æ Œæ
å ±ããã³ã»ãã·ã§ã³ç¶æ
ã®æ¥ç¶æååãæå·åããæ¹æ³
- äŸ
è£è¶³ïŒãªãæå·åã§ããªãã»ã¯ã·ã§ã³ãããã®ãïŒ: äžèЧã®é¡ã¶ãã«ã¯
çç±ãããããæå·åã§ããªãçç±ã â ãæå·åã®ä»çµã¿ããå ã«èªãŸããã configProtectedData ⊠埩å·ãããã€ãã®å®çŸ©ãã®ãã® cryptographySettings / cryptoClasses ⊠æå·ã¢ã«ãŽãªãºã ã®å®çŸ© â ãããæå·åãããšã埩å·ã§ããªããªããïŒé¶ãšåµïŒâ â¡ ãCLR ã®èµ·ååã«ããã€ãã£ã ã³ãŒããèªãã startup / runtime / mscorlib â ãããŒãžã ã³ãŒãã®åŸ©å·åŠçãåãåã«å¿ èŠ â¢ ãIIS ã®ã¯ãŒã«ãŒ ããã»ã¹èµ·åæã«èªãŸããã processModel ⊠ããã»ã¹ã®å®è¡ ID ãå«ã â w3wp.exe ãèµ·åããåã«å¿ èŠ
aspnet_setreg.exeãå¥éçšæãããçç±ããããã«ãããaspnet_setreg ã¯ãã¬ãžã¹ããªã« DPAPI ã§æå·åããŠæ ŒçŽããã config ããã¯åç §ã ããæžã <processModel userName="registry:HKLM\SOFTWARE\MyApp\ASPNET_SETREG,userName" password="registry:HKLM\SOFTWARE\MyApp\ASPNET_SETREG,password" /> â config åŽã¯ãå¹³æã®åç §ããå®éã®å€ã¯ã¬ãžã¹ããªã«ãã â ã»ã¯ã·ã§ã³ã®æå·åãšã¯ãå¥ã®ä»çµã¿ãã§ãã â
identityã»ã¯ã·ã§ã³ã¯ã
ASP.NETãšSSRSã®é£æºãšèªèšŒ ã§è§Šãã
<identity impersonate="true" userName="..." password="..." />ã®
å¹³æãã¹ã¯ãŒãåé¡ã«çŽçµããã
çŸåšã¯ gMSA / ãããŒãžã ID ã䜿ãã
ãããããã¹ã¯ãŒãã config ã«æžããªãã®ãæ£ããã
以äžã®æ¹æ³ã§æå·åã§ããã
CNG ã®ãããã€ãã䜿çšããŠããæš¡æ§ã
-
CNG ããŒã³ã³ããïŒéµã³ã³ããïŒã䜿çšããã
-
ãã®ãããããŒã³ã³ããïŒéµã³ã³ããïŒã®ã¢ã¯ã»ã¹æš©äºã ã§ãããããšãããæš¡æ§ã
-
ãŸããéçºãµãŒãããéçšãµãŒããžã®ãããã€ã®ã·ããªãªã
Web ãã¡ãŒã ã§ã® RSA æå·åã·ããªãªã§ã¯ã
ã«ã¹ã¿ã ã® RSA æå·éµããšã¯ã¹ããŒãïŒã€ã³ããŒãããããšã§å¯Ÿå¿ããã
-
-
åè
- web.configã®æå·å | ã©ã£ãšãã£ãšãµãã
https://blogonos.wordpress.com/2006/02/23/web-config%E3%81%AE%E6%9A%97%E5%8F%B7%E5%8C%96/
- web.configã®æå·å | ã©ã£ãšãã£ãšãµãã
è£è¶³ïŒãã¢ã¯ã»ã¹æš©äºã ã§ããããã®äžèº«ïŒ: åæãèšé²ããŠãã
ãã®ãããã©ããã¯ãå®åã§æãé »ç¹ã«èµ·ããåé¡ãªã®ã§å ·äœåããŠããããæå·åãšåŸ©å·ã¯å¥ã®äž»äœãè¡ãã æå·åïŒ éçºè / é 眮æ åœè ïŒç®¡çè æš©éïŒ aspnet_regiis -pe ... ãå®è¡ 埩å·ãïŒ ãIIS ã®ã¢ããªã±ãŒã·ã§ã³ ããŒã« IDãïŒå®è¡æïŒ â w3wp.exe ãéµã³ã³ãããèªã â ã埩å·ããåŽã«éµã³ã³ãããžã®ã¢ã¯ã»ã¹æš©ããªããšèœã¡ããâ# éµã³ã³ãããžã®ã¢ã¯ã»ã¹æš©ãä»äžããïŒãããå¿ããŠèœã¡ãïŒ aspnet_regiis -pa "NetFrameworkConfigurationKey" "IIS APPPOOL\MyAppPool"å žåçãªãšã©ãŒ:
ãæ§æã»ã¯ã·ã§ã³ã埩å·åã§ããŸããã§ããã RSA ã㌠ã³ã³ãããŒãéãããšãã§ããŸããã§ãããã â -pa ã§ã¢ã¯ã»ã¹æš©ãä»äžããŠããªã â ãŸãã¯ã¢ããªã±ãŒã·ã§ã³ ããŒã« ID ã倿ŽããåŸã«ä»ãçŽããŠããªã âWeb ãã¡ãŒã ïŒè€æ°å°ïŒã§ã®éçš:
ãæ¢å®ã®éµã¯ãã·ã³åºæã â A ãµãŒãã§æå·åãã config ã¯ãB ãµãŒãã§ã¯åŸ©å·ã§ããªã ã察å¿ã â ã«ã¹ã¿ã ã®éµã³ã³ãããäœã aspnet_regiis -pc "MyKeys" -exp â¡ ããšã¯ã¹ããŒããããïŒ-exp ãä»ããªããšãšã¯ã¹ããŒãã§ããªãïŒâ aspnet_regiis -px "MyKeys" keys.xml -pri â¢ å šãµãŒãã«ã€ã³ããŒã aspnet_regiis -pi "MyKeys" keys.xml ⣠åãµãŒãã§ã¢ã¯ã»ã¹æš©ãä»äž aspnet_regiis -pa "MyKeys" "IIS APPPOOL\MyAppPool"ãéçšäžã®æ³šæã ã»ãšã¯ã¹ããŒããã keys.xml ã¯ãç§å¯éµãã®ãã®ã â å®å šã«æ±ããäœæ¥åŸã¯ç¢ºå®ã«ç Žæ£ãã â ã»éµã倱ããšåŸ©å·ã§ããªãïŒ config ãäœãçŽãããšã«ãªã ã»ãã®ç ©éãããçŸåš Key Vault çã®å€éšä¿ç®¡ã«ç§»ã£ãçç±ã§ãããç§»è¡ã¡ã¢: åæã¯ãCNG ã®ãããã€ãã䜿çšããŠããæš¡æ§ããš
æšæž¬åœ¢ã§æžããŠãããã
RsaProtectedConfigurationProviderã䜿ãã®ã¯
åŸæ¥ã® CryptoAPIïŒCAPIïŒã® RSA ã㌠ã³ã³ããã§ãã
ïŒCNG ã§ã¯ãªãïŒã
æ ŒçŽå Žæã¯ä»¥äžã«ãªãã%ALLUSERSPROFILE%\Microsoft\Crypto\RSA\MachineKeys\ ïŒãã·ã³ ã¬ãã«ïŒ %APPDATA%\Microsoft\Crypto\RSA\ ïŒãŠãŒã¶ãŒ ã¬ãã«ïŒ
- æ¢å®ã®ãããã€ã
- RSA å ¬é鵿å·åã䜿çšããŠãããŒã¿ã®æå·åãšæå·åè§£é€
- Windows ããŒã¿ä¿è· API (DPAPI) ã䜿çšããŠãããŒã¿ã®æå·åãšæå·åè§£é€
è£è¶³ïŒ2 ã€ã®ãããã€ãã®äœ¿ãåãïŒ:
RSAProtectedConfigurationProvider DPAPIProtectedConfigurationProvider æ¹åŒ RSAïŒéµã³ã³ããïŒ DPAPIïŒãã·ã³éµ / ãŠãŒã¶ãŒéµïŒ éµã®æã¡åºã ã§ããïŒãšã¯ã¹ããŒã/ã€ã³ããŒãïŒ ã§ããªã â Web ãã¡ãŒã å¯ïŒéµãé ãïŒ äžå¯ïŒ1 å°ããšã«æå·åãå¿ èŠïŒ èšå®ã®æé éµã³ã³ããã®äœæã»æš©éä»äž å°ãªãïŒãã䜿ããïŒ æ¢å® ãã¡ã â ã䜿ãåãã 1 å°æ§æã»ç°¡äŸ¿ãåªå â DPAPI Web ãã¡ãŒã ã»é 眮ã®èªåå â RSA âDPAPI ã®
useMachineProtectionã«æ³šæããã<configProtectedData> <providers> <add name="MyDPAPI" type="System.Configuration.DpapiProtectedConfigurationProvider, ..." useMachineProtection="true" /> <!-- â ãã·ã³åäœãæ¢å®ã¯ true --> </providers> </configProtectedData>useMachineProtection="true" ⊠ãåããã·ã³ãªã誰ã§ã埩å·ã§ããã â ä»ã®ã¢ããªãããèªããïŒé²åŸ¡ã匱ãïŒ useMachineProtection="false" ⊠ãŠãŒã¶ãŒåäœ â ãµãŒãã¹ ã¢ã«ãŠã³ãã®ãããã¡ã€ã«ãèŠã
-
Web.config ããæå·ååºæ¥ãªãïŒãã£ã¬ã¯ããªæå®ãããµããŒãããªãïŒã®ã§ã
*.config ã察象ãšããå Žåã¯ãWeb.config ã«ãªããŒã ã㊠aspnet_regiis ã§æå·ååŠçãããã -
åè
- æ§æã»ã¯ã·ã§ã³ã®æå·åãšè€åå
https://learn.microsoft.com/ja-jp/previous-versions/aspnet/zhhddkxy(v=vs.100) - ãã¥ãŒããªã¢ã« : ä¿è·ãããæ§æã䜿çšããæ§ææ
å ±ã®æå·å
https://learn.microsoft.com/ja-jp/previous-versions/aspnet/dtkwfdky(v=vs.100)
- æ§æã»ã¯ã·ã§ã³ã®æå·åãšè€åå
è£è¶³ïŒ
aspnet_regiisã®äœ¿ãæ¹ãšèœãšã穎ïŒ: åæãèšé²ããŠãã
**ãWeb.config ã«ãªããŒã ããŠæå·åããã**ãšããåé¿çã¯ã
å®åã§ãã䜿ãããææ³ã§ããã# ç©çãã£ã¬ã¯ããªãæå®ããŠæå·åããïŒ-pefïŒ aspnet_regiis -pef "connectionStrings" "C:\MyApp" # â ã»ã¯ã·ã§ã³å â Web.config ããããã©ã«ã # ä»®æ³ãã¹ãæå®ããå ŽåïŒ-peïŒ aspnet_regiis -pe "connectionStrings" -app "/MyApp" # åŸ©å· aspnet_regiis -pdf "connectionStrings" "C:\MyApp"ãApp.config ãæå·åããæé ïŒåæã®åé¿çïŒã â App.config â Web.config ã«ãªããŒã â¡ aspnet_regiis -pef ã§æå·å ⢠Web.config â App.config ã«æ»ã ⣠ãã«ãåºåã® MyApp.exe.config ãšããŠé 眮 â ãã¹ã¯ããã ã¢ããªã® config ãæå·åããå®ç³èœãšã穎:
â ã32bit / 64bit ã§ aspnet_regiis ã®å Žæãéãã %WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe %WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe â éµã³ã³ããã¯å ±éã ããå®è¡ããåŽã¯ç°å¢ã«åããã â¡ ãæå·åãã config ã¯ãœãŒã¹ç®¡çã«å ¥ããªãã â ç°å¢ããšã«éµãéããããä»ç°å¢ã§åŸ©å·ã§ããªã â å¹³æããã³ãã¬ãŒããšããŠæã¡ããé 眮æã«æå·åããã â ⢠ãæå·åããŠããé ããŠãããã ãã â ãµãŒãã«ç®¡çè æš©éã§å ¥ãã人ã¯åŸ©å·ã§ãã â ã¢ããªèªèº«ã埩å·ã§ããïŒ ã¢ããªãä¹ã£åãã°èªãã â ãé²åŸ¡ã®æ·±ãã® 1 å±€ãã§ãã£ãŠãäžèœã§ã¯ãªãæå·ååŸã® Web.config ã¯ä»¥äžã®ããã«ãªãã
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" ...> <CipherData><CipherValue>rXbT8h...</CipherValue></CipherData> </EncryptedData> </connectionStrings>ã¢ããªåŽã®ã³ãŒãã¯å€æŽäžèŠã§ããã
// æå·åãããŠããŠããèªã¿æ¹ã¯åãïŒå®è¡æã«èªåã§åŸ©å·ãããïŒâ var cs = ConfigurationManager.ConnectionStrings["MyDb"].ConnectionString;ãã®**ãã¢ããªã®ã³ãŒããå€ããã«æžãã**ç¹ãã
ä¿è·ãããæ§æã®æå€§ã®å©ç¹ã§ããã
SectionInformation.ProtectSection ã¡ãœãããConfiguration.Save ã¡ãœããã䜿çšããã
-
ASP.NET ãã
- ASP.NETã®æ§æãã¡ã€ã«ãæå·åãã: ãã SE ã®ã€ã¶ãã
http://fnya.cocolog-nifty.com/blog/2009/05/aspnet-a98d.html
- ASP.NETã®æ§æãã¡ã€ã«ãæå·åãã: ãã SE ã®ã€ã¶ãã
-
Installer ãã
- yan note: .NETãæ§æãã¡ã€ã«app.configã®æå·å
http://yan-note.blogspot.jp/2010/06/netappconfig.html
- yan note: .NETãæ§æãã¡ã€ã«app.configã®æå·å
-
Microsoft Learn > .NET éçº > .NET Framework 4.6 and 4.5 > .NET Framework ã¯ã©ã¹ ã©ã€ãã©ãª
- Configuration.Save ã¡ãœãã (System.Configuration)
https://learn.microsoft.com/ja-jp/dotnet/api/system.configuration.configuration.save - SectionInformation.ProtectSection ã¡ãœãã (String) (System.Configuration)
https://learn.microsoft.com/ja-jp/dotnet/api/system.configuration.sectioninformation.protectsection
- Configuration.Save ã¡ãœãã (System.Configuration)
è£è¶³ïŒAPI ã§è¡ãå Žåã®å®è£ ïŒ: åæãæãã 2 ã€ã®ã¡ãœããã§ã
ã€ã³ã¹ããŒã©ãååèµ·åæã«èªåæå·åã§ãããstatic void ProtectSection(string sectionName) { var config = ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None); var section = config.GetSection(sectionName); if (section != null && !section.SectionInformation.IsProtected) { section.SectionInformation.ProtectSection( "RsaProtectedConfigurationProvider"); section.SectionInformation.ForceSave = true; // â ãããèŠã â config.Save(ConfigurationSaveMode.Modified); } }ãæ³šæç¹ã ã»`ForceSave = true` ãä»ããªããšã 倿Žããªããšå€æãããŠãä¿åãããªããããšããã ã»config ãã¡ã€ã«ãžã®ãæžãèŸŒã¿æš©éããå¿ èŠ â Program Files é äžã¯ç®¡çè æš©éãèŠã ã»IIS é äžã§å®è¡æã«æå·åãããšã ãconfig ã®å€æŽã§ã¢ããªã±ãŒã·ã§ã³ ããŒã«ãåèµ·åãããâ â ååã¢ã¯ã»ã¹ãååž°çã«èµ°ããªãããæ³šæ
ProtectSectionã®å¯Ÿç§°ãšããŠUnprotectSectionããã
ïŒåŸ©å·ïŒãéçšæé æžã«åŸ©å·æ¹æ³ãæ®ããŠããããšã
è£è¶³ïŒçŸåšã®æšå¥šïŒãããã config ã«ç§å¯æ å ±ã眮ããªãïŒ: æ¬ããŒãžã®
æè¡ã¯ .NET Framework ã§ã¯æå¹ã ãã
çŸåšã®èšèšæéãæèšããŠãããâ éçºæ â User Secrets
dotnet user-secrets init dotnet user-secrets set "ConnectionStrings:MyDb" "Server=...;"ã»ãããžã§ã¯ãå€ïŒãŠãŒã¶ãŒ ãããã¡ã€ã«é äžïŒã«ä¿åããã ã»ããœãŒã¹ç®¡çã«çµ¶å¯Ÿã«å ¥ããªããâ ã»IConfiguration ããéåžžã©ããèªããâ¡ æ¬çª â Key Vault / Secrets Manager
builder.Configuration.AddAzureKeyVault( new Uri("https://myvault.vault.azure.net/"), new DefaultAzureCredential()); // â 以éãConfiguration["MyDb"] ã§èªããïŒå€ã¯ Key Vault ããïŒâ¢ æå â ç§å¯æ å ±ãã®ãã®ããªãã
// æ¥ç¶æååã«ãã¹ã¯ãŒããå«ããªãïŒEntra ID èªèšŒïŒ "Server=tcp:myserver.database.windows.net;Database=MyDb; Authentication=Active Directory Default;"ããããŒãžã ID ã®å©ç¹ã ã»ãã¹ã¯ãŒãããã©ãã«ãååšããªãã ã»ããŒããŒã·ã§ã³äžèŠ ã»æŒæŽ©ã®ãããããªã â â æå·åããŠé ããããæ ¹æ¬çã«åŒ·ãâ£ æŒæŽ©ãæ€ç¥ããä»çµã¿ãæã€
ã»GitHub ã® Secret Scanning / Push Protection ã»git-secrets / gitleaks ã CI ã«çµã¿èŸŒã ã»ãäžåºŠãªããžããªã«å ¥ã£ãç§å¯æ å ±ã¯ãå±¥æŽããæ¶ããªãã â æŒããããå¿ ãããŒããŒã·ã§ã³ãããïŒå±¥æŽã®æžãæããã確å®ïŒâ
- How To: RSA ã䜿çšã㊠ASP.NET 2.0 å
ã®æ§æã»ã¯ã·ã§ã³ãæå·åããæ¹æ³
https://learn.microsoft.com/ja-jp/previous-versions/msp-n-p/ff650304(v=pandp.10)
- ããããâªãªãŸããïŒ ïœã·ãããããŠãããããŒã®èšãèš³éèšïœ
- æ§æãã¡ã€ã«ã®æå·åïŒåŸ©å·å
- ïŒåç·šïŒ
http://blogs.wankuma.com/carbonara/archive/2009/03/28/170316.aspx - ïŒäžç·šïŒ
http://blogs.wankuma.com/carbonara/archive/2009/03/30/170434.aspx - ïŒåŸç·šïŒ
http://blogs.wankuma.com/carbonara/archive/0001/01/01/170475.aspx - ïŒè£è¶³ïŒ
http://blogs.wankuma.com/carbonara/archive/2009/04/08/170991.aspx
- ïŒåç·šïŒ
- æ§æãã¡ã€ã«ã®æå·åïŒåŸ©å·å
- ASP.NET Core ã§ã®éçºæã®ã¢ã㪠ã·ãŒã¯ã¬ããã®å®å
šãªä¿å
https://learn.microsoft.com/ja-jp/aspnet/core/security/app-secrets - Azure Key Vault ã®æ§æãããã€ããŒ
https://learn.microsoft.com/ja-jp/aspnet/core/security/key-vault-configuration - Azure ãªãœãŒã¹ã®ãããŒãžã ID
https://learn.microsoft.com/ja-jp/entra/identity/managed-identities-azure-resources/overview
Tags: ç§»è¡, .NETéçº, ã»ãã¥ãªãã£, æå·å