[小ネタ] AWS Configのカスタマー管理レコーダーはデフォルトでグローバルIAMリソースを記録しない
はじめに
みなさんこんにちは、クラウド事業本部コンサルティング部の浅野です。
「AWS Config」によって記録されるリソースの記録頻度を変更したい場合や、特定のリソースを記録から除外したい場合は「顧客管理レコーダー」の設定を行うことで実現できます。
さらに「AWS Config」において特定リソースの変更記録頻度を「連続」→「日次」に変更することで料金が安くなるパターンがあります。
どのパターンで安くなるかは以下のブログがわかりやすいので参考にしてください。
参考:
私も最近「AWS Config」の特定リソースについて変更記録頻度を「連続」→「日次」に変更する機会があり、手順に再現性を持たせるために「AWS CLI」を用いて作業を行っていました。
その際、デフォルトで「カスタマー管理レコーダーはグローバルリソースを記録しない」という事を知らなかったために意図しない挙動になり、設定ミスに繋がりそうでしたので戒めとして記事にまとめます。単なる私の知識不足によるものではありますがご容赦ください。
発生した事象
まずどのような変更を行ったかを説明します。
※ 環境は「ap-northeast-1」東京リージョンにて設定しています。
変更前は下記画面の通り、既存の「顧客管理レコーダー」に対して「オーバーライド設定」がなされておらず、全てのリソースが「AWS Config」によって「連続」頻度で記録されている状態でした。
「AWS CLI」でも現状を確認しておきます。
aws configservice describe-configuration-recorders
{
"ConfigurationRecorders": [
{
"arn": "arn:aws:config:ap-northeast-1:************:configuration-recorder/default/v9rbofbu5grcolh4",
"name": "default",
"roleARN": "arn:aws:iam::************:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingGroup": {
"allSupported": true,
"includeGlobalResourceTypes": true,
"resourceTypes": [],
"exclusionByResourceTypes": {
"resourceTypes": []
},
"recordingStrategy": {
"useOnly": "ALL_SUPPORTED_RESOURCE_TYPES"
}
},
"recordingMode": {
"recordingFrequency": "CONTINUOUS",
"recordingModeOverrides": []
},
"recordingScope": "PAID"
}
]
}
参考: 使用したコマンドについて
VPCの変更について記録量が多かったのでリソースタイプ「AWS::EC2::VPC」の記録頻度を「連続」→「日次」に変更しました。
変更前は下記のように「連続」になっていることがわかります。
aws configservice put-configuration-recorder \
--configuration-recorder '{
"name": "default",
"roleARN": "arn:aws:iam::************:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingMode": {
"recordingFrequency": "CONTINUOUS",
"recordingModeOverrides": [
{
"description": "Override recording frequency to daily",
"resourceTypes": [
"AWS::EC2::VPC"
],
"recordingFrequency": "DAILY"
}
]
}
}
無事変更が完了しました。コンソール画面にて確認してみましょう。
無事に「AWS::EC2::VPC」のリソースタイプがオーバーライドされて「日次」記録に設定されていますね。
しかし同時に幾つかの「IAM」関連のリソースが記録から除外されています。このままではIAMに関する変更が記録されません。
変更後の状態も「AWS CLI」にて確認してみましょう。
aws configservice describe-configuration-recorders
{
"ConfigurationRecorders": [
{
"arn": "arn:aws:config:ap-northeast-1:************:configuration-recorder/default/v9rbofbu5grcolh4",
"name": "default",
"roleARN": "arn:aws:iam::************:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingGroup": {
"allSupported": true,
"includeGlobalResourceTypes": false, // 変更前と異なり「false」になっている
"resourceTypes": [],
"exclusionByResourceTypes": {
"resourceTypes": []
},
"recordingStrategy": {
"useOnly": "ALL_SUPPORTED_RESOURCE_TYPES"
}
},
"recordingMode": {
"recordingFrequency": "CONTINUOUS",
"recordingModeOverrides": [
{
"description": "Override recording frequency to daily",
"resourceTypes": [
"AWS::EC2::VPC"
],
"recordingFrequency": "DAILY"
}
]
},
"recordingScope": "PAID"
}
]
}
「recordingModeOverrides」項目が上書きされて「AWS::EC2::VPC」の記録頻度が「DAILY」に設定できていますが、変更していない「includeGlobalResourceTypes」が「true」から「false」に変わっていますね。これがIAM系リソースが除外された理由です。
「put-configuration-recorder」のコマンドリファレンスを読んでみましょう。
Description項目抜粋し、翻訳
recordingGroup フィールドに値を指定していない場合、カスタマー管理構成レコーダーのデフォルトでは、グローバル IAM リソースタイプ ( AWS::IAM::Group 、 AWS::IAM::Policy 、 AWS::IAM::Role 、 AWS::IAM::User ) を除く、サポートされているすべてのリソースタイプが記録されます。
めちゃくちゃ重要なことが記載されていました。しっかりと事前に読み込みたいですがなかなかこれは気付きにくいです。
「includeGlobalResourceTypes」の項目抜粋し、翻訳
このオプションは、グローバルIAMリソースタイプ(IAMユーザー、グループ、ロール、カスタマー管理ポリシー)にのみ適用されるバンドルです。これらのグローバルIAMリソースタイプは、2022年2月以前にConfigが利用可能だったリージョンでのみConfigによって記録できます。2022年2月以降にConfigがサポートされたリージョンでは、グローバルIAMリソースタイプを記録することはできません。これらのリージョンのリストについては、「Amazon Web Servicesリソースの記録 | グローバルリソース」を参照してください。
と記載があります。
「東京リージョン」は2022年2月以前にConfigが利用可能なのでこの制約には当てはまりません。
ですが他リージョンとの兼ね合いでデフォルトでグローバルIAMリソースタイプの記録を有効にしてしまうとリージョン間にて差異が出るために、デフォルトでは「グローバルIAMリソースタイプ」の記録が除外されていると推測できました。
「AWS Config」公式ドキュメントにも記述がありました。
デフォルトでは、グローバルIAMリソースタイプを除く、サポートされているすべてのリソースタイプを記録します。
対策
知ってしまえば当然ですが、「グローバルIAMリソースタイプ」の記録を含めながら設定変更を行う場合は必ず以下のように値が変わらなくとも「recordingGroup」の設定を明示的に入れてあげましょう。
aws configservice put-configuration-recorder \
--configuration-recorder '{
"name": "default",
"roleARN": "arn:aws:iam::************:role/aws-service-role/config.amazonaws.com/AWSServiceRoleForConfig",
"recordingGroup": {
"allSupported": true,
"includeGlobalResourceTypes": true
},
"recordingMode": {
"recordingFrequency": "CONTINUOUS",
"recordingModeOverrides": [
{
"description": "Override recording frequency to daily",
"resourceTypes": [
"AWS::EC2::VPC"
],
"recordingFrequency": "DAILY"
}
]
}
}'
コンソール上でも意図した通りの設定が確認できました。
最後に
コンソール上でやりたい変更をそのままのニュアンスで「AWS CLI」で行うと意図しない設定ミスにつながるという教訓になりました。
再度実行前にはコマンドリファレンスをよく読みます。
今回は以上です。