メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

AWS::Config::ConfigRule

AWS::Config::ConfigRule リソースは、設定項目を評価して AWS リソースが指定された設定に準拠しているかどうかを評価する AWS Lambda (Lambda) 関数を使用します。この関数は、AWS Config が設定の変更を検出したときや、設定スナップショットを配信するときに実行できます。この関数が評価するリソースは、記録グループに含まれている必要があります。詳細については、AWS Config Developer Guideの「AWS 設定を使用した AWS リソース設定の評価」を参照してください。

構文

AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。

JSON

Copy
{ "Type" : "AWS::Config::ConfigRule", "Properties" : { "ConfigRuleName" : String, "Description" : String, "InputParameters" : { ParameterName : Value }, "MaximumExecutionFrequency" : String, "Scope" : Scope, "Source" : Source } }

YAML

Copy
Type: "AWS::Config::ConfigRule" Properties: ConfigRuleName: String Description: String InputParameters: ParameterName : Value MaximumExecutionFrequency: String Scope: Scope Source: Source

プロパティ

ConfigRuleName

AWS Config ルールの名前。名前を指定しない場合、AWS CloudFormation は一意の物理 ID を生成し、その ID をルール名として使用します。詳細については、「Name タイプ」を参照してください。

Required: No

Type: String

更新に伴う要件: 置換

Description

この AWS Config ルールの説明。

Required: No

Type: String

更新に伴う要件: 中断はありません。

InputParameters

AWS Config ルール (Lambda 関数) に渡される入力パラメーターの値。

Required: No

Type: JSON object

更新に伴う要件: 中断はありません。

MaximumExecutionFrequency

AWS Config ルールが評価を実行する最大頻度。有効な値については、AWS Config API Referenceの「ConfigRule」を参照してください。

AWS Config が設定スナップショットを配信したときにルールが評価を実行する場合、ルールはスナップショット配信頻度より頻繁に実行することはできません。実行頻度の値は、スナップショット配信頻度の値 (AWS::Config::DeliveryChannel リソースのプロパティ) 以上に設定してください。

Required: No

Type: String

更新に伴う要件: 中断はありません。

Scope

設定が変更されたときに評価をトリガーする AWS リソースを定義します。範囲には、1 つ以上のリソースタイプ、タグキーと値の組み合わせ、または 1 つのリソースタイプと 1 つのリソース ID の組み合わせを含めることができます。評価されるリソースを制限する範囲を指定します。範囲を指定しない場合、ルールは記録グループに含まれるすべてリソースを評価します。

Required: No

Type: AWS Config ConfigRule Scope

更新に伴う要件: 中断はありません。

Source

ルールの所有者、ルールの識別子、AWS リソースを評価する関数を実行するイベントを指定します。

Required: Yes

Type: AWS Config ConfigRule ソース

更新に伴う要件: 中断はありません。

戻り値

参照番号

AWS::Config::ConfigRule リソースの論理 ID を組み込み Ref 関数に渡すと、関数はルール名 (mystack-MyConfigRule-12ABCFPXHV4OV など) を返します。

Ref 関数の使用方法の詳細については、「Ref」を参照してください。

Fn::GetAtt

Fn::GetAtt は、このタイプの指定された属性の値を返します。以下には、利用可能な属性とサンプル戻り値のリストが示されます。

Arn

arn:aws:config:us-east-1:123456789012:config-rule/config-rule-a1bzhi など、AWS Config ルールの Amazon リソースネーム (ARN)。

ConfigRuleId

AWS Config ルールの ID (config-rule-a1bzhi など)。

Compliance.Type

AWS Config ルールの準拠ステータス (COMPLIANTNON_COMPLIANT など)。

Fn::GetAtt の使用の詳細については、「Fn::GetAtt」を参照してください。

次の例では、EC2 ボリュームリソースタイプに CostCenter タグがあるかどうか確認する、AWS で管理されるルールを使用します。

JSON

Copy
"ConfigRuleForVolumeTags": { "Type": "AWS::Config::ConfigRule", "Properties": { "InputParameters": {"tag1Key": "CostCenter"}, "Scope": { "ComplianceResourceTypes": ["AWS::EC2::Volume"] }, "Source": { "Owner": "AWS", "SourceIdentifier": "REQUIRED_TAGS" } } }

YAML

Copy
ConfigRuleForVolumeTags: Type: "AWS::Config::ConfigRule" Properties: InputParameters: tag1Key: CostCenter Scope: ComplianceResourceTypes: - "AWS::EC2::Volume" Source: Owner: AWS SourceIdentifier: "REQUIRED_TAGS"

Lambda 関数を使用したルール

次の例では、Lambda 関数を使用するカスタム設定ルールを作成します。この関数は、EC2 ボリュームの AutoEnableIO プロパティセットが true に設定されているかどうかを確認します。設定ルールには、Lambda ポリシーへの依存関係があるため、ルールは許可された後にのみ関数を呼び出すという点に注意してください。

JSON

Copy
"ConfigPermissionToCallLambda": { "Type": "AWS::Lambda::Permission", "Properties": { "FunctionName": {"Fn::GetAtt": ["VolumeAutoEnableIOComplianceCheck", "Arn"]}, "Action": "lambda:InvokeFunction", "Principal": "config.amazonaws.com" } }, "VolumeAutoEnableIOComplianceCheck": { "Type": "AWS::Lambda::Function", "Properties": { "Code": { "ZipFile": {"Fn::Join": ["\n", [ "var aws = require('aws-sdk');", "var config = new aws.ConfigService();", "var ec2 = new aws.EC2();", "exports.handler = function(event, context) {", " compliance = evaluateCompliance(event, function(compliance, event) {", " var configurationItem = JSON.parse(event.invokingEvent).configurationItem;", " var putEvaluationsRequest = {", " Evaluations: [{", " ComplianceResourceType: configurationItem.resourceType,", " ComplianceResourceId: configurationItem.resourceId,", " ComplianceType: compliance,", " OrderingTimestamp: configurationItem.configurationItemCaptureTime", " }],", " ResultToken: event.resultToken", " };", " config.putEvaluations(putEvaluationsRequest, function(err, data) {", " if (err) context.fail(err);", " else context.succeed(data);", " });", " });", "};", "function evaluateCompliance(event, doReturn) {", " var configurationItem = JSON.parse(event.invokingEvent).configurationItem;", " var status = configurationItem.configurationItemStatus;", " if (configurationItem.resourceType !== 'AWS::EC2::Volume' || event.eventLeftScope || (status !== 'OK' && status !== 'ResourceDiscovered'))", " doReturn('NOT_APPLICABLE', event);", " else ec2.describeVolumeAttribute({VolumeId: configurationItem.resourceId, Attribute: 'autoEnableIO'}, function(err, data) {", " if (err) context.fail(err);", " else if (data.AutoEnableIO.Value) doReturn('COMPLIANT', event);", " else doReturn('NON_COMPLIANT', event);", " });", "}" ]]} }, "Handler": "index.handler", "Runtime": "nodejs4.3", "Timeout": "30", "Role": {"Fn::GetAtt": ["LambdaExecutionRole", "Arn"]} } }, "ConfigRuleForVolumeAutoEnableIO": { "Type": "AWS::Config::ConfigRule", "Properties": { "ConfigRuleName": "ConfigRuleForVolumeAutoEnableIO", "Scope": { "ComplianceResourceId": {"Ref": "Ec2Volume"}, "ComplianceResourceTypes": ["AWS::EC2::Volume"] }, "Source": { "Owner": "CUSTOM_LAMBDA", "SourceDetails": [{ "EventSource": "aws.config", "MessageType": "ConfigurationItemChangeNotification" }], "SourceIdentifier": {"Fn::GetAtt": ["VolumeAutoEnableIOComplianceCheck", "Arn"]} } }, "DependsOn": "ConfigPermissionToCallLambda" }

YAML

Copy
ConfigPermissionToCallLambda: Type: "AWS::Lambda::Permission" Properties: FunctionName: Fn::GetAtt: - VolumeAutoEnableIOComplianceCheck - Arn Action: "lambda:InvokeFunction" Principal: "config.amazonaws.com" VolumeAutoEnableIOComplianceCheck: Type: "AWS::Lambda::Function" Properties: Code: ZipFile: !Sub | var aws = require('aws-sdk'); var config = new aws.ConfigService(); var ec2 = new aws.EC2(); exports.handler = function(event, context) { compliance = evaluateCompliance(event, function(compliance, event) { var configurationItem = JSON.parse(event.invokingEvent).configurationItem; var putEvaluationsRequest = { Evaluations: [{ ComplianceResourceType: configurationItem.resourceType, ComplianceResourceId: configurationItem.resourceId, ComplianceType: compliance, OrderingTimestamp: configurationItem.configurationItemCaptureTime }], ResultToken: event.resultToken }; config.putEvaluations(putEvaluationsRequest, function(err, data) { if (err) context.fail(err); else context.succeed(data); }); }); }; function evaluateCompliance(event, doReturn) { var configurationItem = JSON.parse(event.invokingEvent).configurationItem; var status = configurationItem.configurationItemStatus; if (configurationItem.resourceType !== 'AWS::EC2::Volume' || event.eventLeftScope || (status !== 'OK' && status !== 'ResourceDiscovered')) doReturn('NOT_APPLICABLE', event); else ec2.describeVolumeAttribute({VolumeId: configurationItem.resourceId, Attribute: 'autoEnableIO'}, function(err, data) { if (err) context.fail(err); else if (data.AutoEnableIO.Value) doReturn('COMPLIANT', event); else doReturn('NON_COMPLIANT', event); }); } Handler: "index.handler" Runtime: nodejs4.3 Timeout: 30 Role: Fn::GetAtt: - LambdaExecutionRole - Arn ConfigRuleForVolumeAutoEnableIO: Type: "AWS::Config::ConfigRule" Properties: ConfigRuleName: ConfigRuleForVolumeAutoEnableIO Scope: ComplianceResourceId: Ref: Ec2Volume ComplianceResourceTypes: - "AWS::EC2::Volume" Source: Owner: "CUSTOM_LAMBDA" SourceDetails: - EventSource: "aws.config" MessageType: "ConfigurationItemChangeNotification" SourceIdentifier: Fn::GetAtt: - VolumeAutoEnableIOComplianceCheck - Arn DependsOn: ConfigPermissionToCallLambda

このページの内容: