スタックとリソースに対するアンマネージド型設定変更の検出 - AWS CloudFormation

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

スタックとリソースに対するアンマネージド型設定変更の検出

CloudFormation を通じてリソースを管理している場合でも、ユーザーは CloudFormation の外部でそれらのリソースを変更できます。ユーザーは、リソースを作成した基盤となるサービスを使用してリソースを直接編集できます。たとえば、Amazon EC2 コンソールを使用して、CloudFormation スタックの一部として作成されたサーバーインスタンスを更新できます。一部の変更は偶発的になされますが、時間的制約のある操作上のイベントに対応するために意図的になされる場合もあります。しかし、CloudFormation の外部で行われた変更はスタックの更新または削除操作を複雑にする可能性があります。ドリフト検出を使用して、CloudFormation 管理外で設定変更がされたスタックリソースを識別できます。その後、スタックリソースがスタックテンプレート内の定義と再度同期するように是正措置を行うことができます。たとえば、ドリフトされたリソースがテンプレート定義と一致するように直接更新します。ドリフトを解決することにより、設定の一貫性と正常なスタック操作を確実にします。

ドリフトとは

ドリフトの検出により、スタックの実際の設定が、意図した設定と異なっていたり、ドリフトしていないか確認できます。AWS CloudFormation を使用して、スタック全体、またはスタック内の個々のリソースのドリフトを検出します。リソースの実際のプロパティ値が予期されるプロパティ値と異なる場合、そのリソースはドリフトしたと見なされます。これには、プロパティまたはリソースが削除されたかどうかも含まれます。スタックの 1 つ以上のリソースがドリフトした場合、スタックはドリフトしたと見なされます。

リソースがドリフトしたかどうかを判断するために、CloudFormation はスタックテンプレートとテンプレートパラメータとして指定された値で定義されているように、期待されるリソースプロパティ値を決定します。CloudFormation は、それらの期待値を現在スタックに存在しているリソースプロパティの実際の値と比較します。1 つ以上のリソースのプロパティが削除された場合、またはリソースの値が変更された場合、リソースはドリフトしたと見なされます。

AWS CloudFormation は、ドリフトしたスタック内の各リソースに関する詳細情報を生成します。

CloudFormation は、ドリフト検出をサポートしている AWS リソースのドリフトを検出します。ドリフト検出をサポートしないリソースには、ドリフトステータス NOT_CHECKED が割り当てられます。ドリフト検出をサポートする AWS リソースのリストについては、「インポートおよびドリフト検出オペレーションをサポートしているリソース」を参照してください。

さらに、CloudFormation は、プロビジョニング可能なプライベートリソースタイプ、つまりプロビジョニングタイプが FULLY_MUTABLE または IMMUTABLE のいずれかであるドリフト検出をサポートします。プライベートリソースタイプのリソースでドリフト検出を実行するには、アカウントに登録されたリソースタイプのデフォルトバージョンがプロビジョニング可能である必要があります。リソースのプロビジョニングタイプの詳細については、AWS CloudFormation API Referenceの「DescribeType」アクション、および AWS CLI Command Referenceの「DescribeType」コマンドそれぞれの ProvisioningType パラメータを参照してください。プライベートリソースの詳細については、「AWS CloudFormation レジストリの使用」を参照してください。

次のステータスでスタックのドリフト検出を実行できます。CREATE_COMPLETEUPDATE_COMPLETEUPDATE_ROLLBACK_COMPLETE、および UPDATE_ROLLBACK_FAILED

スタックのドリフトを検出すると、CloudFormation はそのスタックに属するネストされたスタックのドリフトを検出しません。代わりに、ネストしたスタックに対して直接ドリフト検出オペレーションを開始できます。

注記

CloudFormation は、スタックテンプレートを通じて、またはテンプレートパラメータを指定することによって、明示的に設定されたプロパティについてのみドリフトを判断します。これには、リソースプロパティのデフォルト値は含まれません。ドリフトを決定する目的で CloudFormation がリソースプロパティを追跡させるには、デフォルト値に設定している場合でも、プロパティ値を明示的に設定します。

ドリフト検出ステータスコード

このセクションの表では、ドリフト検出で使用されるさまざまなステータスタイプについて説明しています。

  • [Drift detection operation status (ドリフト検出オペレーションステータス)] は、ドリフト動作の現在の状態を示します。

  • ドリフトステータス

    スタックセットの場合、スタックセットに属するスタックインスタンスのドリフトステータスに基づいて、スタックセット全体のドリフトステータスについて説明します。

    スタックインスタンスの場合、関連付けられたスタックのドリフトステータスに基づいて、スタックインスタンスのドリフトステータスについて説明します。

    スタックの場合、これは、そのリソースのドリフトステータスに基づいて、スタック全体のドリフトステータスを表します。

  • [リソースのドリフトステータス] は、個々のリソースのドリフトステータスを表します。

次の表は、CloudFormation がスタックドリフト検出オペレーションに割り当てるステータスコードの一覧です。

ドリフト検知オペレーションステータス 説明

DETECTION_COMPLETE

スタックドリフト検出オペレーションは、ドリフト検出をサポートするスタック内のすべてのリソースに対して正常に完了しました。

DETECTION_FAILED

スタックドリフト検出オペレーションは、スタック内の少なくとも 1 つのリソースに対して失敗しました。CloudFormation がドリフト検出を正常に完了したリソースで、結果が利用可能になります。

DETECTION_IN_PROGRESS

スタックドリフト検出オペレーションは現在進行中です。

次の表は、CloudFormation がスタックに割り当てるドリフトステータスコードの一覧です。

ドリフトステータス 説明

DRIFTED

スタックの場合: スタックは、意図したテンプレート設定とは異なるか、ドリフトしています。スタックの 1 つ以上のリソースがドリフトした場合、スタックはドリフトしたと見なされます。

スタックインスタンスの場合: スタックインスタンスに関連付けられたスタックがドリフトした場合、スタックインスタンスはドリフトしたと見なされます。

スタックセットの場合: 1 つ以上のスタックインスタンスがドリフトした場合、スタックセットはドリフトしたと見なされます。

NOT_CHECKED

AWS CloudFormation では、スタック、スタックセット、またはスタックインスタンスが、予想されるテンプレート設定と異なるかどうかをチェックしません。

IN_SYNC

サポートされている各リソースの現在の設定は、意図したテンプレート設定と一致します。ドリフト検出をサポートするリソースを持たないスタック、スタックセット、またはスタックインスタンスも IN_SYNC ステータスになります。

次の表は、CloudFormation がスタックリソースに割り当てるドリフトステータスコードの一覧です。

リソースのドリフトステータス 説明

DELETED

リソースが削除されたため、リソースは意図したテンプレート設定と異なります。

MODIFIED

リソースは意図したテンプレート設定とは異なります。

NOT_CHECKED

CloudFormation は、リソースが意図したテンプレート設定と異なるかどうかを確認していません。

IN_SYNC

リソースの現在の設定は、意図したテンプレート設定と一致します。

次の表は、CloudFormation が意図したテンプレート設定とは異なるリソースプロパティに割り当てる差分タイプのステータスコードを示しています。

差分タイプのプロパティ 説明

ADD

配列またはリストのデータ型であるリソースプロパティに値が追加されました。

REMOVE

プロパティは現在のリソース設定から削除されました。

NOT_EQUAL

現在のプロパティ値は、スタックテンプレートで定義されている予測値とは異なります。

ドリフトを検出する際の考慮事項

スタックでドリフト検出を正常に実行するには、ユーザーは次のアクセス許可を持っている必要があります。

  • スタックに含まれるドリフト検出をサポートする各リソースに対する読み取り権限です。たとえば、スタックに AWS::EC2::Instance リソースが含まれている場合、スタックでドリフト検出を実行するには ec2:DescribeInstances アクセス許可が必要です。

  • cloudformation:DetectStackDrift

  • cloudformation:DetectStackResourceDrift

CloudFormation でアクセス許可を設定する方法の詳細については、「AWS Identity and Access Management によるアクセスの制御」を参照してください。

特定のエッジケースでは、CloudFormation が正確なドリフト結果を返すことができない場合があります。ドリフト検出結果を正しく解釈するために、これらのエッジケースに注意する必要があります。

  • 場合によっては、プロパティ配列に含まれるオブジェクトが、実際にはリソースを担当する基盤となるサービスからプロパティに提供されたデフォルト値であった場合に、ドリフトとして報告されます。

  • 一部のリソースは、関連するリソースと添付の関係を持ちます。そのため、リソースは、同一のまたは別のテンプレートで定義された別のリソースのプロパティ値を実際に添付または削除できます。たとえば、AWS::EC2::SecurityGroupIngress および AWS::EC2::SecurityGroupEgress リソースを使用して、AWS::EC2::SecurityGroup リソースから値を添付したり削除したりできます。このような場合、CloudFormation はドリフト比較を実行する前に添付ファイルのスタックテンプレートを分析します。ただし、CloudFormation はスタック間ではこの分析を実行できないため、接続されているリソースが異なるスタックに存在する場合、正確なドリフト結果を返さない可能性があります。

    ドリフト検出をサポートし、他のリソースからの添付ファイルを許可または要求するリソースには、次のものがあります。

    リソースタイプ 添付リソースの種類
    AWS::SNS::Topic AWS::SNS::Subscription
    AWS::IAM::User AWS::IAM::UserToGroupAddition

    AWS::IAM::Group

    AWS::IAM::Role

    AWS::IAM::User

    AWS::IAM::Policy

    AWS::IAM::ManagedPolicy

    AWS::ElasticLoadBalancingV2::Listener AWS::ElasticLoadBalancingV2::ListenerCertificate
    AWS::EC2::SecurityGroup

    AWS::EC2::SecurityGroupEgress

    AWS::EC2::SecurityGroupIngress

  • CloudFormation は、リソースの KMSKeyId プロパティに対してドリフト検出を実行しません。AWS KMS キーは複数のエイリアスによって参照される可能性があるため、CloudFormation はこのプロパティに対して常に正確なドリフト結果を保証することはできません。

  • スタックテンプレートで指定できる特定のリソースプロパティがあります。その性質上、CloudFormation は結果として得られるスタックリソースのプロパティと比較できません。したがって、これらのプロパティをドリフト検出結果に含めることはできません。このようなプロパティは、大きく 2 つのカテゴリに分けられます。

    • CloudFormation がスタックテンプレートの初期リソースプロパティ値にマッピングできないプロパティ値です。

      たとえば、CloudFormation は Lambda 関数のソースコードを Function リソースの Code プロパティタイプにマッピングできません。そのため CloudFormation はそれをドリフト検出結果に含めることができません。

    • リソースを担当するサービスが返さないプロパティ値です。

      設計上、リソースが属するサービスでは返されることがない特定のプロパティ値があります。これらには、パスワードやその他の機密データなどの、公開されない機密情報が含まれる傾向があります。たとえば、IAM サービスは IAM User LoginProfile プロパティタイプの Password プロパティの値を返すことはないため、CloudFormation はそれをドリフト検出結果に含めることができません。

    • 配列内のオブジェクト。これらは実際にはサービスの既定値であり、手動で帯域外に追加されたドリフトではありません。

  • 誤検知が発生した場合は、CloudFormation コンソールのフィードバックリンクを使用してご意見をお送りいただくか、または、AWS フォーラム (https://forums.aws.amazon.com) からご連絡ください。