AWS Configを使えばリソースの関連を確認できます ~変更作業前の影響範囲確認に

記事タイトルとURLをコピーする

こんにちは、技術3課の城です。

既存リソースの設定変更を行う場合、影響範囲を確認するかと思います。 EC2インスタンスの設定変更、例えばインスタンスタイプの変更ということであれば影響はそのインスタンスのみということになりますが、セキュリティグループなど多種のリソースに対してアタッチ出来るものについては影響範囲が多数のリソースに及ぶことはよくあります。 長年に渡る運用を経て、リソース数の増加、担当者の引継ぎ等が行われた結果、設計情報の管理が難しくなり、既存リソースの設定変更なんて中々できない、ということも少なくはないのでしょうか。 そんな時に威力を発揮するのがAWS Configです。 今回はAWS Configのリソース間の関係を確認するというところにフォーカスして、ご紹介したいと思います。

AWS Configとは

AWSリソースの関係や設定の履歴を表示することが出来るサービスで、ドキュメントには下記記載がされています。

AWS Config は、AWS アカウントにある AWS リソースの設定詳細ビューを提供します。これには、リソース間の関係と設定の履歴が含まれるため、時間の経過と共に設定と関係がどのように変わるかを確認できます。 AWS Config では、以下のことができます。 ・AWS リソースの設定が最適な設定であるかどうかを評価する。 ・AWS アカウントに関連付けられているサポート対象リソースの現在の設定のスナップショットを取得する。 ・アカウント内にある 1 つ以上のリソースの設定を取得する。 ・1 つ以上のリソースの設定履歴を取得する。 ・リソースが作成、変更、または削除されるたびに通知を受け取る。 ・リソース間の関係を表示する(特定のセキュリティグループを使用するすべてのリソースを確認する場合など)。

【AWS Config とは】 https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/WhatIsConfig.html

ただし、サポートされていないAWSリソースもあるので注意しましょう。

【AWS Config でサポートされている AWS リソースタイプとリソース関係】 https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/resource-config-reference.html

AWS Configをマネジメントコンソールから利用してみる

今回は特定のセキュリティグループの関連を調べてみます。

AWS Configのダッシュボードにてサイドバーの[リソース]をクリックします。

リソースのインベントリ画面にて、リソースタイプに[EC2: SecurityGroup]、リソース識別子に[セキュリティグループID]を入力し[検索]をクリックすると、対象リソースが表示されます。 次に表示されたリソースのIDをクリックします。

リソースの詳細画面にて、[設定タイムライン]をクリックします。

リソースの関連については[関係]の欄に記載されており、クリックすると表示されます。

このセキュリティグループはVPC、EC2×2、ENI×4と関連があることが分かりました。

AWS ConfigをAWS CLIから利用してみる

前項のようにマネジメントコンソールでも利用はできるのですが、画面推移が多いですし、作業手順の事前確認に取り入れるとなると記載が大変です。 そこでAWS CLIからAWS Configを利用について紹介します。 ※CLIのセットアップについては、下記公式ドキュメントをご覧ください。 https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html

【コマンド例】

aws configservice get-resource-config-history \
  --resource-type AWS::EC2::SecurityGroup \
  --resource-id sg-03b9ef044ad182037 \
  --max-items 1 \
  --query 'configurationItems[].relationships'

【結果例】

[
    [
        {
            "resourceType": "AWS::EC2::NetworkInterface",
            "resourceId": "eni-********",
            "relationshipName": "Is associated with NetworkInterface"
        },
        {
            "resourceType": "AWS::EC2::NetworkInterface",
            "resourceId": "eni-*****************",
            "relationshipName": "Is associated with NetworkInterface"
        },
        {
            "resourceType": "AWS::EC2::NetworkInterface",
            "resourceId": "eni-*****************",
            "relationshipName": "Is associated with NetworkInterface"
        },
        {
            "resourceType": "AWS::EC2::NetworkInterface",
            "resourceId": "eni-********",
            "relationshipName": "Is associated with NetworkInterface"
        },
        {
            "resourceType": "AWS::EC2::Instance",
            "resourceId": "i-****************",
            "relationshipName": "Is associated with Instance"
        },
        {
            "resourceType": "AWS::EC2::Instance",
            "resourceId": "i-*****************",
            "relationshipName": "Is associated with Instance"
        },
        {
            "resourceType": "AWS::EC2::VPC",
            "resourceId": "vpc-********",
            "relationshipName": "Is contained in Vpc"
        }
    ]
]

オプション--max-itemsの引数を1に設定すると、最新の情報のみを取得します。 オプション--resource-typeの引数については下記リファレンスに記載がありましたので、別のリソースタイプについて取得される場合はご参照ください。 https://docs.aws.amazon.com/cli/latest/reference/configservice/get-resource-config-history.html

AWS CLIだとサクッと取得できますね!!

さいごに

特に本番環境での変更作業においては、影響範囲の確認は重要です。 影響範囲を明確にして作業するためにAWS Configをうまく利用しましょう。 もしAWS Configを有効にしてない場合は即設定するのをお勧めします。

どなたかの助けになれば幸いです。

【参考ドキュメント】 https://docs.aws.amazon.com/ja_jp/config/latest/developerguide/view-manage-resource-console.html

城 航太 (記事一覧)

サイトリライアビリティエンジニアリング部・CSM課・課長

AWSへの移行、AWSアカウントセキュリティ、ネットワーク広く浅くといった感じです。最近はAmazon WorkSpacesやAmazon AppStream2.0が好きです。APN Ambassador 2019,2020