Hoe je een relevante en effectieve DevSecOps-stack opzet met AWS

Hoe je een relevante en effectieve DevSecOps-stack opzet met AWS

Wat is DevSecOps?

DevSecOps is bovenal een bedrijfscultuur filosofie. Het is een methodiek waarmee je tegelijkertijd operational excellence en structurele efficiëntie kunt bereiken. DevSecOps biedt grote voordelen voor organisaties:

Wat is infrastructuur als code?

In de meeste gevallen maakt de cloud het mogelijk om een infrastructuur en het fysieke beheer daarvan weg te laten. De infrastructuur bestaat echter nog steeds. Het past zich eenvoudig aan de nieuwe methoden en vereisten van de teams aan. Een migratie naar de cloud maakt uw Ops-teams dus niet overbodig.

De opkomst van Infrastructure as Code (IaC) stelt u in feite in staat om alle spelers in het IT-ecosysteem van uw organisatie beter van dienst te zijn. Deze benadering, vaak de kern van DevOps-transformatie, is niet alleen een toegevoegde waarde, maar een echte noodzaak.

02_Visuals_Article_DevOps

Naast een reorganisatie om deze paradigmaverschuiving mogelijk te maken, is een aantal tools en services (vaak geassocieerd met bepaalde DevSecOps-praktijken) nodig voor:

Tools, die vaak worden beschouwd als eenvoudige handelswaar, zijn nu essentieel voor de implementatie van DevSecOps in organisaties. We moeten daarom even de tijd nemen om de verschillende aanbiedingen op de markt te verkennen en te begrijpen hoe deze producten samenwerken in uw ecosysteem.

Hoe voldoen AWS-tools aan de eisen van DevSecOps?

Laten we eens kijken naar de tools die AWS biedt voor het creëren van een relevante en effectieve DevSecOps-stack.

AWS-tools voor continue integratie (CI)

Continue integratie omvat de automatisering van de bouw-, test- en leveringsfasen. Het geeft ontwikkelaars de zekerheid dat ze een solide basis hebben voor elk nieuw project.

AWS-tools voor continue levering (CD)

Continuous delivery omvat de automatisering van de implementatiefasen, met uitzondering van productie-implementatie (die handmatig wordt gedaan).

Welke AWS-tools kunnen worden gebruikt voor Infrastructure as Code?

Laten we eens kijken naar een eenvoudig voorbeeld in TypeScript. We maken een door AWS beheerd geheim dat alleen kan worden gelezen door een gedefinieerde IAM-rol.

Allereerst biedt AWS ons een Stack-interface om ons te helpen onze AWS-infrastructuur te definiëren:

export class InfraStack extends Stack {  

  constructor(scope: Construct, id: string, props?: StackProps) {  

  super(scope, id, props);  

  // definition of the infrastructure here  

 } 

} 

Alle volgende codeblokken worden in “definitie van de infrastructuur hier” geplaatst.

Laten we de IAM-rol aanmaken:

const secretRole = new iam.Role(this, 'MyRole', { assumedBy: new iam.AnyPrincipal() });  

Dit wordt opgeslagen in de variabele secretRole, die voor de rest van de code kan worden gebruikt.
“MyRole” wordt gebruikt om de naam te definiëren die zal worden gevonden in CloudFormation.
Met “assumedBy” kunt u beperken wie de rol op zich kan nemen. Misschien wilt u dat de rol wordt overgenomen door een WebIdentityPrincipal, zoals een gefedereerde webidentiteit die wordt geleverd door Facebook, Google, Cognito, enz., een ServicePrincipal zoals Lambda of EC2, of een CanonicalUserPrincipal (een AWS-gebruiker), enz.

Nu we de rol hebben, gaan we het geheim maken:

const websiteAccessPassword = new sm.Secret(this, "WebsiteAccessPassword", {  

  generateSecretString: {  

  secretStringTemplate: "{}",  

  generateStringKey: "password"  

 } 

});  

Eerst initialiseren we het geheim “WebsiteAccessPassword” in CloudFormation. Met deze initialisatie genereert AWS een tekenreeks die overeenkomt met het wachtwoord in het geheim.
“generateStringKey” genereert de tekenreeks in “password” en de “password”-sleutel is te vinden in het lege JSON-object “{}” geleverd door “secretStringTemplate.”
Met andere woorden, wanneer we het geheim ophalen (bijvoorbeeld met de CLI-opdracht “aws secretsmanager get-secret-value”), geeft het ons een JSON-object zoals dit:

 { 

    “password”: “leSecretGénéré” 

  } 

Ten slotte moeten we onze rol toestemming geven om ons geheim te lezen:

websiteAccessPassword.grantRead(secretRole);  

Bonus:

We kunnen deze rol toevoegen aan elke resource die we hebben gemaakt. We willen bijvoorbeeld toegang tot het geheim van een EC2-instantie die we ook via CDK hebben gemaakt (of waarnaar we hebben verwezen). Nu hoef je het alleen nog maar de rol “secretRole:” te geven.

const ec2Instance = new ec2.Instance(this, "ec2-instance", { “role”: secretRole, ... });  

Om af te sluiten met CDK, volstaat een enkele opdracht om onze code om te zetten in CloudFormation-infrastructuur: “cdk deploy”

Net als alle broncodes kan IaC worden beheerd met continue integratie en levering. We kunnen dan een hele infrastructuur inzetten op dezelfde manier als we zouden doen met de programma’s die op dezelfde infrastructuur zullen draaien.

In dit eerste artikel presenteerden we de AWS-tools voor de levering, continue implementatie en creatie van Infrastructure as Code. Deze eerste stenen vormen de basis van uw AWS-infrastructuur. Om echter zo dicht mogelijk bij de DevSecOps-methodiek te blijven en een consistente stack te verkrijgen, zijn extra bouwstenen nodig: met name monitoring en samenwerking. Deze komen in volgende artikelen aan bod. Ontdek ondertussen ons AWS-aanbod hier.