1.はじめに
エンジニアとしてAWSを利用していると、お客様(非エンジニア)とのギャップに気づくことが多々あります。
エンジニアとしては「コンソールから見れば済むのに」という内容も、お客様にとってはパラメータシートなど資料に起こして管理したいと思うこともあるようです。
今回は、AWS Configを一覧で取得しようと思います。
※プログラム歴が浅く、コード上の改善案があればコメント頂けると幸いです
2. 本記事の内容
いくつかの参考記事をベースにPythonのBotoCoreを使い
サービス上限緩和の状況をJSON形式で一覧として取得します。
3. 実装内容
describe_config_rules()
APIを使い、ルール一覧作成
4. 参考
5. 実装詳細
5-1. ソース
import boto3
region='ap-northeast-1'
### config rule一覧取得
config_rules_list = boto3.client('config', region_name=region).describe_config_rules()
tmp_result_config_rules = config_rules_list
if 'NextToken' in tmp_result_config_rules:
while 'NextToken' in tmp_result_config_rules:
next_token = tmp_result_config_rules['NextToken']
tmp_result_config_rules = boto3.client('config', region_name=region).describe_config_rules(NextToken=next_token)
config_rules_list['ConfigRules'].extend(tmp_result_config_rules['ConfigRules'])
with open('config_rules_list.txt', 'a') as f:
print(config_rules_list, file=f)
5-2. Configルール一覧結果イメージ
'ConfigRuleName'はルール名です。
'ConfigRuleArn'はルールのARNです。
'ConfigRuleId'はルールに一意に割り当てられるIDです。同じマネージドルールでも複数デプロイできるので、そういったときは末尾の識別子が違うものがデプロイされます。
'Owner'は、AWS or CUSTOM_LAMBDAが表示されます。マネージドルールの場合はAWS、カスタムルールの場合はCUSTOM_LAMBDAです。
'SourceIdentifier'はマネージドルールの場合は固定のルール識別子、カスタムルールの場合はLambdaのARNが表示されます。
'InputParameters'はルールごとのパラメータが表示されます。
'MaximumExecutionFrequency'は定期評価をするルールで設定されるものです。デフォルトは24時間です。
'ConfigRuleState'はルールの状態です。ACTIVEは利用可能な状態です。
{
'ConfigRules':
[
{
'ConfigRuleName': 'access-keys-rotated',
'ConfigRuleArn': 'arn:aws:config:ap-northeast-1:***:config-rule/config-rule-***',
'ConfigRuleId': 'config-rule-***',
'Source':
{
'Owner': 'AWS',
'SourceIdentifier': 'ACCESS_KEYS_ROTATED'
},
'InputParameters': '{"maxAccessKeyAge":"90"}',
'MaximumExecutionFrequency': 'TwentyFour_Hours',
'ConfigRuleState': 'ACTIVE'
},
~略~
ルールによっては、他にも要素が表示される場合があります。
マネジメントコンソールには表示されないものも多いので、リファレンスを確認することをおすすめします。
6. まとめ
一回のAPI実行では全件取得できず、nextpagetokenを指定する様にループ処理を実装しないといけない点が初心者には難しかったです。
適合パックでデプロイされているルールも、この処理で取得できます。
エクセルファイル化する処理を追加するなどして、より利用しやすくすると良いかもしれません。
AWS Configはかなりやりこみ要素の強いサービスだと思います。
元々はクラウドガバナンスを効かせたり、構成を管理したりするためのサービスですが、Configルール自体を管理できないような煩雑な状態になってしまわないように気をつけたいです。
補足
ルール一覧はdescribe_config_rules()で取得できますが、AWS Config自体の設定値は別APIが必要になります。
※通常は、特に引数もなく実行できるので簡単に取得できます
-
describe_delivery_channels()
は、AWS Configの配信設定(S3バケットやSNSトピック)の取得 -
describe_configuration_recorders()
は、AWS Configの一般設定の取得