Заставить рабочий процесс IIS использовать учетные данные AWS вошедшего в систему пользователя
У меня есть приложение ASP.NET, работающее на IIS. Приложение обращается к диспетчеру AWS Secrets, и я разработчики, чтобы иметь возможность запускать его локально и использовать свой локальный вход в AWS.
Рабочий процесс IIS работает под IIS APPPOOL\MyApp.
Приложение пытается получить доступ к AWS Secrets Manager следующим образом:
var config = new AmazonSecretsManagerConfig { RegionEndpoint = RegionEndpoint.MyRegion };
var client = new AmazonSecretsManagerClient(config);
var request = new GetSecretValueRequest
{
SecretId = "my-secret-id"
};
var response = Task.Run(async () => await client.GetSecretValueAsync(request)).Result;
Хотя я вошел в AWS, и это будет работать как консольное приложение, поскольку ASP.NET работает как IIS APPPOOL \ MyApp, который не вошел в систему, он не может получить к нему доступ.
Если я скопирую C:\Users\MyLogin.aws\credentials в C:\Users\MyApp.aws\credentials, тогда он будет работать, но, очевидно, это просто доказательство концепции, а не долгосрочное решение.
Если я попробую это:
var sharedFile = new SharedCredentialsFile("C:/Users/MyLogin/.aws/credentials");
if (!sharedFile.TryGetProfile("default", out var profile))
{
throw new Exception("Cannot access shared credentials file");
}
if (!AWSCredentialsFactory.TryGetAWSCredentials(profile, sharedFile, out var credentials))
{
throw new Exception("Cannot get credentials from shared file");
}
var config = new AmazonSecretsManagerConfig { RegionEndpoint = RegionEndpoint.MyRegion };
var client = new AmazonSecretsManagerClient(credentials, config);
var request = new GetSecretValueRequest
{
SecretId = "my-secret-id"
};
var response = Task.Run(async () => await client.GetSecretValueAsync(request)).Result;
Но он не может получить доступ к папке, потому что у него нет разрешений, и я хотел бы избежать этого, так как я хочу, чтобы настройка была как можно более простой.
Или мне нужно настроить нового пользователя IAM, который будет использовать его с помощью ключа доступа / секретного ключа? Опять же, я хотел бы избежать этого, так как это потребует где-то хранить секретный ключ. Я бы очень хотел использовать логин пользователя