AWS Configで非準拠リソースを検出時に修復アクションを設定する
AWS SOAの出題範囲の1つである、モニタリング、ロギング、および修復に関する内容です。
AWS Configでは、修復アクションを定義することができます。
AWS Config では、AWS Config Rules で評価されている非準拠のリソースを修復できます。
AWS Config Rules による非準拠 AWS リソースの修復
今回はS3バケットのSSEに関するAWS Configルールと修復アクションを定義して、実際の挙動を確認します。
構築する環境
検証用として、SSEを有効化したS3バケットを作成します。
AWS Configで、S3バケットのSSEに関するルールと、修復アクションを作成します。
SSEが無効になっているS3バケットが検出され、非準拠と判定されると、自動的にこれを復元します。
CloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置しています。
https://github.com/awstut-an-r/awstut-soa/tree/main/01/001
テンプレートファイルのポイント解説
本ページは、AWS Configの修復アクションに関する内容を中心に取り上げます。
AWS Configに関する基本的な事項については、以下のページをご確認ください。
AWS Configルール
Resources:
S3BucketSSEEnabledConfigRule:
Type: AWS::Config::ConfigRule
DependsOn:
- ConfigurationRecorder
Properties:
ConfigRuleName: !Sub "${Prefix}-S3-Bucket-SSE-Enabled"
Scope:
ComplianceResourceId: !Ref TestBucket
ComplianceResourceTypes:
- AWS::S3::Bucket
Source:
Owner: AWS
SourceIdentifier: S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED
Code language: YAML (yaml)
S3バケットのSSEに関するルールを定義します。
今回は検証用ということで、監査対象とするリソースを限定します。
Scopeプロパティ内の、ComplianceResourceIdプロパティにバケット名を、ComplianceResourceTypesプロパティに「AWS::S3::Bucket」を指定することで、検証用バケットだけをルールの対象とします。
AWS Config修復アクション
Resources:
RemediationConfiguration:
Type: AWS::Config::RemediationConfiguration
Properties:
Automatic: true
ConfigRuleName: !Ref S3BucketSSEEnabledConfigRule
MaximumAutomaticAttempts: 5
Parameters:
BucketName:
ResourceValue:
Value: RESOURCE_ID
SSEAlgorithm:
StaticValue:
Values:
- !Ref SSEAlgorithm
AutomationAssumeRole:
StaticValue:
Values:
- !GetAtt RemediationConfigurationRole.Arn
ResourceType: AWS::S3::Bucket
RetryAttemptSeconds: 60
TargetId: AWS-EnableS3BucketEncryption
TargetType: SSM_DOCUMENT
TargetVersion: "1"
Code language: YAML (yaml)
修復アクションはSSM Automationドキュメントを使用することで実現されます。
AWS Config では、AWS Systems Manager 自動化ドキュメントを使用して修復が適用されます。これらのドキュメントは、AWS Config Rules によって評価された非準拠の AWS リソースに対して実行されるアクションを定義します。
AWS Config Rules による非準拠 AWS リソースの修復
特徴的なパラメータを取り上げます。
Automaticプロパティは、修復アクションを自動的に実行するかどうかを設定するパラメータです。
非準拠のリソースの修復を手動で行うか、自動で行うかを選択できます。自動で行う場合は、修復アクションを AWS Config ルールに関連付けます。
AWS Config Rules による非準拠 AWS リソースの修復
今回は「true」を指定して、自動的に修復アクションを実行するように設定します。
TargetId・TargetType・TargetVersionプロパティは、実行するドキュメントに関するパラメータです。
今回はマネージドドキュメントAWS-EnableS3BucketEncryptionを実行することによって、S3バケットをSSE有効化します。
以下のページで、このドキュメントの詳細が確認できます。
MaximumAutomaticAttemptsプロパティは、自動修復の失敗回数の最大値を指定するパラメータです。
今回はデフォルト値の5回に設定します。
RetryAttemptSecondsプロパティは、自動修復を実行する最大時間に関するパラメータです。
今回はデフォルト値の60秒に設定します。
Parametersプロパティはドキュメントを実行する際に渡すパラメータです。
上記のページで示されている通り、このドキュメントを実行するためには、以下の3つのパラメータを指定する必要があります。
- BucketName
- SSEAlgorithm
- AutomationAssumeRole
Parametersプロパティにこれらのパラメータを設定します。
ポイントは各パラメータに指定する値が動的/静的かという点です。
例えばBucketNameは動的な値です。
これは監査で非準拠として判定されたバケットごとに異なるためです。
動的な値の場合は、ResourceValueプロパティを使用し、内部のValueプロパティに「RESOURCE_ID」を指定します。
一方、SSEAlgorithmとAutomationAssumeRoleは静的な値です。
前者はデフォルト値の「AES256」を、後者は後述のIAMロールを固定的に指定します。
この場合はStaticValueプロパティを使用し、内部のValuesプロパティに値を設定します。
IAMロールはSSM Automationが修復アクションに必要な権限を与えるためのものです。
Resources:
RemediationConfigurationRole:
Type: AWS::IAM::Role
DeletionPolicy: Delete
Properties:
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
Service:
- ssm.amazonaws.com
Policies:
- PolicyName: S3PutSSEPolicy
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action:
- s3:PutEncryptionConfiguration
Resource:
- !Sub "arn:aws:s3:::${TestBucket}"
Code language: YAML (yaml)
今回は検証用バケットに対してSSE設定を有効化できる権限を与えます。
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- AWS Configルール:soa-01-001-S3-Bucket-SSE-Enabled
- 検証用バケット:soa-01-001-encryption-enabled
AWS Management Consoleから各リソースを確認します。
まずAWS Configルールを確認します。
正常にルールが作成されていることがわかります。
ルールに基づく監査によって、検証用バケットが「Compliant」であることもわかります。
修復アクションが定義され、SSMドキュメントAWS-EnableS3BucketEncryptionおよびドキュメント実行用パラメータが指定されています。
検証用バケットのSSEが無効化され、監査の結果で非準拠だと判定された場合、修復アクションとしてこのドキュメントが実行されることになります。
検証用バケットを確認します。
確かにSSEが有効化されていることがわかります。
動作確認
準備が整いましたので、実際の動作を確認します。
S3バケットのSSE設定を無効化します。
SSEが無効化されました。
AWS Configの評価が変更されます。
先ほどまで「Compliant」でしたが、SSEを無効化したことで「Nocompliant」に変化しました。
SSM Automationを確認します。
確かにSSM Automationが実行されました。
SSM Automationによって、SSMドキュメントAWS-EnableS3BucketEncryptionが実行され、正常に完了したことがわかります。
改めてAWS ConfigルールおよびS3バケットを確認します。
AWS Configルールのページでは、再び「Compliant」に戻りました。
そしてS3バケットのページでも、再びSSEが有効化されたことがわかります。
このことから、SSM AutomationでSSMドキュメントが実行されて、S3バケットのSSE機能が有効化されたことがわかります。
まとめ
AWS Configルールに修復アクションを定義することで、自動的にリソースを復旧させる方法を確認しました。