Kanji
・Cloud Engineer / Freelance ・Geboren 1993 ・Aus Ehime / Wohnhaft in Shibuya, Tokio ・5 Jahre AWS-Erfahrung Profildetails
Inhaltsverzeichnis
– Die in diesem Artikel beschriebene CloudFormation-Vorlage basiert auf CloudFormation/SAM-Vorlagen-Codierungsregeln . - Verwenden Sie CloudFormation Guard mit einem Regelsatz, der die Einhaltung des Benchmarks „Center for Internet Security (CIS) Amazon Web Services Foundation V1.4 Level 1“ bewertet. – Verwenden Sie die folgenden Befehle, da VS-Code-Plugins diese Auswertung nicht durchführen können.
cfn-guard validate \ --rules ~/cis-aws-benchmark-level-1.guard \ --data ./template.yml
– Die folgende CloudFormation-Vorlage erstellt einen Bucket zum Speichern von Prüfprotokollen, die von AWS-Diensten ausgegeben werden. – Die Quellen der akkumulierten Prüfprotokolle sind AWS Config, AWS CloudTrail, Amazon GuardDuty und Amazon VPC Flow Logs.
AWSTemplateFormatVersion: 2010-09-09 Resources: AuditLogBucket01: Type: AWS::S3::Bucket Properties: BucketName: !Sub sample-audit-bucket-${AWS::AccountId}-${AWS::Region} BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: KMSMasterKeyID: !GetAtt AuditLogKey01.Arn SSEAlgorithm: aws:kms OwnershipControls: Rules: - ObjectOwnership: BucketOwnerEnforced LifecycleConfiguration: Rules: - Status: Enabled AbortIncompleteMultipartUpload: DaysAfterInitiation: 7 NoncurrentVersionExpirationInDays: 7 - Status: Enabled ExpirationInDays: 365 Prefix: / PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true VersioningConfiguration: Status: Enabled LoggingConfiguration: DestinationBucketName: !Ref ServerAccessLogBucket01 TargetObjectKeyFormat: PartitionedPrefix: PartitionDateSource: EventTime AuditLogBucketPolicy01: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref AuditLogBucket01 PolicyDocument: Version: 2012-10-17 Statement: # Reference: https://docs.aws.amazon.com/config/latest/developerguide/s3-bucket-policy.html - Sid: AWSConfigAclCheck Effect: Allow Principal: Service: config.amazonaws.com Action: - s3:GetBucketAcl Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} - Sid: AWSConfigWrite Effect: Allow Principal: Service: config.amazonaws.com Action: - s3:PutObject - s3:PutObjectAcl Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/* # Reference: https://docs.aws.amazon.com/awscloudtrail/latest/userguide/create-s3-bucket-policy-for-cloudtrail.html - Sid: AWSCloudTrailAclCheck Effect: Allow Principal: Service: cloudtrail.amazonaws.com Action: - s3:GetBucketAcl Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} - Sid: AWSCloudTrailWrite Effect: Allow Principal: Service: cloudtrail.amazonaws.com Action: - s3:PutObject Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/AWSLogs/* Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control # Reference: https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html#guardduty_exportfindings-s3-policies - Sid: AllowPutObject Effect: Allow Principal: Service: guardduty.amazonaws.com Action: s3:PutObject Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/* - Sid: AllowGetBucketLocation Effect: Allow Principal: Service: guardduty.amazonaws.com Action: s3:GetBucketLocation Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} # Reference: https://docs.aws.amazon.com/vpc/latest/tgw/flow-logs-s3.html#flow-logs-s3-permissions - Sid: VPCFlowLogsWrite Effect: Allow Principal: Service: delivery.logs.amazonaws.com Action: - s3:PutObject Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/* Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control - Sid: AWSLogDeliveryAclCheck Effect: Allow Principal: Service: delivery.logs.amazonaws.com Action: - s3:GetBucketAcl - s3:ListBucket Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} # Reference: https://docs.aws.amazon.com/securityhub/latest/userguide/s3-controls.html#s3-5 - Sid: AllowSSLRequestsOnly Effect: Deny Principal: '*' Action: s3:* Resource: - !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} - !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/* Condition: Bool: aws:SecureTransport: false ServerAccessLogBucket01: Type: AWS::S3::Bucket Metadata: cfn_nag: rules_to_suppress: - id: W35 reason: There is no need to record the server access log bucket itself guard: SuppressedRules: - S3_BUCKET_LOGGING_ENABLED # There is no need to record the server access log bucket itself Properties: BucketName: !Sub sample-server-access-log-bucket-${AWS::AccountId}-${AWS::Region} BucketEncryption: # Since SSE-KMS is not supported, use SSE-S3 # Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 OwnershipControls: Rules: - ObjectOwnership: BucketOwnerEnforced LifecycleConfiguration: Rules: - Status: Enabled AbortIncompleteMultipartUpload: DaysAfterInitiation: 7 NoncurrentVersionExpirationInDays: 7 - Status: Enabled ExpirationInDays: 365 Prefix: / PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true VersioningConfiguration: Status: Enabled ServerAccessLogBucketPolicy01: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref ServerAccessLogBucket01 PolicyDocument: Version: 2012-10-17 Statement: # Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-server-access-logging.html#grant-log-delivery-permissions-general - Sid: S3ServerAccessLogsPolicy Effect: Allow Principal: Service: logging.s3.amazonaws.com Action: s3:PutObject Resource: !Sub arn:${AWS::Partition}:s3:::${ServerAccessLogBucket01}/* # Reference: https://docs.aws.amazon.com/securityhub/latest/userguide/s3-controls.html#s3-5 - Sid: AllowSSLRequestsOnly Effect: Deny Principal: '*' Action: s3:* Resource: - !Sub arn:${AWS::Partition}:s3:::${ServerAccessLogBucket01} - !Sub arn:${AWS::Partition}:s3:::${ServerAccessLogBucket01}/* Condition: Bool: aws:SecureTransport: false AuditLogKey01: Type: AWS::KMS::Key UpdateReplacePolicy: Retain DeletionPolicy: Retain Properties: EnableKeyRotation: true RotationPeriodInDays: 365 KeyPolicy: Version: 2012-10-17 Statement: - Sid: EnableIAMUserPermissions Effect: Allow Principal: AWS: !Ref AWS::AccountId Action: kms:* Resource: '*' # Reference: https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_exportfindings.html - Sid: AllowGuardDutyKey Effect: Allow Principal: Service: guardduty.amazonaws.com Action: kms:GenerateDataKey Resource: '*'
– Die folgende CloudFormation-Vorlage erstellt einen Bucket zum Speichern von Abfrageergebnissen der Athena-Arbeitsgruppe. – Der Speicherort der Abfrageergebnisse kann für jede Athena-Arbeitsgruppe festgelegt werden. – Referenz: Geben Sie einen Speicherort für Abfrageergebnisse an – Amazon Athena – Das Ziel für Serverzugriffsprotokolle ist auf den im Abschnitt „Überwachungsprotokoll-Bucket“ oben definierten Serverzugriffsprotokoll-Bucket festgelegt. – Wie in Amazon S3-Serverzugriffsprotokollierung unterstützt jetzt automatische datumsbasierte Partitionierung beschrieben, können Serverzugriffsprotokolle nach Datum partitioniert werden, sodass der Pfad zum S3-Ereigniszeitpunkt geschnitten wird. – Die Protokollaufbewahrungsfrist beträgt 45 Tage und entspricht dem Zeitraum, für den der Abfrageverlauf verwaltet wird. - Letzte Abfragen in der Athena-Konsole anzeigen – Amazon Athena – Das AWS-Benutzerhandbuch enthält keine spezifischen Informationen zu S3-Bucket-Richtlinien, aber das Zulassen der Aktionen „s3:PutObject“ und „s3:GetBucketLocation“ ermöglicht den Zugriff von Athena aus.
AWSTemplateFormatVersion: 2010-09-09 Resources: AthenaBucket01: Type: AWS::S3::Bucket Properties: BucketName: !Sub sample-athena-bucket-${AWS::AccountId}-${AWS::Region} BucketEncryption: ServerSideEncryptionConfiguration: - ServerSideEncryptionByDefault: SSEAlgorithm: AES256 LifecycleConfiguration: Rules: - Status: Enabled ExpirationInDays: 45 Prefix: athena/ - Status: Enabled AbortIncompleteMultipartUpload: DaysAfterInitiation: 7 NoncurrentVersionExpirationInDays: 7 PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true LoggingConfiguration: DestinationBucketName: !Sub sample-server-access-log-bucket-${AWS::AccountId}-${AWS::Region} TargetObjectKeyFormat: PartitionedPrefix: PartitionDateSource: EventTime VersioningConfiguration: Status: Enabled AthenaBucketPolicy01: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref AthenaBucket01 PolicyDocument: Version: 2012-10-17 Statement: - Sid: AllowAthenaGetBucketLocation Effect: Allow Principal: Service: - !Sub athena.${AWS::Region}.amazonaws.com Action: - s3:GetBucketLocation - s3:PutObject Resource: - !Sub arn:${AWS::Partition}:s3:::${AthenaBucket01} - !Sub arn:${AWS::Partition}:s3:::${AthenaBucket01}/* # Reference: https://docs.aws.amazon.com/securityhub/latest/userguide/s3-controls.html#s3-5 - Sid: AllowSSLRequestsOnly Effect: Deny Principal: '*' Action: s3:* Resource: - !Sub arn:${AWS::Partition}:s3:::${AthenaBucket01} - !Sub arn:${AWS::Partition}:s3:::${AthenaBucket01}/* Condition: Bool: aws:SecureTransport: false