In dit artikel wil ik het hebben over hoe je de AWS SDK kunt integreren in je applicatie. Om connectie te maken met AWS diensten heb je de keuze om zelf credentials mee te geven, of de SDK zelf laten bepalen welke credentials gebruikt worden. De laatste heeft de voorkeur en zal ik in het artikel bespreken. Het is goed om te weten op welke manier de SDK dat doet en welke volgorde daarbij gehanteerd wordt.
Algemene opzet voor .Net applicaties
Wanneer je gebruik wilt maken van AWS diensten in je applicatie, kun je de AWS SDK als volgt toevoegen:
Voeg de benodigde Nuget package toe aan het project.
Amazon.Extensions.NETCore.SetupLaad de AWS configuratie, waaronder credentials, vanuit de configuratie. Hiermee laat je de SDK zelf de credentials bepalen.
AWSOptions options = builder.Configuration.GetAWSOptions();Voeg de AWS configuratie vervolgens toe aan de service collection.
// Configurtion is used for all services builder.Services.AddDefaultAWSOptions(options);Vervolgens kunnen AWS diensten toegevoegd worden aan de service collection met extension method AddAWSService.
// AWS service clients are instantiated as singleton by default builder.Services.AddAWSService<IAmazonS3>(); builder.Services.AddAWSService<IAmazonSimpleEmailService>(); builder.Services.AddAWSService<IAmazonEventBridge>(); builder.Services.AddAWSService<IAmazonDynamoDB>();Het is ook mogelijk om de AWS configuratie direct mee te geven aan een specifieke service.
// Configuration is only used for this service builder.Services.AddAWSService<IAmazonS3>(options);
Hoe bepaalt de SDK welke credentials worden gebruikt?
Het is belangrijk om te begrijpen hoe de AWS credentials worden bepaald in verschillende omgevingen. Denk hierbij aan lokale ontwikkeling en een applicatie die draait binnen de AWS infrastructuur.
Bij het bepalen van de te gebruiken credentials voor een AWS dienst wordt eerst gekeken naar de aanwezigheid van basic credentials, waarbij je zelf de access key meegeeft.
AWSOptions options = new AWSOptions { Credentials = new BasicAWSCredentials("yourAccessKey", "yourAccessSecret") }; builder.Services.AddDefaultAWSOptions(options);Daarna wordt gekeken naar de aanwezigheid van een profiel. Indien aanwezig worden de credentials die zijn vastgelegd in het profiel gebruikt.
AWSOptions options = new AWSOptions { Profile = "custom", ProfilesLocation = @"c:\temp\credentials" }; builder.Services.AddDefaultAWSOptions(options);Indien er ook geen profiel aanwezig is wordt gezocht naar de aanwezigheid van een default profiel op de locatie C:\Users\%username%\.aws\credentials. Indien aanwezig worden de credentials die zijn vastgelegd in het profiel gebruikt. De AWS Toolkit-extensie in Visual Studio 2022 maakt gebruik van dit profiel.
[default] aws_access_key_id = ABCDE aws_secret_access_key = 1234567890 region = eu-west-1Credentials die zijn vastgelegd als environment variabelen.
ENVIRONMENT_VARIABLE_ACCESSKEY = "AWS_ACCESS_KEY_ID"; ENVIRONMENT_VARIABLE_SECRETKEY = "AWS_SECRET_ACCESS_KEY"; ENVIRONMENT_VARIABLE_SESSION_TOKEN = "AWS_SESSION_TOKEN";Als een applicatie draait in een AWS omgeving, dan is er nog een laatste mogelijkheid. De credentials worden bepaald op basis van de applicatie. De rechten die de applicatie heeft zijn vastgelegd in de rollen die zijn gekoppeld aan de applicatie. In die rollen kun je expliciet aangeven welke diensten aangeroepen mogen worden en welke acties uitgevoerd mogen worden. Dit is de wenselijke situatie in een productieomgeving, waarbij de AWS infrastructuur bij voorkeur via Cloudformation scripts wordt aangemaakt.