Blog
Bereitstellen von AWS Config-Regeln in Ihrem Unternehmen

In meinem letzten Blog habe ich Ihnen gezeigt, wie Sie Ihre eigenen Konfigurationsregeln schreiben können. Aber das bringt Ihnen nur dann etwas, wenn Sie die Regel in Ihren AWS-Konten bereitstellen. In diesem Blog werden wir uns mit der Verteilung dieser Konfigurationsregeln beschäftigen.
Was sind meine Optionen?
Es gibt viele Möglichkeiten, wie Sie diese Regeln in Ihren Mitgliederkonten einsetzen können. In diesem Blog werde ich mich nur auf die 2 echten Optionen konzentrieren:
- Stellen Sie die Regeln mit CloudFormation StackSets in jedem Konto bereit.
- Verwenden Sie Konformitätspakete.
CloudFormation StackSets verwenden
Wenn Sie sich ansehen, was CloudFormation StackSets leistet, werden Sie sehen, warum dies eine gute Lösung ist:

Sie müssen einen delegierten Administrator haben. Dieser Administrator hat die Möglichkeit, die Vorlage in anderen Konten zu verteilen. Sie definieren alle Kontonummern und Regionen, in denen Sie die Konfigurationsregeln einsetzen möchten.
Wenn Sie dies mit einer Landingzone kombinieren, haben Sie diese höchstwahrscheinlich bereits eingerichtet.
Verwendung von Conformance Packs
Ein Konformitätspaket ist nichts weiter als ein Bündel von Konfigurationsregeln, die in Gruppen zusammengefasst sind. Aber ein solches Paket bietet Ihnen noch einige weitere Vorteile. Zum Beispiel können Sie die Konformitätsbewertung Ihres Pakets in Ihrem Konto einsehen. Sie können sie mit den Konformitätsbewertungen vergleichen, die Sie in Security Hub sehen können. Angenommen, Sie haben 10 Konfigurationsregeln. Wenn eine davon Ressourcen enthält, die nicht konform sind, haben Sie eine Konformitätsbewertung von 90%.
Dies allein würde jedoch nicht ausreichen, um die Regeln auf alle Ihre Konten zu verteilen. Die Conformance Packs gibt es in 2 Varianten: reguläre und organisatorische Conformance Packs. Reguläre Regeln verteilen das Conformance Pack in einem einzigen Konto. Das organisatorische Konformitätspaket verteilt die Regel in allen Konten.
Hinweis: Sie können die regulären Konfigurationsregeln über eine Organisationskonfigurationsregel bereitstellen. Dadurch können Sie jedoch nicht alle Ihre Regeln gruppieren. Aus diesem Grund tendiere ich dazu, Conformance Packs zu verwenden.
Zeigen Sie mir ein Beispiel
Es ist immer besser, ein Beispiel zu verwenden. Dieses Snippet funktioniert nur, wenn Sie die Voraussetzungen erfüllen. Wenn Sie diese Vorlage in dem Konto bereitstellen, das als delegierter Administrator eingerichtet ist. Alle Mitgliedskonten verfügen dann über die Konfigurationsregeln.
Resources:
ConformancePackBucket:
Type: AWS::S3::Bucket
DeletionPolicy: Retain
UpdateReplacePolicy: Retain
Properties:
BucketName: !Sub awsconfigconforms-${AWS::AccountId}-${AWS::Region}
BucketEncryption:
ServerSideEncryptionConfiguration:
- ServerSideEncryptionByDefault:
SSEAlgorithm: AES256
PublicAccessBlockConfiguration:
BlockPublicAcls: True
BlockPublicPolicy: True
IgnorePublicAcls: True
RestrictPublicBuckets: True
ConformancePackBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref ConformancePackBucket
PolicyDocument:
Version: 2012-10-17
Statement:
- Sid: AWSConfigConformsCheckAcls
Action: s3:GetBucketAcl
Effect: Allow
Resource: !GetAtt ConformancePackBucket.Arn
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/config-conforms.amazonaws.com/AWSServiceRoleForConfigConforms
Condition:
StringEquals:
aws:PrincipalOrgID: ${aws:PrincipalOrgID}
Bool:
aws:SecureTransport: true
- Sid: AWSConfigConformsReadWriteBucket
Action:
- s3:PutObject
- s3:GetObject
Effect: Allow
Resource: !Sub ${ConformancePackBucket.Arn}/*
Principal:
AWS: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/config-conforms.amazonaws.com/AWSServiceRoleForConfigConforms
Condition:
StringEquals:
aws:PrincipalOrgID: ${aws:PrincipalOrgID}
Bool:
aws:SecureTransport: true
OrganizationConformancePack:
Type: AWS::Config::OrganizationConformancePack
Properties:
OrganizationConformancePackName: lz-framework
DeliveryS3Bucket: !Ref ConformancePackBucket
ExcludedAccounts: [ "000000000000" ] # AccountID to exclude
TemplateBody: |-
Resources:
S3AccessLogging:
Type: AWS::Config::ConfigRule
Properties:
ConfigRuleName: lz-my-custom-rule
Description: My custom rule
EvaluationModes:
- Mode: DETECTIVE
Scope:
ComplianceResourceTypes:
- AWS::S3::Bucket
Source:
Owner: CUSTOM_POLICY
SourceDetails:
- EventSource: aws.config
MessageType: ConfigurationItemChangeNotification
- EventSource: aws.config
MessageType: OversizedConfigurationItemChangeNotification
CustomPolicyDetails:
EnableDebugLogDelivery: 'true'
PolicyRuntime: guard-2.x.x
PolicyText: |-
# The rule definition goes here
Die Vorlage enthält nur 3 Hauptressourcen, aber 2 eigentliche logische Komponenten. Einen Bucket mit einer Richtlinie und die Definition des Conformance Packs. Schauen wir uns alle Komponenten des Beispiels an.
S3 Bucket und die Bucket-Richtlinie
Dieser Bucket muss mit awsconfigconforms beginnen. Der Dienst OrganizationConformancePack. Die Richtlinie erlaubt es dem Dienst, Objekte zu setzen und zu holen, solange er sich innerhalb der Organisation befindet. Dadurch kann der Dienst die Vorlage in allen Mitgliedskonten bereitstellen.
Organisation Conformance Pack
Die Definition des Organisationskonformitätspakets sieht groß aus, ist aber ganz einfach. Wenn Sie genauer hinsehen, werden Sie feststellen, dass sie nur 4 Eigenschaften hat:
- OrganizationConformancePackName
- LieferungS3Bucket
- AusgeschlosseneKonten
- TemplateBody
Die ersten 3 Optionen sind ziemlich einfach. Die Vorlage selbst ist ein wenig komplizierter. In meinem Beispiel habe ich eine Inline-Vorlage verwendet, um diesen Blog zu vervollständigen. Sie können aber auch auf ein vorhandenes Objekt in S3 verweisen. Auf diese Weise können Sie Linting-Tools wie cfn-lint für Ihr Conformance Pack verwenden. Dadurch werden Fehler bei der Bereitstellung reduziert, da Sie sie abfangen können, bevor Sie Ihren Code festschreiben und veröffentlichen.
Wenn Sie Hilfe beim Einrichten der Vorlage für das Konformitätspaket benötigen, sehen Sie sich diese Beispiele an.
Fazit
Wenn Sie benutzerdefinierte Regeln in einem Konformitätspaket kombinieren. Damit können Sie die Verteilung dieser Regeln vereinfachen. Sie müssen keine Pipelines oder Stapelsätze pflegen. Und Sie lagern die Verteilung Ihrer Regeln an AWS aus.
Damit entfällt der gesamte Wartungsaufwand für die Infrastruktur, wenn Sie diese Verteilung selbst vornehmen. Und Sie müssen sich keine Gedanken über Szenarien wie das Hinzufügen/Entfernen von Konten machen.
Foto von ELEVATE
Verfasst von

Joris Conijn
Joris is the AWS Practise CTO of the Xebia Cloud service line and has been working with the AWS cloud since 2009 and focussing on building event-driven architectures. While working with the cloud from (almost) the start, he has seen most of the services being launched. Joris strongly believes in automation and infrastructure as code and is open to learning new things and experimenting with them because that is the way to learn and grow.
Unsere Ideen
Weitere Blogs
Contact



