の秘密マネージャの設定プロバイダー.ネットコア


あなたが十分にASPを走らせる勇気があるならば.Google CloudプラットフォームのNETコアアプリケーションは、遅かれ早かれ、どのようにセキュアな方法でアプリケーションの設定を格納するかに関する質問に遭遇します.Azureでは、その目的のためにキーVaultを持っています.NETコアのおかげで組み込みの設定プロバイダーに感謝します.GCPでは、対応するサービスをGoogle Secret Managerと呼ぶ.
Secret Managerは、APIキー、パスワード、証明書、および他の機密データのための安全で便利なストレージシステムであり、確かにアプリケーションの設定を格納する良い場所です.しかし、ASPとの統合はありません.ボックスのネットコア.
恐れるな!ASP .NETコアはCustom configuration providersをサポートしており、Google Secret Managerのために開発を試みます.

SecretManagerConfigurationSource


まず、IconfigurationSourceを実装するクラスを作成する必要があります.我々のカスタムプロバイダーのインスタンスを返す唯一の目的は、我々がまもなく開発する.
public class SecretManagerConfigurationSource : IConfigurationSource
    {
        public IConfigurationProvider Build(IConfigurationBuilder builder)
        {
            return new SecretManagerConfigurationProvider();
        }
    }

SecureManagerConfigurationProvider


次に、ConfigurationProvider抽象クラスから継承する必要がある、主なコンポーネント、SecretManagerConfigurationProviderの作成を開始します.
public class SecretManagerConfigurationProvider : ConfigurationProvider
秘密のマネージャーから秘密を取得するには、GoogleからSecretManagerServiceLientを使用することができます.クラウド.SecretManager.V 1 nugetパッケージ.また、Secret Managerが有効になっており、アプリケーションが実行されているGoogleプロジェクトIDが必要になります.
どのように、我々はプロジェクトIDを得ることができますか?例えば、アプリケーション設定に置くことができます.しかし、実際には、Google APIを使用して実行時に簡単に取得できます.
public static string GetProjectId()
{
    var instance = Google.Api.Gax.Platform.Instance();
    var projectId = instance?.ProjectId;
    if (string.IsNullOrEmpty(projectId))
    {
        return null;
    }
    return projectId;
}
設定プロバイダーに戻ると、コンストラクタで初期化する準備ができています.
public SecretManagerConfigurationProvider()
{
    _client = SecretManagerServiceClient.Create();
    _projectId = GoogleProject.GetProjectId();
}
次のステップは、“Load”メソッドをオーバーロードし、親クラスでデータプロパティとして公開されているキー/値のペアの辞書を設定します.
var secrets = _client.ListSecrets(new ProjectName(_projectId));
foreach (var secret in secrets)
{
   var secretVersionName = new SecretVersionName(secret.SecretName.ProjectId, secret.SecretName.SecretId, "latest");
   var secretVersion = _client.AccessSecretVersion(secretVersionName);
   Set(secret.SecretName.SecretId, secretVersion.Payload.Data.ToStringUtf8());
}

ScreenManagerConfiguration


最後に、簡単にASPに新しい構成プロバイダーを追加するための利便性拡張方法を追加しましょう.NETコアアプリケーション.
public static IConfigurationBuilder AddGoogleSecretsManager(this IConfigurationBuilder configurationBuilder)
{
    configurationBuilder.Add(new SecretManagerConfigurationSource());

    return configurationBuilder;
}
通常、このメソッドをプログラムで使用します.csファイル
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration((_, config) => config.AddGoogleSecretsManager())
        .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
Google Secret Managerの設定プロバイダーの完全なソースコードは、より多くのエラー処理、コメント、およびテストでこのgithub repoで見つけることができます.

I - B 1 / GoogleScreerManagerConfigurationProvider


の設定マネージャ


それ以上に、あなたはIB.Google.SecretManager.ConfigurationProvider NuGet packageをダウンロードして、プロジェクトで自由に使用できます
そして、それは基本的にカスタム構成プロバイダーを実装するために必要とされたすべてです.今、あなたはより安全な方法でアプリケーションの設定を格納するためにGoogle Secret Managerを使用して起動することができます別の段階からこれらの変数を削除することによって、あなたのCDパイプラインを簡素化し、それらの厄介な猫ハッカーの心配を停止します.
(画像信用:イリジウム/gettyイメージ)