AWS Configとは
AWS Configは、リソースごとの設定項目を生成し、履歴としてこれを保持するため、全ての変更を追跡することが可能で、AWSリソース間の関係と設定の履歴などを確認することができる。
- リソースの設定が最適であるか
- 現在のスナップショットの取得
- リソース設定の取得
- 設定履歴の取得
- リソース間の関係の表示
- 通知
これらの機能を用いて、リソースの管理、監査とコンプライアンス、設定変更の確認とトラブルシューティング、セキュリティ分析などを行うことができる。
設定項目は、S3バケットに蓄積することが可能で、データはJSON形式で、S3に6時間ごとに送信される。また、リソースが変更されたタイミング等で、Amazon SNSを用いてEメール等で通知することも可能である。
AWS Configは、マルチアカウントマルチリージョンの データ集約 に対応しており、複数のアカウントやリージョンの設定、コンプライアンスデータを1つのアカウントに集約することができる。
AWS Configの概念
設定履歴と設定項目、スナップショット、レコーダ
設定履歴は、特定期間の特定リソースに関する設定項目のコレクションである。また、設定項目は、アカウント内のサポートされているAWSリソースの属性(メタデータ、関係、設定、関連イベントなど)を記録したものである。設定スナップショット は、設定項目のコレクションで、記録対象のリソースの全体像を示す。スナップショットは、S3 Bucket
に配信が可能。
設定レコーダは、(標準設定では)Configがサポートしている全てのリソースの設定項目の評価と保存を行う。設定レコーダをオフにすると設定変更トリガによる評価は実行されない。一方で、定期実行トリガは引き続き指定した間隔で実行される。
設定ストリーム
設定ストリームは、設定項目の自動更新リストで、リソースの作成や変更、削除が行われる度に、Amazon SNS
を使用して通知を行うことができる。
ルール
AWS Configでは、望ましい設定をルールとして定めることができ、これに違反しているリソースに対しては、非準拠 のフラグを立てる。ルールは、事前に用意されたマネージドルールのほかに、ユーザが自ら作成したカスタムルールを適用することもできる。これらのルールは、リソースの設定変更時に評価されるのか、それとも定期的に評価されるのかを定義することができる。

AWS Configの仕組み
AWS Configは、サポートされているAWSリソースを検出し、リソースごとに設定項目を生成し、その記録を履歴として保持する。Configはリソースごとに、DescribeもしくはListのAPIコールによって、リソースの全ての変更を追跡する。Configルールを利用することで、定期的にこのルールに照らして、リソースの設定の評価を行うことができる。
また、この設定項目は、S3バケット もしくは Amazon SNS に配信することができる。SNSへ配信時のメッセージタイプは以下の通り。
メッセージタイプ | 内容 |
---|---|
ComplianceChangeNotification | コンプライアンスタイプの変更時 |
ConfigRulesEvaluationStarted | リソースの評価開始時 |
ConfigurationSnapshotDeliveryStarted | スナップショット配信開始時 |
ConfigurationSnapshotDeliveryCompleted | スナップショット配信完了時 |
ConfigurationSnapshotDeliveryFailed | スナップショット配信失敗時 |
ConfigurationHistoryDeliveryCompleted | 設定履歴配信完了時 |
ConfigurationItemChangeNotification | リソース変更時 |
OversizedConfigurationItemChangeNotification | SNSの最大サイズ超過時 |
AWS Configのセットアップ
AWS ConfigはCloudFormationに対応しているため、CloudFormation経由でConfigをセットアップすることができる。
サービスロールの有効化
以下のサービスロールを有効化することで、AWSリソースの読み込み権限 および S3への書き込み権限 を Config
に、IAMとSystemManagerへの書き込み権限 を Config Remediation
にそれぞれ付与する。
Resources: ServiceLinkedRoleForConfig: Type: AWS::IAM::ServiceLinkedRole DeletionPolicy: Retain Properties: AWSServiceName: config.amazonaws.com Description: A service-linked role required for AWS Config to access your resources. ServiceLinkedRoleForConfigRemediation: Type: AWS::IAM::ServiceLinkedRole DeletionPolicy: Retain Properties: AWSServiceName: remediation.config.amazonaws.com Description: A service-linked role required for AWS Config Remediation to access your resources.
Configの有効化
DeliveryChannel
と ConfigurationRecorder
を作成する。
Resources: ConfigDeliveryChannel: Type: AWS::Config::DeliveryChannel Properties: Name: default S3BucketName: !Ref S3ForConfig SnsTopicARN: !Ref SnsTopicARN ConfigConfigurationRecorder: Type: AWS::Config::ConfigurationRecorder Properties: Name: default RecordingGroup: AllSupported: true IncludeGlobalResourceTypes: true RoleARN: !Sub arn:aws:iam::${AWS::AccountId}:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig
すでにAWS Configをセットアップ済みの状態で上記テンプレートを実行すると、 the maximum number of delivery channels
エラーが発生する。その場合は既存の DeliveryChannel
を削除した上で、上記テンプレートを再度実行する。
aws configservice delete-delivery-channel --delivery-channel-name default aws configservice delete-configuration-recorder --configuration-recorder-name default
S3バケットの作成
設定情報 (履歴ファイルやスナップショット)を保存するために使用する、Amazon S3 バケットと、それに紐づくバケットポリシーを作成する。
Resources: S3ForConfig: Type: 'AWS::S3::Bucket' DeletionPolicy: Retain Properties: BucketName: !Sub defaultsecuritysettings-config-${AWS::Region}-${AWS::AccountId} LifecycleConfiguration: Rules: - Id: ExpirationInDays ExpirationInDays: 60 Status: Enabled PublicAccessBlockConfiguration: BlockPublicAcls: true BlockPublicPolicy: true IgnorePublicAcls: true RestrictPublicBuckets: true S3BucketPolicyForConfig: Type: AWS::S3::BucketPolicy Properties: Bucket: !Ref S3ForConfig PolicyDocument: Version: 2012-10-17 Id: !Ref S3ForConfig Statement: - Effect: Allow Principal: Service: config.amazonaws.com Action: - 's3:GetBucketAcl' - 's3:ListBucket' Resource: - !GetAtt S3ForConfig.Arn - Effect: Allow Principal: Service: config.amazonaws.com Action: - 's3:PutObject' Resource: - !Join - '' - - !GetAtt S3ForConfig.Arn - /AWSLogs/ - !Sub ${AWS::AccountId} - /Config/* Condition: StringEquals: s3:x-amz-acl: bucket-owner-full-control
CloudFormation Launch Stack URL
以下のボタンから上のCloudFormationテンプレートを実行することが可能である。ソースコードは、aws-cloudformation-templates/security – GitHub にて公開。
作成されるAWSサービス | CloudFormationテンプレート |
---|---|
セキュリティサービス全般 | ![]() |
Configのみ | ![]() |
モニタリング
他のAWSサービスを利用して、AWS Configのリソースをモニタリングすることができる。例えば、Amazon SQS
や Amazon CloudWatch Events
を利用することで、AWSリソースが作成、変更、削除された際に通知を受け取ることが可能となる。