すべてのプロダクト
Search
ドキュメントセンター

Resource Orchestration Service:スタックポリシー

最終更新日:Aug 21, 2026

スタックポリシーを使用すると、スタックの更新中にスタックリソースが意図せず更新または削除されることを防ぐことができます。このトピックでは、スタックポリシーの概要と、設定および更新の方法について説明します。

背景情報

スタックポリシーとは、指定したリソースに対して実行できる更新アクションを定義する、JSON または YAML 形式のドキュメントです。スタックを作成すると、スタックを更新する権限を持つユーザーは、そのスタック内のすべてのリソースを更新できます。一部の更新ではリソースの中断が必要になる場合があります。スタックポリシーを設定すると、Resource Orchestration Service (ROS) はスタック内のすべてのリソースを保護します。その後、特定のリソースの更新を許可するために、ポリシーに明示的な Allow ステートメントを追加できます。

説明
  • 各スタックに定義できるスタックポリシーは 1 つのみですが、1 つのポリシーで複数のリソースを保護できます。

  • スタックの更新中、ROS は、更新された他のリソースに依存するリソースを自動的に更新します。例えば、更新された別のリソースを参照するリソースは、ROS が自動的に更新します。ただし、これらのリソースがスタックポリシーに関連付けられている場合、更新に必要な権限が必要です。

スタックポリシーは、スタックの更新中にのみ適用されます。RAM ポリシーとは異なり、アクセス制御は提供しません。スタックポリシーは、特定のスタックリソースに対する偶発的な更新を防ぐためのフェイルセーフとして機能します。

スタックポリシーの定義

スタックポリシーを指定せずにスタックを作成した場合、すべてのリソースに対してすべての更新アクションが許可されます。スタックリソースに対する更新操作を防ぐには、スタックポリシーを定義してスタックに適用します。スタック作成時に、テキストファイルでポリシーを指定するか、直接入力してスタックポリシーを設定できます。スタックにスタックポリシーを設定すると、明示的に許可されていない更新はデフォルトで拒否されます。

Effect、Action、Principal、Resource、および Condition という 5 つの要素でスタックポリシーを定義できます。

Statement:
  - Effect: Deny_or_Allow
    Action: update_actions
    Principal: '*'
    Resource: LogicalResourceId/resource_logical_ID
    Condition:
      StringEquals_or_StringLike:
        ResourceType:
          - resource_type
          - ...
            

各要素は次のとおりです:

  • 効果

    指定したリソースに対する指定したアクションを許可するか拒否するかを指定します。指定できるのは Deny または Allow のみです。例:

    Effect: Deny
    説明

    スタックポリシーに重複するステートメント (同一リソースに対する更新を許可および拒否するステートメント) が含まれている場合、Deny ステートメントが常に Allow ステートメントを上書きします。リソースを確実に保護するには、そのリソースに対して Deny ステートメントを使用してください。

  • アクション

    許可または拒否する更新アクションを定義します。

    • 更新:変更

      リソースを変更する更新操作です。中断が発生する場合と発生しない場合があります。

    • 更新/削除

      スタックテンプレートの更新でリソースが削除される場合に必要なアクションです。

    • 更新:*

      すべての更新操作です。アスタリスク (*) はワイルドカードであり、すべての更新操作を表します。

    説明

    Action 要素には Update:Replace も指定できます。この機能は予約されており、サポートされていません。

    次の例は、変更操作と削除操作のみを指定する方法を示しています:

    Action:
      - Update:Modify
      - Update:Delete

    特定の更新操作を除くすべての更新操作を許可するには、NotAction を使用します。例えば、Update:Delete を除くすべての更新操作を許可するには、NotAction を使用します。

    Statement:
      - Effect: Allow
        NotAction: Update:Delete
        Principal: '*'
        Resource: '*'
  • プリンシパル

    ポリシーが適用されるエンティティです。サポートされるのはアスタリスク (*) のみで、ポリシーがすべてのプリンシパルに適用されることを示します。

  • リソース

    ポリシーが適用されるリソースの論理 ID です。リソースタイプを指定するには、Condition 要素を使用します。

    リソースを指定するには、その論理 ID を使用します。例:

    Resource: - LogicalResourceId/myECS

    論理 ID にアスタリスク (*) を使用できます。例えば、関連するリソースが共通の論理 ID プレフィックスを共有している場合、そのプレフィックスにワイルドカード (*) を付けて、それらすべてを指定できます。

    Resource: - LogicalResourceId/Prefix*

    リソースに対して Not 要素を使用することもできます。例えば、1 つのリソースを除くすべてのリソースに対する更新を許可するには、NotResource 要素で保護対象のリソースを指定します。

    Statement:
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        NotResource: LogicalResourceId/WebServers

    スタックポリシーを設定すると、明示的に許可されていない更新は拒否されます。WebServers リソースを除くすべてのリソースに対して更新を許可すると、WebServers リソースに対する更新は拒否されます。

  • 条件

    ポリシーが適用されるリソースタイプです。特定のリソースの論理 ID を指定するには、Resource 要素を使用します。

    すべての ECS インスタンスや ApsaraDB RDS インスタンスなど、リソースタイプを指定できます。

    Statement:
      - Effect: Deny
        Principal: '*'
        Action: Update:*
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::ECS::Instance
              - ALIYUN::RDS::DBInstance
      - Effect: Allow
        Principal: '*'
        Action: Update:*
        Resource: '*'

    Allow ステートメントはすべてのリソースに対する更新権限を付与し、Deny ステートメントは ECS および ApsaraDB RDS インスタンスに対する更新を拒否します。Deny ステートメントは常に Allow ステートメントを上書きします。

    リソースタイプにアスタリスク (*) を使用できます。例えば、アスタリスク (*) を使用して、インスタンス、セキュリティグループ、サブネットなど、すべての ECS リソースに対する更新権限を拒否できます。

    Condition:
      StringLike:
        ResourceType:
          - ALIYUN::ECS::*
    説明

    ワイルドカード (*) を使用する場合は、StringLike 条件を使用する必要があります。

スタックポリシーの設定

スタック作成時に、ROS コンソールまたは Alibaba Cloud CLI を使用してスタックポリシーを適用できます。既存のスタックにポリシーを適用するには、Alibaba Cloud CLI を使用する必要があります。ポリシーを適用すると、スタックから削除することはできませんが、CLI を使用して更新できます。

  • スタック作成時のスタックポリシー設定 (コンソール)

    1. ROS コンソールにログインします。

    2. ナビゲーションウィンドウで、スタック をクリックします。

    3. 上部のナビゲーションバーで、リージョンのドロップダウンリストからスタックを作成するリージョン (例:中国 (杭州)) を選択します。

    4. スタック ページで スタックの作成 をクリックし、ドロップダウンリストから ROSの使用 を選択します。

    5. スタックの作成 ウィザードの テンプレートの選択 ページでテンプレートを選択し、Next をクリックします。

    6. スタックの作成 ウィザードの 設定パラメーター ページで、スタック名 とテンプレートパラメーターを設定します。

    7. リソーススタックの設定 セクションで、スタックポリシー を 入力リソーススタックポリシー に設定します。

    8. スタックポリシーを指定し、Next をクリックします。

      • 入力リソーススタックポリシー:スタックポリシーを直接入力します。

      • ファイルのアップロード:スタックポリシーを含む JSON または YAML ファイルをアップロードします。

    9. [Compliance Precheck] ページでコンプライアンスの事前チェックを行い、Next をクリックします。

      説明

      コンプライアンス事前チェック機能は一部のリソースでのみ使用できます。詳細については、「Compliance Precheck」をご参照ください。

      1. [Detection Rule] セクションで、検出ルールを追加します。

        ROS テンプレート内のクラウドリソースに基づいて検出ルールを選択できます。

      2. チェック をクリックします。

        非準拠のリソースに対して提示される修復ソリューションに基づいてテンプレートを修正し、リソースのコンプライアンスを確保できます。

    10. 画面の指示に従ってスタックの作成を完了します。

  • スタック作成時のスタックポリシー設定 (CLI)

    次の 2 つの方法のいずれかでスタックポリシーを設定できます:

    • CreateStack API を呼び出す

      aliyun ros CreateStack コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros CreateStack コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

    • CreateChangeSet API を呼び出す

      aliyun ros CreateChangeSet コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros CreateChangeSet コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

  • 既存スタックへのスタックポリシー設定 (CLI のみ)

    aliyun ros SetStackPolicy コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros SetStackPolicy コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

    説明

    既存のスタックにポリシーを追加するには、SetStackPolicy API の権限が必要です。

保護されたリソースの更新

保護されたリソースを更新するには、スタックポリシーを上書きしてそれらのリソースの更新を許可する一時的なポリシーを作成できます。この一時的なポリシーは、スタックポリシーを永続的に変更するものではありません。

保護されたリソースを更新するには、SetStackPolicy API の権限が必要です。ROS の権限設定の詳細については、Use RAM to control resource access をご参照ください。

  • 保護されたリソースの更新 (コンソール)

    1. ROS コンソールにログインします。

    2. ナビゲーションウィンドウで、スタック をクリックします。

    3. 上部のナビゲーションバーで、リージョンのドロップダウンリストからスタックを作成するリージョン (例:中国 (杭州)) を選択します。

    4. スタック ページで対象のスタックを見つけ、更新 列の 操作 をクリックします。

    5. リソーススタックの設定 セクションで、プロンプトに従って 入力リソーススタックポリシー を選択します。

    6. 一時的なスタックポリシーを設定します。

      現在の更新にのみ適用される一時的なスタックポリシーを指定します。このオーバーライドポリシーには、更新する保護対象リソースに対する Allow ステートメントを指定する必要があります。例えば、すべての保護対象リソースを更新するには、すべての更新を許可する一時的なオーバーライドポリシーを指定します。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          Resource: '*'
    7. 画面の指示に従ってスタックの更新を完了します。

  • 保護されたリソースの更新 (CLI)

    次の 2 つの方法のいずれかで保護されたリソースを更新できます:

    • UpdateStack API を呼び出す

      aliyun ros UpdateStack コマンドで --StackPolicyDuringUpdateBody パラメーターを使用してポリシーを直接指定するか、aliyun ros UpdateStack コマンドで --StackPolicyDuringUpdateURL パラメーターを使用してポリシーを含むファイルを指定します。

    • CreateChangeSet API を呼び出す

      aliyun ros CreateChangeSet コマンドで --StackPolicyDuringUpdateBody パラメーターを使用してポリシーを直接指定するか、aliyun ros CreateChangeSet コマンドで --StackPolicyDuringUpdateURL パラメーターを使用してポリシーを含むファイルを指定します。

    説明

    ROS は現在の更新に対してのみオーバーライドポリシーを適用します。スタックポリシーは永続的に変更されません。

スタックポリシーの更新

スタックポリシーを更新して、追加のリソースを保護したり、既存のリソースの保護を解除したりできます。例えば、保護したいデータベースをスタックに追加する場合は、そのデータベースに対する Deny ステートメントをスタックポリシーに追加します。ポリシーを更新するには、SetStackPolicy API の権限が必要です。

  • スタックポリシーの更新 (コンソール)

    1. ROS コンソールにログインします。

    2. ナビゲーションウィンドウで、スタック をクリックします。

    3. 上部のナビゲーションバーで、リージョンのドロップダウンリストからスタックを作成するリージョン (例:中国 (杭州)) を選択します。

    4. スタック ページで、スタック名 列の対象スタックの ID をクリックします。

    5. スタック情報 タブの スタックポリシー セクションで、編集 をクリックします。

    6. リソーススタックポリシーの変更 ダイアログボックスで、スタックポリシーを編集します。

    7. 決定 をクリックします。

  • スタックポリシーの更新 (CLI)

    aliyun ros SetStackPolicy コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros SetStackPolicy コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

    次のポリシーは、すべてのリソースに対するすべての更新を許可します:

    Statement:
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • スタック更新中のスタックポリシー更新 (CLI)

    aliyun ros UpdateStack コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros UpdateStack コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

    aliyun ros CreateChangeSet コマンドで --StackPolicyBody パラメーターを使用してポリシーを直接指定するか、aliyun ros CreateChangeSet コマンドで --StackPolicyURL パラメーターを使用してポリシーを含むファイルを指定します。

スタックポリシーのサンプル

次のサンプルポリシーは、すべてのスタックリソース、特定のリソース、および特定種類の更新を防ぐ方法を示しています。

  • すべてのスタックリソースに対する更新の防止

    すべてのスタックリソースに対する更新を防ぐには、次のポリシーで、すべてのリソースに対するすべての更新アクションに Deny ステートメントを指定します。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • 単一リソース (WebServers) に対する更新の防止

    • 例 1:Deny ステートメントを使用して WebServers リソースに対する更新を防ぎます。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          Resource: '*'
        - Effect: Deny
          Action: Update:*
          Principal: '*'
          Resource: LogicalResourceId/WebServers

      このポリシーは次のステートメントで構成されます:

      • Allow:すべてのリソースに対するすべての更新アクションを許可します。

      • Deny:論理 ID が WebServers のリソースに対するすべての更新アクションを拒否します。

      • Principal:ポリシーが適用されるエンティティです。サポートされるのはアスタリスク (*) のみで、ポリシーがすべてのエンティティに適用されることを示します。

    • 例 2:Allow ステートメントを使用して、WebServers を除くすべてのリソースに対する更新を許可します。

      Statement:
        - Effect: Allow
          Action: Update:*
          Principal: '*'
          NotResource: LogicalResourceId/WebServers
      説明
      • スタックポリシーを設定すると、明示的に許可されない限り、リソースに対する更新はデフォルトで拒否されます。

      • デフォルトの拒否に依存するのはリスクがあります。ポリシー内の別の場所に、ワイルドカードを使用する Allow ステートメントなど、広範な Allow ステートメントがある場合、誤ってリソースに更新権限を付与する可能性があります。明示的な Deny ステートメントはあらゆる Allow ステートメントを上書きするため、リソースを確実に保護する最も安全な方法は、Deny ステートメントを使用することです。

  • リソースタイプのすべてのインスタンスに対する更新の防止

    次のポリシーは、ApsaraDB RDS インスタンスのリソースタイプに対するすべての更新アクションを拒否します。また、Allow ステートメントを使用して、他のすべてのスタックリソースに対するすべての更新アクションを許可します。Deny ステートメントは常に Allow ステートメントを上書きするため、Allow ステートメントは ApsaraDB RDS インスタンスリソースには適用されません。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::RDS::DBInstance
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'
  • ネストされたスタックに対する更新の防止

    次のポリシーは、ネストされたスタックを表す ROS スタックのリソースタイプに対するすべての更新アクションを拒否します。また、Allow ステートメントを使用して、他のすべてのスタックリソースに対するすべての更新アクションを許可します。Deny ステートメントは常に Allow ステートメントを上書きするため、Allow ステートメントは ROS スタックリソースには適用されません。

    Statement:
      - Effect: Deny
        Action: Update:*
        Principal: '*'
        Resource: '*'
        Condition:
          StringEquals:
            ResourceType:
              - ALIYUN::ROS::Stack
      - Effect: Allow
        Action: Update:*
        Principal: '*'
        Resource: '*'