slogan3

Ontwikkel Pulumi Infrastructure met Geavanceerde Secrets Rotatie en Beheer

description

Met deze prompt kan de gebruiker een Pulumi infrastructuur ontwerpen die geavanceerd secrets beheer bevat, waardoor risico's op datalekken en beveiligingsinbreuken afnemen. Het helpt bij het automatiseren van rotatieprocessen en het integreren met externe secrets managers, wat veiliger en efficiënter is dan handmatig beheer.

prompt

Help me bij het ontwerpen van een Pulumi infrastructuur die geavanceerde secrets rotatie en beheer ondersteunt om de beveiliging te verbeteren. Mijn huidige Pulumi configuratie is: <voer je huidige Pulumi configuratie in>. Beschrijf ...

try_prompt

generate_helper
disclaimerOnPageApi

ai_answers

provider: openai
model: gpt-4.1-nano
Natuurlijk! Hieronder vind je een uitgebreide gids voor het implementeren van geavanceerde secrets rotatie en beheer in je Pulumi infrastructuur, inclusief voorbeelden en best practices. --- ### 1. Overzicht en kernprincipes - **Secrets rotatie**: Automatisch wijzigen van geheime gegevens zoals API-sleutels of database wachtwoorden. - **Secrets management**: Gebruik van een veilige externe secrets manager (bijv. AWS Secrets Manager, HashiCorp Vault). - **Beveiligde opslag**: Gevoelige gegevens worden versleuteld opgeslagen en alleen toegankelijk via geauthenticeerde en geautoriseerde processen. --- ### 2. Integratie met externe secrets managers #### a. AWS Secrets Manager gebruiken AWS Secrets Manager biedt automatische rotatie, versiebeheer en integratie met andere AWS-services. **Voorbeeld: secret creëren en rotatie instellen** ```typescript import * as aws from "@pulumi/aws"; // Maak een nieuwe secret aan const mySecret = new aws.secretsmanager.Secret("mySecret"); // Voeg een secret value toe const secretVersion = new aws.secretsmanager.SecretVersion("mySecretVersion", { secretId: mySecret.id, secretString: JSON.stringify({ username: "admin", password: "initieelWachtwoord" }), }); // Activeer rotatie const rotationLambda = new aws.lambda.Function("rotationLambda", { runtime: "nodejs14.x", role: /* rol met juiste permissies */, handler: "index.handler", code: new aws.s3.BucketObject("lambda.zip", { bucket: bucket.id, source: new pulumi.asset.FileAsset("rotationLambda.zip"), }).bucket.apply(bucketName => `s3://${bucketName}/rotationLambda.zip`), }); // Configuratie voor automatische rotatie const secretRotation = new aws.secretsmanager.SecretRotation("secretRotation", { secretId: mySecret.id, rotationLambdaArn: rotationLambda.arn, rotationRules: { automaticallyAfterDays: 30, // rotatie elke 30 dagen }, }); ``` #### b. Rotatie Lambda functie De Lambda moet de secret vernieuwen en deze terugplaatsen in Secrets Manager. Zorg dat deze code veilig is, bijvoorbeeld door gebruik te maken van environment variables en het vermijden van harde wachtwoorden. --- ### 3. Beveiliging en best practices - **Versleuteling**: Gebruik AWS KMS voor encryptie van secrets. - **Toegangscontrole**: Beperk toegang tot secrets via IAM policies. - **Audit en logging**: Log rotatie-activiteiten met CloudTrail. - **Secrets scheiden**: Beheer verschillende secrets apart en minimaliseer de toegang. - **Automatisering**: Automatiseer rotatie en toegang via CI/CD pipelines. --- ### 4. Gevoelige gegevens veilig opslaan Gebruik AWS Systems Manager Parameter Store of Secrets Manager voor opslag. Versleutel altijd bij opslag en tijdens overdracht. Voorbeeld: geheim in Parameter Store ```typescript const secureParameter = new aws.simplesystemsmanagement.Parameter("secureParam", { type: "SecureString", value: "SuperVeiligWachtwoord", }); ``` --- ### 5. Continual security en compliance - **Automatische rotatie**: Vermindert risico bij geheime blootstelling. - **Least privilege**: Geef alleen noodzakelijke permissies. - **Auditing**: Houd rotatie- en toegangslogs bij. - **Regelmatige audits**: Controleer of secrets up-to-date en veilig zijn. --- ### 6. Samenvatting - Gebruik AWS Secrets Manager met rotatie Lambda voor automatische rotatie. - Versleutel secrets en beperk toegangsrechten. - Automatiseer rotatie en audit logs. - Implementeer CI/CD pipelines om secrets veilig te beheren. - Documenteer en controleer periodiek de beveiligingspraktijken. --- Wil je dat ik een compleet voorbeeld met alle benodigde Lambda code en IAM policies voor je opstel?
provider: deepseek
model: deepseek-chat
Zeker, ik help je bij het ontwerpen van een geavanceerd secrets management systeem met Pulumi. Hier is een complete implementatie met AWS Secrets Manager voor automatische rotatie: ## Basis Secrets Management Infrastructuur ```typescript import * as aws from "@pulumi/aws"; import * as pulumi from "@pulumi/pulumi"; // S3 Bucket voor algemene data (jouw bestaande configuratie) const bucket = new aws.s3.Bucket("my-bucket", { bucket: "my-app-bucket", serverSideEncryptionConfiguration: { rule: { applyServerSideEncryptionByDefault: { sseAlgorithm: "AES256" } } } }); // AWS Secrets Manager voor geheime sleutels const databaseSecret = new aws.secretsmanager.Secret("database-credentials", { name: "prod/database/credentials", description: "Database credentials voor productie omgeving", recoveryWindowInDays: 30 }); // Geheime waarden toevoegen const secretVersion = new aws.secretsmanager.SecretVersion("database-secret-version", { secretId: databaseSecret.id, secretString: JSON.stringify({ username: "db-user", password: "initial-password-123" }) }); ``` ## Automatische Secrets Rotatie ```typescript // IAM Role voor Lambda rotatiefunctie const rotationLambdaRole = new aws.iam.Role("secrets-rotation-lambda-role", { assumeRolePolicy: JSON.stringify({ Version: "2012-10-17", Statement: [{ Action: "sts:AssumeRole", Effect: "Allow", Principal: { Service: "lambda.amazonaws.com" } }] }) }); // IAM Policy voor secrets rotatie const rotationPolicy = new aws.iam.RolePolicy("secrets-rotation-policy", { role: rotationLambdaRole.id, policy: pulumi.all([databaseSecret.arn]).apply(([secretArn]) => JSON.stringify({ Version: "2012-10-17", Statement: [ { Effect: "Allow", Action: [ "secretsmanager:DescribeSecret", "secretsmanager:GetSecretValue", "secretsmanager:PutSecretValue", "secretsmanager:UpdateSecretVersionStage" ], Resource: secretArn }, { Effect: "Allow", Action: [ "secretsmanager:GetRandomPassword" ], Resource: "*" } ] }) ) }); // Lambda functie voor rotatie (voorbeeld voor RDS) const rotationLambda = new aws.lambda.Function("secrets-rotation-lambda", { code: new pulumi.asset.AssetArchive({ "index.py": new pulumi.asset.StringAsset(` import boto3 import json import logging logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): secret_arn = event['SecretId'] client = boto3.client('secretsmanager') # Stap 1: Haal huidige secret op current_secret = client.get_secret_value(SecretId=secret_arn) secret_dict = json.loads(current_secret['SecretString']) # Stap 2: Genereer nieuw wachtwoord new_password = client.get_random_password( PasswordLength=32, ExcludeCharacters='"@/\\' )['RandomPassword'] # Stap 3: Update database (voorbeeld voor RDS MySQL) rds_client = boto3.client('rds') rds_client.modify_db_instance( DBInstanceIdentifier='your-db-instance', MasterUserPassword=new_password ) # Stap 4: Update secret in Secrets Manager secret_dict['password'] = new_password client.put_secret_value( SecretId=secret_arn, SecretString=json.dumps(secret_dict), VersionStages=['AWSCURRENT'] ) return {'status': 'success'} `) }), role: rotationLambdaRole.arn, handler: "index.lambda_handler", runtime: "python3.9", timeout: 300 }); // Rotatie configuratie voor secret const rotationSchedule = new aws.secretsmanager.SecretRotation("database-secret-rotation", { secretId: databaseSecret.id, rotationLambdaArn: rotationLambda.arn, rotationRules: { automaticallyAfterDays: 30, // Rotatie elke 30 dagen duration: "2h", // Timeout voor rotatie scheduleExpression: "rate(30 days)" } }); ``` ## Externe Secrets Managers Integratie ```typescript // HashiCorp Vault integratie (via AWS Secrets Manager) const vaultSecret = new aws.secretsmanager.Secret("vault-token", { name: "external/vault/token", description: "Vault token voor externe secrets management" }); // Parameter Store voor configuratiegegevens const appConfigParams = [ { name: "/app/database/host", value: "db.production.internal", type: "String" }, { name: "/app/database/port", value: "3306", type: "String" }, { name: "/app/encryption/key", value: "enc-key-123", type: "SecureString" } ]; appConfigParams.forEach((param, index) => { new aws.ssm.Parameter(`app-config-param-${index}`, { name: param.name, value: param.value, type: param.type, tier: "Standard" }); }); ``` ## Beveiligde Opslag en Encryptie ```typescript // KMS Key voor encryptie van secrets const secretsKmsKey = new aws.kms.Key("secrets-encryption-key", { description: "KMS key voor encryptie van secrets", deletionWindowInDays: 7, enableKeyRotation: true, policy: JSON.stringify({ Version: "2012-10-17", Statement: [ { Sid: "Enable IAM User Permissions", Effect: "Allow", Principal: { AWS: "arn:aws:iam::${aws.getCallerIdentity().then(id => id.accountId)}:root" }, Action: "kms:*", Resource: "*" } ] }) }); // S3 Bucket voor gevoelige configuratiebestanden const configBucket = new aws.s3.Bucket("app-config-bucket", { bucket: "my-app-sensitive-config", serverSideEncryptionConfiguration: { rule: { applyServerSideEncryptionByDefault: { sseAlgorithm: "aws:kms", kmsMasterKeyId: secretsKmsKey.id } } }, versioning: { enabled: true }, logging: { targetBucket: bucket.id, targetPrefix: "config-bucket-logs/" } }); // Bucket Policy voor beperkte toegang const configBucketPolicy = new aws.s3.BucketPolicy("config-bucket-policy", { bucket: configBucket.id, policy: configBucket.bucket.apply(bucketName => JSON.stringify({ Version: "2012-10-17", Statement: [ { Effect: "Deny", Principal: "*", Action: "s3:*", Resource: [ `arn:aws:s3:::${bucketName}`, `arn:aws:s3:::${bucketName}/*` ], Condition: { Bool: { "aws:SecureTransport": false } } } ] }) ) }); ``` ## Monitoring en Compliance ```typescript // CloudWatch Alarms voor secrets management const secretRotationAlarm = new aws.cloudwatch.MetricAlarm("secret-rotation-failure", { alarmDescription: "Alarm bij falende secrets rotatie", metricName: "Errors", namespace: "AWS/Lambda", statistic: "Sum", period: 300, threshold: 1, comparisonOperator: "GreaterThanThreshold", evaluationPeriods: 1, alarmActions: [], // Voeg SNS topic toe voor notificaties dimensions: { FunctionName: rotationLambda.name } }); // Config Rules voor compliance const secretsManagerRule = new aws.cfg.Rule("secrets-manager-rotation-check", { description: "Controleert of secrets rotatie zijn ingeschakeld", source: { owner: "AWS", sourceIdentifier: "SECRETS_MANAGER_ROTATION_ENABLED_CHECK" }, inputParameters: JSON.stringify({ "maxDaysSinceRotation": 90 }) }); ``` ## Best Practices en Aanbevelingen ### 1. **Principle of Least Privilege** ```typescript // Minimalistische IAM policies voor services const appRole = new aws.iam.Role("app-service-role", { assumeRolePolicy: JSON.stringify({ Version: "2012-10-17", Statement: [{ Action: "sts:AssumeRole", Effect: "Allow", Principal: { Service: "ecs-tasks.amazonaws.com" } }] }) }); // Alleen benodigde permissies const appPolicy = new aws.iam.RolePolicy("app-secrets-access", { role: appRole.id, policy: pulumi.all([databaseSecret.arn]).apply(([secretArn]) => JSON.stringify({ Version: "2012-10-17", Statement: [{ Effect: "Allow", Action: [ "secretsmanager:GetSecretValue" ], Resource: secretArn }] }) ) }); ``` ### 2. **Multi-Region Backup** ```typescript // Secrets replicatie voor disaster recovery const replicaRegions = ["eu-west-1", "eu-central-1"]; replicaRegions.forEach(region => { new aws.secretsmanager.Secret(`database-secret-replica-${region}`, { name: "prod/database/credentials", replica: [{ region: region }] }); }); ``` ### 3. **Audit Logging** ```typescript // CloudTrail voor audit logging const trail = new aws.cloudtrail.Trail("secrets-audit-trail", { name: "secrets-management-audit", s3BucketName: bucket.id, enableLogging: true, includeGlobalServiceEvents: true, isMultiRegionTrail: true, eventSelectors: [{ readWriteType: "All", includeManagementEvents: true, dataResources: [{ type: "AWS::SecretsManager::Secret", values: ["arn:aws:secretsmanager:*:*:secret:*"] }] }] }); ``` ## Implementatie Stappen 1. **Start met kritieke secrets**: Begin met database credentials en API keys 2. **Implementeer gefaseerd**: Rol eerst rotatie uit voor niet-kritieke systemen 3. **Monitor intensief**: Houd rotatie success/failure rates bij 4. **Test recovery procedures**: Zorg dat je secrets kunt herstellen bij falen 5. **Documenteer processen**: Houd rotatieschema's en procedures bij Deze architectuur biedt een robuuste basis voor secrets management met automatische rotatie, encryptie in rust en transit, en uitgebreide monitoring voor compliance.