CloudFormation 수집 스택: CFN 검사기 예제 - AMS 고급 애플리케이션 개발자 안내서

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CloudFormation 수집 스택: CFN 검사기 예제

이 예제는 성공적인 수집을 위해 템플릿을 준비하는 데 도움이 될 수 있습니다.

형식 검증

템플릿에 "리소스" 섹션이 포함되어 있고 템플릿 아래에 정의된 모든 리소스에 "유형" 값이 있는지 확인합니다.

{ "AWSTemplateFormatVersion": "2010-09-09", "Description" : "Create a SNS topic", "Resources": { "SnsTopic": { "Type": "AWS::SNS::Topic" } } }

템플릿의 루트 키가 허용되는지 확인합니다. 허용되는 루트 키는 다음과 같습니다.

[ "AWSTemplateFormatVersion", "Description", "Mappings", "Parameters", "Conditions", "Resources", "Rules", "Outputs", "Metadata" ]

수동 검토 필수 검증

템플릿에 다음 리소스가 포함된 경우 자동 검증이 실패하고 수동 검토가 필요합니다.

표시된 정책은 보안 관점에서 고위험 영역입니다. 예를 들어 특정 사용자 또는 그룹을 제외한 모든 사용자가 객체를 생성하거나 권한을 쓸 수 있도록 허용하는 S3 버킷 정책은 매우 위험합니다. 따라서 정책을 검증하고 내용을 기반으로 승인 또는 거부하며 이러한 정책은 자동으로 생성할 수 없습니다. 이 문제를 해결하기 위해 가능한 접근 방식을 조사하고 있습니다.

현재 다음 리소스에 대한 자동 검증은 없습니다.

[ "S3::BucketPolicy", "SNS::TopicPolicy", "SQS::QueuePolicy" ]

파라미터 확인

템플릿 파라미터에 값이 제공되지 않은 경우 기본값이 있어야 합니다.

리소스 속성 검증

필수 속성 검사: 특정 리소스 유형에 대해 특정 속성이 있어야 합니다.

  • 에 "VPCOptions"가 있어야 합니다. AWS::OpenSearch::Domain

  • "CludsterSubnetGroupName"이에 있어야 합니다. AWS::Redshift::Cluster

{ "AWS::OpenSearch::Domain": [ "VPCOptions" ], "AWS::Redshift::Cluster": [ "ClusterSubnetGroupName" ] }

허용되지 않는 속성 검사: 특정 리소스 유형에는 특정 속성이 *not* 존재해야 합니다.

  • "AWS::SecretsManager::Secret"에 "SecretString"이 없어야 합니다.AWS::SecretsManager::Secret

  • “AWS::DMS::EndpointMongoDbSettings”가 없어야 합니다.

{ "AWS::SecretsManager::Secret": [ "SecretString" ], "AWS::DMS::Endpoint": [ "MongoDbSettings" ] }

SSM 파라미터 검사: 다음 목록의 속성의 경우 Secrets Manager 또는 Systems Manager Parameter Store(Secure String Parameter)를 통해 값을 지정해야 합니다.

{ "RDS::DBInstance": [ "MasterUserPassword", "TdeCredentialPassword" ], "RDS::DBCluster": [ "MasterUserPassword" ], "ElastiCache::ReplicationGroup": [ "AuthToken" ], "DMS::Certificate": [ "CertificatePem", "CertificateWallet" ], "DMS::Endpoint": [ "Password" ], "CodePipeline::Webhook": { "AuthenticationConfiguration": [ "SecretToken" ] }, "DocDB::DBCluster": [ "MasterUserPassword" ] },

일부 속성은 특정 패턴을 준수해야 합니다. 예를 들어 IAM 인스턴스 프로파일 이름은 AMS 예약 접두사로 시작해서는 안 되며 속성 값은 다음과 같이 특정 정규식과 일치해야 합니다.

{ "AWS::EC2::Instance": { "IamInstanceProfile": [ "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+", "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] }, "AWS::AutoScaling::LaunchConfiguration": { "IamInstanceProfile": [ "^(?!arn:aws:iam|ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+", "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] }, "AWS::EC2::LaunchTemplate": { "LaunchTemplateData.IamInstanceProfile.Name": [ "^(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ], "LaunchTemplateData.IamInstanceProfile.Arn": [ "arn:aws:iam::(\\$\\{AWS::AccountId\\}|[0-9]+):instance-profile\/(?!ams|Ams|AMS|AWSManagedServices|Managed_Services|mc|Mc|MC|sentinel|Sentinel).+" ] } }

리소스 검증

템플릿에는 허용 목록에 있는 리소스만 지정할 수 있습니다. 이러한 리소스는에 설명되어 있습니다지원되는 리소스.

패치 적용 제한으로 인해 동일한 스택에서 EC2 스택과 Auto Scaling 그룹(ASGs)이 허용되지 않습니다.

보안 그룹 수신 규칙 검증

  • CFN Ingest Create 또는 Stack Update CT 변경 유형에서 오는 요청의 경우:

    • (IpProtocol는 tcp 또는 6) AND (포트는 80 또는 443) 인 경우 CidrIP 값에 대한 제한이 없습니다.

    • 그렇지 않으면는 0.0.0.0/0이 될 수 CidrIP 없습니다.

  • Service Catalog(Service Catalog 제품)에서 오는 요청의 경우:

    • CFN Ingest Create 또는 Stack Update CT 변경 유형 검증 외에도의 프로토콜이 management_ports 있는의 포트는 allowed_cidrs를 통해서만 액세스할 ip_protocols 수 있습니다.

      { "ip_protocols": ["tcp", "6", "udp", "17"], "management_ports": [22, 23, 389, 636, 1494, 1604, 2222, 3389, 5900, 5901, 5985, 5986], "allowed_cidrs": ["10.0.0.0/8", "100.64.0.0/10", "172.16.0.0/12", "192.168.0.0/16"] }