Created
June 16, 2020 01:37
-
-
Save mechanicalpete/10b8aa6a48ece0ea457724bbf9e52a8f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
AWSTemplateFormatVersion: 2010-09-09 | |
Parameters: | |
ParamBucketPrefix: | |
Type: String | |
Description: The bucket name must contain only lowercase letters, numbers, periods (.), and dashes (-). | |
MinLength: 3 | |
MaxLength: 63 | |
ParamRetentionDays: | |
Type: Number | |
Description: The number of days an upload file is locked for | |
Default: 7 | |
ParamCurrentExpirationDays: | |
Type: Number | |
Description: The number of days before a file is marked deleted | |
Default: 8 | |
ParamNoncurrentExpirationDays: | |
Type: Number | |
Description: The number of days after becoming soft-deleted that a file is permanently deleted | |
Default: 1 | |
Resources: | |
Bucket: | |
Type: AWS::S3::Bucket | |
Properties: | |
BucketName: !Sub '${ParamBucketPrefix}-example-lifelocks' | |
LifecycleConfiguration: | |
Rules: | |
- AbortIncompleteMultipartUpload: | |
DaysAfterInitiation: 1 | |
ExpirationInDays: !Ref ParamCurrentExpirationDays | |
NoncurrentVersionExpirationInDays: !Ref ParamNoncurrentExpirationDays | |
Status: Enabled # Disabled | Enabled | |
ObjectLockEnabled: true | |
VersioningConfiguration: | |
Status: Enabled | |
BucketPolicy: | |
Type: AWS::S3::BucketPolicy | |
Properties: | |
Bucket: !Ref Bucket | |
PolicyDocument: | |
Version: '2012-10-17' | |
Statement: | |
- Sid: 'RequireObjectLockMode' | |
Effect: Deny | |
Principal: '*' | |
Action: | |
- 's3:PutObject' | |
- 's3:PutObjectRetention' | |
Resource: | |
- !Sub '${Bucket.Arn}/*' | |
Condition: | |
'Null': | |
's3:object-lock-mode': 'true' | |
- Sid: 'RequireObjectLockModeToBeCompliance' | |
Effect: Deny | |
Principal: '*' | |
Action: | |
- 's3:PutObject' | |
- 's3:PutObjectRetention' | |
Resource: | |
- !Sub '${Bucket.Arn}/*' | |
Condition: | |
'StringNotEqualsIgnoreCase': | |
's3:object-lock-mode': 'COMPLIANCE' | |
- Sid: 'RequireRetentionDays' | |
Effect: Deny | |
Principal: '*' | |
Action: | |
- 's3:PutObject' | |
- 's3:PutObjectRetention' | |
Resource: | |
- !Sub '${Bucket.Arn}/*' | |
Condition: | |
'Null': | |
's3:object-lock-remaining-retention-days': 'true' | |
- Sid: 'RequireRetentionToBeThreeDays' | |
Effect: Deny | |
Principal: '*' | |
Action: | |
- 's3:PutObject' | |
- 's3:PutObjectRetention' | |
Resource: | |
- !Sub '${Bucket.Arn}/*' | |
Condition: | |
NumericNotEquals: | |
's3:object-lock-remaining-retention-days': !Ref ParamRetentionDays | |
Outputs: | |
BucketName: | |
Value: !Ref Bucket | |
BucketArn: | |
Value: !GetAtt Bucket.Arn | |
BucketDomainName: | |
Value: !GetAtt Bucket.DomainName | |
BucketDualStackDomainName: | |
Value: !GetAtt Bucket.DualStackDomainName | |
BucketRegionalDomainName: | |
Value: !GetAtt Bucket.RegionalDomainName | |
BucketWebsiteUrl: | |
Value: !GetAtt Bucket.WebsiteURL |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment