Kanji
・クラウドエンジニア / フリーランス ・1993年生まれ ・愛媛県出身 / 東京都渋谷区在住 ・AWS歴5年 プロフィールの詳細
目次
cfn-guard validate \ --rules ~/cis-aws-benchmark-level-1.guard \ --data ./template.yml
Condition
aws:SourceArn
aws:SourceAccount
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: # 参考: https://docs.aws.amazon.com/ja_jp/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}/* # 参考: https://docs.aws.amazon.com/ja_jp/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 # 参考: https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_exportfindings.html#guardduty_exportfindings-s3-policies - Sid: Allow PutObject Effect: Allow Principal: Service: guardduty.amazonaws.com Action: s3:PutObject Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01}/* - Sid: Allow GetBucketLocation Effect: Allow Principal: Service: guardduty.amazonaws.com Action: s3:GetBucketLocation Resource: !Sub arn:${AWS::Partition}:s3:::${AuditLogBucket01} # 参考: https://docs.aws.amazon.com/ja_jp/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} # 参考: https://docs.aws.amazon.com/ja_jp/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: サーバーアクセスログバケット自体のログ記録は不要 guard: SuppressedRules: - S3_BUCKET_LOGGING_ENABLED # サーバーアクセスログバケット自体のログ記録は不要 Properties: BucketName: !Sub sample-server-access-log-bucket-${AWS::AccountId}-${AWS::Region} BucketEncryption: # SSE−KMS はサポートされていないため、SSE-S3 を使用 # 参考: https://docs.aws.amazon.com/ja_jp/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: # 参考: https://docs.aws.amazon.com/ja_jp/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}/* # 参考: https://docs.aws.amazon.com/ja_jp/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: Enable IAM User Permissions Effect: Allow Principal: AWS: !Ref AWS::AccountId Action: kms:* Resource: '*' # 参考: https://docs.aws.amazon.com/ja_jp/guardduty/latest/ug/guardduty_exportfindings.html - Sid: AllowGuardDutyKey Effect: Allow Principal: Service: guardduty.amazonaws.com Action: kms:GenerateDataKey Resource: '*'
s3:PutObject
s3:GetBucketLocation
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}/* # 参考: https://docs.aws.amazon.com/ja_jp/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