我正在尝试使用 AWS 秘密管理器来声明 RDS 管理员凭据。
variable "RdsAminCred" {
default = {
username = "dbadmin"
password = "dbadmin#02avia"
}
type = map(string)
}
resource "aws_secretsmanager_secret" "RdsAminCred" {
name = "RdsAminCred"
}
resource "aws_secretsmanager_secret_version" "RdsAminCred" {
secret_id = aws_secretsmanager_secret.RdsAminCred.id
secret_string = jsonencode(var.RdsAminCred)
}
Run Code Online (Sandbox Code Playgroud)
resource "aws_db_instance" "default" {
identifier = "testdb"
allocated_storage = 20
storage_type = "gp2"
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t2.medium"
name = "mydb"
username = "dbadmin"
password = …Run Code Online (Sandbox Code Playgroud) 我将 Localstack 与 Testcontainers((testcontainers:localstack:1.15.2 )) 一起使用进行集成测试,并在测试设置中设置秘密,如下所示:代码示例
import com.amazonaws.services.secretsmanager.AWSSecretsManager;
import com.amazonaws.services.secretsmanager.AWSSecretsManagerClientBuilder;
import com.amazonaws.services.secretsmanager.model.CreateSecretRequest;
import org.junit.Rule;
import org.junit.Test;
import org.testcontainers.containers.localstack.LocalStackContainer;
import org.testcontainers.utility.DockerImageName;
import static org.testcontainers.containers.localstack.LocalStackContainer.Service.SECRETSMANAGER;
public class QueueServiceTest {
DockerImageName localstackImage = DockerImageName.parse("localstack/localstack:0.11.3");
@Rule
public LocalStackContainer localstack = new LocalStackContainer(localstackImage)
.withServices(SECRETSMANAGER).withEnv("LOCALSTACK_HOSTNAME", "localhost").withEnv("HOSTNAME", "localhost");
@Test
public void someTestMethod() {
AWSSecretsManager secretsManager = AWSSecretsManagerClientBuilder.standard()
.withCredentials(localstack.getDefaultCredentialsProvider()).withRegion(localstack.getRegion())
.build();
String secretString = "usrnme";
CreateSecretRequest request = new CreateSecretRequest().withName("test")
.withSecretString(secretString)
.withRequestCredentialsProvider(localstack.getDefaultCredentialsProvider());
secretsManager.createSecret(request);
}
}
Run Code Online (Sandbox Code Playgroud)
现在测试崩溃并出现错误:
com.amazonaws.services.secretsmanager.model.AWSSecretsManagerException:请求中包含的安全令牌无效。(服务:AWSSecretsManager;状态代码:400;错误代码:UnrecognizedClientException;请求 ID:314b0dee-69ed-4b08-9cd0-2618b8e14b25;代理:null)
在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1819) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1403) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest (AmazonHttpClient.java:1372) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1145) 在 com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:802) …
amazon-web-services secret-manager testcontainers localstack
当我创建 .net core web 应用程序时,我在测试期间使用了秘密管理器。我通常能够创建一个新的 web 项目(mvc 和 web api),右键单击该项目并选择“管理用户机密”。这将打开一个 json 文件,我在其中添加了机密。然后我在我的 startup.cs 中使用它,如下所示:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySql(Configuration["connectionString"]));
Run Code Online (Sandbox Code Playgroud)
该网站在此方面运行良好,并且可以很好地连接到数据库。但是,当我尝试使用诸如 ef 核心迁移命令时add-migration,它们似乎无法从秘密管理器访问连接字符串。我收到错误消息“连接字符串不能为空”。当我Configuration["connectionString"]用实际字符串硬编码时,错误消失了。我已经在线检查并检查了 .csproj 文件,它们已经包含以下几行:
<UserSecretsId>My app name</UserSecretsId>
Run Code Online (Sandbox Code Playgroud)
然后:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
Run Code Online (Sandbox Code Playgroud)
是否需要添加任何内容以便迁移可以访问连接字符串?
更新
我在上下文类中只有一个构造函数:
public ApplicationDBContext(DbContextOptions<ApplicationDBContext> options) : base(options)
{
}
Run Code Online (Sandbox Code Playgroud) secret-manager visual-studio-2017 asp.net-core-2.0 entity-framework-core-migrations
我正在寻找在 Blazor WebAssembly 应用程序中安全存储应用程序机密的方法。我们可以在下面的 MSDN 文档中找到服务器端应用程序的详细信息。
https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-3.1&tabs=windows
我们如何将这些秘密用于完全在客户端浏览器中运行的 Blazor WebAssembly 应用程序?
我的基本场景是,需要将密码、产品密钥(许可密钥)信息保留在应用程序代码之外。例如,我们在 Program.cs 的静态 main 方法中加载许可证。
https://i.stack.imgur.com/kCrV1.png
public class Program
{
public static async Task Main(string[] args)
{
//want to access the product key here and need to avoid hardcoding
SomeThirdPartyLibrary.RegisterLicense("product-key");
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await builder.Build().RunAsync();
}
Run Code Online (Sandbox Code Playgroud)
我搜索了 blazor 的文档,但找不到任何详细信息。请帮助我找到在 Blazor WebAssembly 中解决此问题的推荐方法。
(对于服务器端,我们有多种选择,但对于客户端,推荐的方式可能是)
我正在尝试从我的凭证和机密迁移到我的 Express 项目中的 AWS Secrets Manager。
当前结构有一个 config.json 文件,该文件在 express 应用程序时同步加载。
但是当我尝试从 AWS API 获取凭证时,流程将不起作用。因为在我以前的方法中,文件是同步加载的,因此,当应用程序启动时,所有凭证都可用,但当从 AWS API 获取凭证时,则不可能。
我想了解在 Express/Node 项目中需要 API 调用以获取凭据的任何秘密管理器的理想方法是什么。
amazon-web-services node.js express secret-manager aws-secrets-manager
我希望保存许多相当大的文档,从1M到可能更大的多个数量级。我知道Hashicorp的保险柜非常适合秘密密钥和较小的值。我很乐意从中获得“玻璃休息”功能和关键滚动功能。
有没有人对带有大型秘密的保险柜进行基准测试?我以为我不会在Vault中的秘密数量上遇到麻烦?
使用 Secret Manager 代替环境变量来使用 Visual Studio 2017 开发 ASP.NET Core、Azure Functions、Azure WebJobs 和 Xamarin 项目是否有任何优势?
也许是问同一问题的另一种方式,但哪一种是更新/更优选的方法?
asp.net visual-studio secret-manager azure-functions visual-studio-2017
任何人都可以提供一个简单、完整的 node.js lambda 函数,我可以在其中从机密管理器获取机密并使用它吗?我在异步/等待过程中挣扎。我已经尝试了其他帖子中的一些建议,但最后所有这些建议都无法真正使用 main 函数中的秘密。例如,我有一个主函数并调用第二个函数来检索秘密:
xxx =retrieve_secret('mysecret');
然后,在retrieve_secret 函数中,我可以检索秘密,我可以使用console.log 打印它,但是当我尝试在main 函数中使用它时,它显示“Promise”。
请帮忙。提前致谢!
node.js ×2
app-secret ×1
asp.net ×1
aws-lambda ×1
blazor ×1
entity-framework-core-migrations ×1
express ×1
localstack ×1
terraform ×1