

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 中的安全性 CloudFormation
<a name="security"></a>

的雲端安全性 AWS 是最高優先順序。身為 AWS 客戶，您可以受益於資料中心和網路架構，這些架構是為了滿足最安全敏感組織的需求而建置。

安全性是 AWS 與您之間的共同責任。[共同責任模式](https://aws.amazon.com/compliance/shared-responsibility-model/)將其描述為雲端*的*安全性，和雲端*中*的安全性：
+ **雲端的安全性** – AWS 負責保護在 AWS Cloud 中執行 AWS 服務的基礎設施。 AWS 也為您提供可安全使用的服務。在[AWS 合規計畫](https://aws.amazon.com/compliance/programs/)中，第三方稽核人員會定期測試和驗證我們安全的有效性。若要了解適用的合規計劃 CloudFormation，請參閱[AWS 合規計劃的 服務範圍](https://aws.amazon.com/compliance/services-in-scope/)。
+ **雲端的安全性** – 您的責任取決於您使用 AWS 的服務。您也必須對其他因素負責，包括資料的機密性、您公司的要求和適用法律和法規。

本文件可協助您了解如何在使用 時套用共同責任模型 CloudFormation。下列主題說明如何設定 CloudFormation 以符合您的安全與合規目標。您也會了解如何使用其他 AWS 服務來協助您監控和保護 CloudFormation 資源。

**Topics**
+ [防止 CloudFormation 堆疊遭到刪除](using-cfn-protect-stacks.md)
+ [避免更新堆疊資源](protect-stack-resources.md)
+ [中的資料保護 CloudFormation](security-data-protection.md)
+ [使用 控制 CloudFormation 存取 AWS Identity and Access Management](control-access-with-iam.md)
+ [使用 記錄 CloudFormation API 呼叫 AWS CloudTrail](cfn-api-logging-cloudtrail.md)
+ [中的基礎設施安全 CloudFormation](infrastructure-security.md)
+ [中的彈性 CloudFormation](disaster-recovery-resiliency.md)
+ [的合規驗證 CloudFormation](cloudformation-compliance.md)
+ [中的組態和漏洞分析 CloudFormation](vulnerability-analysis-and-management.md)
+ [CloudFormation 的安全最佳實務](security-best-practices.md)
+ [CloudFormation 使用界面端點存取 (AWS PrivateLink)](vpc-interface-endpoints.md)

# 防止 CloudFormation 堆疊遭到刪除
<a name="using-cfn-protect-stacks"></a>

您可以在堆疊上啟用終止保護來防止堆疊遭意外刪除。如果使用者嘗試刪除啟用終止保護的堆疊，則刪除會失敗，且堆疊及其狀態保持不變。您可以在建立新的堆疊時啟用終止保護。堆疊上的終止保護預設為停用。除了 `DELETE_IN_PROGRESS` 或 `DELETE_COMPLETE` 以外，您可以為處於任何狀態的堆疊設定終止保護。

在堆疊上啟用或停用終止保護的同時，也將對屬於該堆疊的任何巢狀堆疊套用相同選擇。您無法直接在巢狀堆疊上啟用或停用終止保護。如果使用者嘗試直接刪除屬於已啟用終止保護之堆疊的巢狀堆疊，則操作會失敗，且巢狀堆疊會保持不變。

不過，如果使用者執行會刪除巢狀堆疊的堆疊更新，則 CloudFormation 會相應刪除巢狀堆疊。

終止保護與停用復原不同。終止保護僅適用於嘗試刪除堆疊，而停用復原適用於堆疊建立失敗時的自動復原。

**在建立堆疊時啟用終止保護**  
在 **Create stack** (建立堆疊) 精靈的 **Specify stack options** (指定堆疊選項) 頁面上，展開 **Advanced options** (進階選項) 下的 **Termination Protection** (終止保護) 區段，然後選取 **Enable** (啟用)。如需詳細資訊，請參閱[設定堆疊選項](cfn-console-create-stack.md#configure-stack-options)。

**在現有堆疊上啟用或停用終止保護**

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面上方的導覽列上，選擇 AWS 區域。

1. 選取您想要設定的堆疊。
**注意**  
如果堆疊名稱旁顯示 **NESTED (巢狀)**，則該堆疊為巢狀堆疊。您只能在該巢狀堆疊所屬的根堆疊上啟用終止保護。

1. 在 stack details (堆疊詳細資訊) 窗格中，選取 **Stack actions (堆疊動作)**，然後選取 **Edit termination protection (編輯終止保護)**。

   CloudFormation 會顯示 **Edit termination protection (編輯終止保護)** 對話方塊。

1. 選擇 **Enable (啟用)** 或 **Disable (停用)**，然後選取 **Save (儲存)**。

**在巢狀堆疊上啟用或停用終止保護**

如果堆疊名稱旁顯示 **NESTED (巢狀)**，則該堆疊為巢狀堆疊。您只能在該巢狀堆疊所屬的根堆疊上啟用終止保護。在根堆疊上變更終止保護：

1. 登入 AWS 管理主控台 並在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面上方的導覽列上，選擇 AWS 區域。

1. 選取您想要設定的巢狀堆疊。

1. 在 **Stack info (堆疊資訊)** 窗格的 **Overview (概觀)** 區段中，選取列為 **Root stack (根堆疊)** 的堆疊名稱。

   CloudFormation 會顯示根堆疊的堆疊詳細資訊。

1. 選擇 **Stack actions (堆疊動作)**，然後選擇 **Edit Termination Protection (編輯終止保護)**。

   CloudFormation 會顯示 **Edit termination protection (編輯終止保護)** 對話方塊。

1. 選擇 **Enable (啟用)** 或 **Disable (停用)**，然後選取 **Save (儲存)**。

**欲使用命令列啟用或停用終止保護**  
使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-termination-protection.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-termination-protection.html) 命令。

## 控制誰可以在堆疊上變更終止保護
<a name="protect-stacks-perms"></a>

若要在堆疊上啟用或停用終止保護，使用者需要具有進行 `cloudformation:UpdateTerminationProtection` 動作的許可。例如，下列政策可讓使用者在堆疊上啟用或停用終止保護。

如需在 中指定許可的詳細資訊 CloudFormation，請參閱 [使用 控制 CloudFormation 存取 AWS Identity and Access Management](control-access-with-iam.md)。

**Example 授予變更堆疊終止保護許可的範例政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[{
        "Effect":"Allow",
        "Action":[
            "cloudformation:UpdateTerminationProtection"
        ],
        "Resource":"*"
    }]
}
```

# 避免更新堆疊資源
<a name="protect-stack-resources"></a>

當您建立堆疊時，可以對所有的資源執行所有更新動作。根據預設，有堆疊更新許可的任何人都可以更新堆疊中的所有資源。在更新期間，有些資源可能需要中斷或是完全替換，以致產生新的實體 ID 或全新的儲存體。您可避免在使用堆疊政策更新堆疊期間，無意中更新或刪除堆疊資源。堆疊政策是一種 JSON 文件，定義可在指定資源上執行的更新動作。

在您設定堆疊政策之後，堆疊中的所有資源預設都會受到保護。若要允許特定資源的更新，您可以為您堆疊政策中的這些資源指定明確的 `Allow` 陳述式。您每個堆疊只能定義一個堆疊政策，但可以保護單一政策內的多個資源。堆疊政策適用於所有嘗試更新堆疊的 CloudFormation 使用者。您無法建立不同堆疊政策與不同使用者的關聯。

堆疊政策僅適用於堆疊更新期間。此政策不提供類似 AWS Identity and Access Management (IAM) 政策的存取控制。堆疊政策僅作為容錯移轉的安全機制，以避免意外更新特定的堆疊資源。若要控制對 AWS 資源或動作的存取，請使用 IAM。

**Topics**
+ [範例堆疊政策](#stack-policy-intro-example)
+ [定義堆疊政策](#stack-policy-reference)
+ [設定堆疊政策](#protect-stack-resources-protecting)
+ [更新受保護的資源](#protect-stack-resources-updating)
+ [修改堆疊政策](#protect-stack-resources-modifying)
+ [更多範例堆疊政策](#stack-policy-samples)

## 範例堆疊政策
<a name="stack-policy-intro-example"></a>

下列範例堆疊政策會避免更新 `ProductionDatabase` 資源：

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    },
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/ProductionDatabase"
    }
  ]
}
```

在您設定堆疊政策時，所有資源預設都會受到保護。為允許更新所有資源，我們新增在所有資源上允許所有動作的 `Allow` 陳述式。雖然 `Allow` 陳述式指定所有的資源，但明確的 `Deny` 陳述式會針對邏輯 ID 為 `ProductionDatabase` 的資源覆寫它。此 `Deny` 陳述式會避免 `ProductionDatabase` 資源上所有的更新動作，例如替換或刪除。

`Principal` 元素是必要的，但只支援萬用字元 (`*`)，這表示此陳述式適用於所有[主體](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#principal)。

**注意**  
在堆疊更新期間，CloudFormation 會自動更新依賴其他已更新資源的資源。例如，CloudFormation 會更新參考已更新資源的資源。CloudFormation 不對自動更新的資源 (例如資源 ID) 執行任何實體變更，但如果堆疊政策與這些資源相關聯，您必須有進行更新的許可。

## 定義堆疊政策
<a name="stack-policy-reference"></a>

當您建立堆疊時，未設定任何堆疊政策，所以可對所有的資源執行所有更新動作。為了保護堆疊資源不受更新動作影響，請定義堆疊政策，然後在您的堆疊上設定它。堆疊政策是一種 JSON 文件，可定義 CloudFormation 使用者可以執行的 CloudFormation 堆疊更新動作以及可以套用這些動作的資源。您在建立堆疊時，透過指定包含您堆疊政策的文字檔案或將它輸出的方式，設定堆疊政策。當您在堆疊上設定堆疊政策時，預設拒絕任何未明確允許的更新。

您可以使用五種元素定義堆疊政策：`Effect`、`Action`、`Principal`、`Resource` 和 `Condition`。下列虛擬程式碼顯示堆疊政策的語法。

```
{
  "Statement" : [
    {
      "Effect" : "Deny_or_Allow",
      "Action" : "update_actions",
      "Principal" : "*",
      "Resource" : "LogicalResourceId/resource_logical_ID",
      "Condition" : {
        "StringEquals_or_StringLike" : {
          "ResourceType" : [resource_type, ...]
        }
      }
    }
  ]
}
```

`Effect`  
決定在您指定的資源上拒絕或允許您指定的動作。您只能指定 `Deny` 或 `Allow`，例如：  

```
"Effect" : "Deny"
```
如果堆疊政策包含重疊的陳述式 (允許和拒絕對資源的更新)，則 `Deny` 陳述式一律會覆寫 `Allow` 陳述式。為了確保資源受到保護，請為該資源使用 `Deny` 陳述式。

Action  
指定拒絕或允許的更新動作：    
Update:Modify  
指定在其執行期間，資源可能不會中斷，或套用變更時有些中斷的更新動作。所有資源都保持它們的實體 ID。  
Update:Replace  
指定在其執行期間，會重新建立資源的更新動作。CloudFormation 使用指定的更新建立新資源，然後刪除舊資源。由於資源是重新建立的，所以新資源的實體 ID 可能不同。  
Update:Delete  
指定在其執行期間，會移除資源的更新動作。從堆疊範本完全移除資源的更新，需要此動作。  
更新:\$1  
指定所有更新動作。星號是萬用字元，代表所有更新動作。
下列範例說明如何只指定取代和刪除動作：  

```
"Action" : ["Update:Replace", "Update:Delete"]
```
若要允許某個除外的所有更新動作，請使用 `NotAction`。例如，若要允許 `Update:Delete` 除外的所有更新動作，請使用 `NotAction`，如這個範例所示：  

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "NotAction" : "Update:Delete",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

Principal  
`Principal` 元素指定套用政策的實體。此元素是必要的，但只支援萬用字元 (`*`)，這表示政策適用於所有[主體](https://docs.aws.amazon.com/glossary/latest/reference/glos-chap.html#principal)。

資源  
指定套用政策的資源邏輯 ID。若要指定資源類型，請使用 `Condition`元素。  
若要指定單一資源，請使用它的邏輯 ID。例如：  

```
"Resource" : ["LogicalResourceId/myEC2instance"]
```
邏輯 ID 可以使用萬用字元。例如，如果所有相關資源都使用常見的邏輯 ID 字首，您可以用萬用字元指定它們全部：  

```
"Resource" : ["LogicalResourceId/CriticalResource*"]
```
資源也可以使用 `Not` 元素。例如，若要允許某個以外的所有資源更新，請使用 `NotResource` 元素來保護該資源：  

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "NotResource" : "LogicalResourceId/ProductionDatabase"
    }
  ]
}
```
當您設定堆疊政策時，預設拒絕任何未明確允許的更新。透過允許 `ProductionDatabase` 資源以外的所有資源更新，您拒絕更新 `ProductionDatabase` 資源。

條件  
指定套用政策的資源類型。若要指定特定資源的邏輯 ID，請使用 `Resource` 元素。  
您可以指定資源類型，例如所有 EC2 和 RDS 資料庫執行個體，如下列範例所示：  

```
{
  "Statement" : [
  {
    "Effect" : "Deny",
    "Principal" : "*",
    "Action" : "Update:*",
    "Resource" : "*",
    "Condition" : {
      "StringEquals" : {
        "ResourceType" : ["AWS::EC2::Instance", "AWS::RDS::DBInstance"]
      }
    }
  },
  {
    "Effect" : "Allow",
    "Principal" : "*",
    "Action" : "Update:*",
    "Resource" : "*"
  }
  ]
}
```
`Allow` 陳述式將更新許可授予所有資源，而 `Deny` 陳述式拒絕更新 EC2 和 RDS 資料庫執行個體。`Deny` 陳述式一律會覆寫允許動作。  
資源類型可以使用萬用字元。例如，您可以使用萬用字元拒絕所有 Amazon EC2 資源的更新許可 —例如執行個體、安全群組和子網路— 如下列範例所示：  

```
"Condition" : {
  "StringLike" : {
    "ResourceType" : ["AWS::EC2::*"]
  }
}
```
使用萬用字元時，您必須使用 `StringLike` 條件。

## 設定堆疊政策
<a name="protect-stack-resources-protecting"></a>

您可以使用 主控台 AWS CLI 或在建立堆疊時套用堆疊政策。您也可以使用 AWS CLI 將堆疊政策套用至現有堆疊。套用堆疊政策後，您無法將其從堆疊中移除，但您可以使用 AWS CLI 進行修改。

堆疊政策適用於所有嘗試更新堆疊的 CloudFormation 使用者。您無法建立不同堆疊政策與不同使用者的關聯。

如需撰寫堆疊政策的資訊，請參閱[定義堆疊政策](#stack-policy-reference)。

**在建立堆疊時設定堆疊政策 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 在畫面頂端的導覽列上，選擇要在其中 AWS 區域 建立堆疊的 。

1. 在 **CloudFormation Stacks (CloudFormation 堆疊)** 頁面上，選擇 **Create stack (建立堆疊)**。

1. 在 Create Stack (建立堆疊) 精靈的 **Configure stack options (設定堆疊選項)** 頁面上，展開 **Advanced (進階)** 區段，然後選擇 **Stack policy (堆疊政策)**。

1. 指定堆疊政策：
   + 若要直接在主控台中編寫政策，請選擇 **Enter stack policy (輸入堆疊政策)**，然後直接在文字欄位中輸入堆疊政策。
   + 若要使用其他檔案定義的政策，請選擇 **Upload a file (上傳檔案)**，然後選擇 **Choose file (選擇檔案)**，選取包含堆疊政策的檔案。

**在建立堆疊時設定堆疊政策 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html) 命令搭配 `--stack-policy-body` 選項輸入修改的政策，或搭配 `--stack-policy-url` 選項指定包含政策的檔案。

**在現有堆疊上設定堆疊政策 (AWS CLI 僅限 )**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html) 命令搭配 `--stack-policy-body` 選項輸入修改的政策，或搭配 `--stack-policy-url` 選項指定包含政策的檔案。
**注意**  
若要將政策新增到現有的堆疊，您必須擁有 CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html) 動作的許可。

## 更新受保護的資源
<a name="protect-stack-resources-updating"></a>

若要更新受保護的資源，請建立覆寫堆疊政策的暫時政策，並允許更新這些資源。在更新堆疊時您指定覆寫政策。覆寫的政策不會永久變更堆疊政策。

若要更新受保護的資源，您必須有使用 CloudFormation [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html) 動作的許可。如需設定 CloudFormation 許可的資訊，請參閱[使用 控制 CloudFormation 存取 AWS Identity and Access Management](control-access-with-iam.md)。

**注意**  
在堆疊更新期間，CloudFormation 會自動更新依賴其他已更新資源的資源。例如，CloudFormation 會更新參考已更新資源的資源。CloudFormation 不對自動更新的資源 (例如資源 ID) 執行任何實體變更，但如果堆疊政策與這些資源相關聯，您必須有進行更新的許可。

**更新受保護的資源 (主控台)**

1. 在 https：//[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/) 開啟 CloudFormation 主控台。

1. 選取您希望更新的堆疊，選擇 **Stack actions (堆疊動作)**，然後選擇 **Update stack (更新堆疊)**。

1. 如「尚未」**修改堆疊範本，請選取 **Use current template (使用目前的範本)**，然後按一下 **Next (下一步)**。如已修改範本，請選取 **Replace current template (取代目前的範本)**，然後在 **Specify template (指定範本)** 區段中指定更新的範本位置：
   + 如果是存放在本機電腦上的範本，請選取 **Upload a template file (上傳範本檔案)**。選擇 **Choose File** (選擇檔案) 以瀏覽至該檔案，然後按一下 **Next** (下一步)。
   + 如需存放在 Amazon S3 儲存貯體的範本，請選取 **Amazon S3 URL**。輸入或貼上範本的 URL，然後按一下 **Next** (下一步)。

     如果您擁有已啟用版本控制的儲存貯體中的範本，則可以指定範本的特定版本，方法是將 `?versionId=version-id` 附加到 URL。如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用已啟用版本控制之儲存貯體中的物件](https://docs.aws.amazon.com/AmazonS3/latest/userguide/manage-objects-versioned-bucket.html)。

1. 如果您的範本包含參數，請在 **Specify stack details (指定堆疊詳細資訊)** 頁面上輸入或修改參數值，然後選擇 **Next (下一步)**。

   CloudFormation 以堆疊中目前設定的值填入每個參數，但以 `NoEcho` 屬性宣告的參數除外。您可以選擇 **Use existing value (使用現有的值)**，為這些參數使用目前的值。

   如需使用 `NoEcho` 遮罩敏感資訊，以及使用動態參數管理密碼的詳細資訊，請參閱 [請勿在您的範本中內嵌憑證](security-best-practices.md#creds) 最佳實務。

1. 指定覆寫堆疊政策。

   1. 在 **Configure stack options (設定堆疊選項)** 頁面的 **Advanced options (進階選項)** 區段中，選取 **Stack policy (堆疊政策)**。

   1. 選取 **Upload a file (上傳檔案)**。

   1. 按一下 **Choose file (選擇檔案)**，導覽至包含覆寫堆疊政策的檔案，或輸入政策。

   1. 選擇**下一步**。

   覆寫政策必須為您要更新的受保護資源指定 `Allow` 陳述式。例如，若要更新所有受保護的資源，請指定允許所有更新的暫時覆寫政策：

   ```
   {
     "Statement" : [
       {
         "Effect" : "Allow",
         "Action" : "Update:*",
         "Principal": "*",
         "Resource" : "*"
       }
     ]
   }
   ```
**注意**  
CloudFormation 只會在此更新期間套用覆寫政策。覆寫的政策不會永久變更堆疊政策。若要修改堆疊政策，請參閱[修改堆疊政策](#protect-stack-resources-modifying)。

1. 檢閱堆疊資訊和您提交的變更。

   檢查是否提交了正確的資訊，例如正確的參數值或範本 URL。如果您的範本包含 IAM 資源，請選擇 **I acknowledge that this template may create IAM resources (我知道此範本可能會建立 IAM 資源)** 以指定您要使用此範本中的 IAM 資源。如需詳細資訊，請參閱[認可 CloudFormation 範本中的 IAM 資源](control-access-with-iam.md#using-iam-capabilities)。

   在**預覽您的變更**區段中，檢查 CloudFormation 是否將會進行您預期的所有變更。例如，檢查 CloudFormation 是否會新增、移除及修改您要新增、移除或修改的資源。CloudFormation 透過建立針對堆疊設定的變更，產生此預覽。如需詳細資訊，請參閱[透過變更集更新 CloudFormation 堆疊](using-cfn-updating-stacks-changesets.md)。

1. 當您完成變更後，請按一下 **Update (更新)**。
**注意**  
此時，您也可以選擇檢視變更集，更仔細地檢閱您提出的更新。若要執行此動作，請按一下 **View change set** (檢視變更集) 而不是 **Update** (更新)。CloudFormation 會顯示根據更新所產生的變更集。當您準備好執行堆疊更新時，請按一下 **Execute (執行)**。

   CloudFormation 會顯示您堆疊的 **Stack details (堆疊詳細資訊)** 頁面。您的堆疊目前的狀態為 `UPDATE_IN_PROGRESS`。CloudFormation 成功更新堆疊之後，就會將堆疊狀態設為 `UPDATE_COMPLETE`。

   如果堆疊更新失敗，CloudFormation 會自動復原變更，並將堆疊狀態設為 `UPDATE_ROLLBACK_COMPLETE`。

**更新受保護的資源 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html) 命令搭配 `--stack-policy-during-update-body` 選項輸入修改的政策，或搭配 `--stack-policy-during-update-url` 選項指定包含政策的檔案。
**注意**  
CloudFormation 只會在此更新期間套用覆寫政策。覆寫的政策不會永久變更堆疊政策。若要修改堆疊政策，請參閱[修改堆疊政策](#protect-stack-resources-modifying)。

## 修改堆疊政策
<a name="protect-stack-resources-modifying"></a>

若要保護其他資源或移除對資源的保護，請修改堆疊政策。例如，當您將想要保護的資料庫新增到您的堆疊時，請為該資料庫將 `Deny` 陳述式新增到堆疊政策。若要修改政策，您必須有使用 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_SetStackPolicy.html) 動作的許可。

使用 AWS CLI 修改堆疊政策。

**修改堆疊政策 (AWS CLI)**
+ 使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/set-stack-policy.html) 命令搭配 `--stack-policy-body` 選項輸入修改的政策，或搭配 `--stack-policy-url` 選項指定包含政策的檔案。

您無法刪除堆疊政策。若要移除所有資源的所有保護，您要修改政策，明確允許對所有資源的所有動作。下列政策允許所有資源的所有更新：

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

## 更多範例堆疊政策
<a name="stack-policy-samples"></a>

下列範例政策示範如何防止更新所有堆疊資源和特定資源，並防止特定類型的更新。

### 避免更新所有堆疊資源
<a name="w2aac43c15c21b5"></a>

為了防止更新所有堆疊資源，下列政策為所有資源的所有更新動作指定 `Deny` 陳述式。

```
{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

### 避免更新單一資源
<a name="w2aac43c15c21b7"></a>

下列政策拒絕邏輯 ID 為 `MyDatabase` 之資料庫的所有更新動作。`Allow` 陳述式允許所有其他堆疊資源的所有更新動作。`Allow` 陳述式不適用於 `MyDatabase` 資源，因為 `Deny` 陳述式一律會覆寫允許動作。

```
{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "LogicalResourceId/MyDatabase"
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

使用預設拒絕可以達到和前例相同的結果。當您設定堆疊政策時，CloudFormation 拒絕任何未明確允許的更新。下列政策允許更新所有資源，預設拒絕的 `ProductionDatabase` 資源除外。

```
{
  "Statement" : [
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "NotResource" : "LogicalResourceId/ProductionDatabase"
    }
  ]
}
```

**重要**  
使用預設拒絕有風險。如果政策的其他位置有一個 `Allow` 陳述式 (例如使用萬用字元的 `Allow` 陳述式)，您可能會在不知情的狀況下將更新許可授予您不打算更新的資源。由於明確拒絕會覆寫任何允許動作，所以您可以使用 `Deny` 陳述式確保資源受到保護。

### 避免更新某種資源類型的所有執行個體
<a name="w2aac43c15c21b9"></a>

下列政策拒絕 RDS 資料庫執行個體資源類型的所有更新動作。`Allow` 陳述式允許所有其他堆疊資源的所有更新動作。`Allow` 陳述式不適用於 RDS 資料庫執行個體資源，因為 `Deny` 陳述式一律會覆寫允許動作。

```
{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*",
      "Condition" : {
        "StringEquals" : {
          "ResourceType" : ["AWS::RDS::DBInstance"]
        }
      }
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

### 避免更換執行個體的更新
<a name="w2aac43c15c21c11"></a>

下列政策拒絕會造成更換邏輯 ID 為 `MyInstance` 之執行個體的更新。`Allow` 陳述式允許所有其他堆疊資源的所有更新動作。`Allow` 陳述式不適用於 `MyInstance` 資源，因為 `Deny` 陳述式一律會覆寫允許動作。

```
{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:Replace",
      "Principal": "*",
      "Resource" : "LogicalResourceId/MyInstance"
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

### 避免巢狀堆疊的更新
<a name="w2aac43c15c21c13"></a>

下列政策拒絕 CloudFormation 堆疊資源類型 (巢狀堆疊) 的所有更新動作。`Allow` 陳述式允許所有其他堆疊資源的所有更新動作。`Allow` 陳述式不適用於 CloudFormation 堆疊資源，因為 `Deny` 陳述式一律會覆寫允許動作。

```
{
  "Statement" : [
    {
      "Effect" : "Deny",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*",
      "Condition" : {
        "StringEquals" : {
          "ResourceType" : ["AWS::CloudFormation::Stack"]
        }
      }
    },
    {
      "Effect" : "Allow",
      "Action" : "Update:*",
      "Principal": "*",
      "Resource" : "*"
    }
  ]
}
```

# 中的資料保護 CloudFormation
<a name="security-data-protection"></a>

 AWS [共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 中的資料保護 AWS CloudFormation。如此模型所述， AWS 負責保護執行所有 的全域基礎設施 AWS 雲端。您負責維護在此基礎設施上託管內容的控制權。您也同時負責所使用 AWS 服務 的安全組態和管理任務。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需有關歐洲資料保護的相關資訊，請參閱*AWS 安全性部落格*上的[AWS 共同責任模型和 GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/) 部落格文章。

基於資料保護目的，我們建議您保護 AWS 帳戶 登入資料，並使用 AWS IAM Identity Center 或 AWS Identity and Access Management (IAM) 設定個別使用者。如此一來，每個使用者都只會獲得授與完成其任務所必須的許可。我們也建議您採用下列方式保護資料：
+ 每個帳戶均要使用多重要素驗證 (MFA)。
+ 使用 SSL/TLS 與 AWS 資源通訊。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 使用 設定 API 和使用者活動記錄 AWS CloudTrail。如需有關使用 CloudTrail 追蹤擷取 AWS 活動的資訊，請參閱*AWS CloudTrail 《 使用者指南*》中的[使用 CloudTrail 追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-trails.html)。
+ 使用 AWS 加密解決方案，以及其中的所有預設安全控制 AWS 服務。
+ 使用進階的受管安全服務 (例如 Amazon Macie)，協助探索和保護儲存在 Amazon S3 的敏感資料。
+ 如果您在 AWS 透過命令列界面或 API 存取 時需要 FIPS 140-3 驗證的密碼編譯模組，請使用 FIPS 端點。如需有關 FIPS 和 FIPS 端點的更多相關資訊，請參閱[聯邦資訊處理標準 (FIPS) 140-3](https://aws.amazon.com/compliance/fips/)。

我們強烈建議您絕對不要將客戶的電子郵件地址等機密或敏感資訊，放在標籤或自由格式的文字欄位中，例如**名稱**欄位。這包括當您使用 CloudFormation 或使用主控台、API AWS CLI或其他 AWS 服務 AWS SDKs 時。您在標籤或自由格式文字欄位中輸入的任何資料都可能用於計費或診斷日誌。如果您提供外部伺服器的 URL，我們強烈建議請勿在驗證您對該伺服器請求的 URL 中包含憑證資訊。

## 靜態加密
<a name="security-data-protection-encryption-at-rest"></a>

遵循 AWS 共同責任模型， 會 CloudFormation 儲存靜態加密的資料。客戶必須負責為儲存在其帳戶中的資料設定加密和儲存政策。例如，建議您針對儲存在 S3 儲存貯體或 SNS 主題中的範本和其他資料啟用靜態加密。客戶也可以為 CloudFormation 佈建的任何資料儲存系統定義加密設定。

## 傳輸中加密
<a name="security-data-protection-encryption-in-transit"></a>

CloudFormation 在共同責任模型下，使用加密通道進行服務通訊。

## 網際網路流量隱私權
<a name="security-data-protection-internetwork-traffic-privacy"></a>

CloudFormation 服務通訊預設會在區域或可用區域之間安全加密。

# 使用 控制 CloudFormation 存取 AWS Identity and Access Management
<a name="control-access-with-iam"></a>

透過 AWS Identity and Access Management (IAM)，您可以建立 IAM 使用者，並控制他們對 中特定資源的存取 AWS 帳戶。使用 IAM 時，可控制使用者可以使用 CloudFormation 做什麼，例如他們是否可以檢視堆疊範本、建立堆疊或刪除堆疊。

除了 CloudFormation 特定的動作之外，您還可以管理每個使用者可用的 AWS 服務和資源。如此一來，您就可以控制使用者在使用 CloudFormation 時可以存取哪些資源。例如，您可以指定哪些使用者可以建立 Amazon EC2 執行個體、終止資料庫執行個體，或更新 VPC。只要他們使用 CloudFormation 執行這些動作，就會套用這些相同許可。

使用下列各節中的資訊來控制誰可以存取 CloudFormation。我們也將探索如何在 範本中授權建立 IAM 資源、給予在 EC2 執行個體上執行的應用程式所需的許可，以及在您的 AWS 環境中使用臨時安全登入資料來增強安全性。

## 定義 IAM 基於身分識別的政策
<a name="iam-id-based-policies"></a>

若要授予對 CloudFormation 的存取權，您需要建立和指派 IAM 政策，以授予您的 IAM 身分 (例如使用者或角色) 呼叫其所需 API 動作的許可。

使用 IAM 身分型政策，您可以指定允許或拒絕的動作和資源，以及在何種條件下允許或拒絕動作。CloudFormation 支援特定動作、資源和條件金鑰。

如果您是初次使用 IAM，請先自行熟悉 IAM JSON 政策的元素。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。若要了解如何建立 IAM 政策，請完成 IAM 文件中的教學課程[建立並連接您的第一個客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_managed-policies.html)。

**Topics**
+ [CloudFormation 的政策動作](#using-iam-actions)
+ [CloudFormation 的主控台特定動作](#console-specific-actions)
+ [CloudFormation 的政策資源](#resource-level-permissions)
+ [CloudFormation 的政策條件索引鍵](#using-iam-conditions)

### CloudFormation 的政策動作
<a name="using-iam-actions"></a>

在 IAM 政策陳述式的 `Action` 元素中，您可以指定 CloudFormation 提供的任何 API 動作。必須在動作名稱前面加上小寫字串 `cloudformation:`。例如：`cloudformation:CreateStack`、`cloudformation:CreateChangeSet` 和 `cloudformation:UpdateStack`。

若要在單一陳述式中指定多個動作，請用逗號分隔，如下所示：

```
"Action": [ "cloudformation:action1", "cloudformation:action2" ]
```

您也可以使用萬用字元指定多個動作。例如，您可以指定名稱開頭為 `Get` 文字的所有動作，如下所示：

```
"Action": "cloudformation:Get*"
```

若要查看與 `cloudformation` 服務字首相關聯的動作完整清單，請參閱*服務授權參考*中的[適用於 CloudFormation的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html)以及[適用於 AWS 雲端控制 API的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudcontrolapi.html)。

#### 範例
<a name="using-iam-actions-examples"></a>

以下顯示授予檢視 CloudFormation 堆疊許可的許可政策範例。

**Example 1: 授予檢視堆疊許可的範例政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[{
        "Effect":"Allow",
        "Action":[
            "cloudformation:DescribeStacks",
            "cloudformation:DescribeStackEvents",
            "cloudformation:DescribeStackResource",
            "cloudformation:DescribeStackResources"
        ],
        "Resource":"*"
    }]
}
```

建立或刪除堆疊的使用者需要基於其堆疊範本的其他許可。例如，如果您的範本描述 Amazon SQS 佇列，則使用者必須同時擁有 CloudFormation 和 Amazon SQS 動作的許可，如下列範例政策所示。

**Example 2: 授予建立和檢視堆疊動作及所有 Amazon SQS 動作的範例政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[{
        "Effect":"Allow",
        "Action":[
            "sqs:*",
            "cloudformation:CreateStack",
            "cloudformation:DescribeStacks",
            "cloudformation:DescribeStackEvents",
            "cloudformation:DescribeStackResources",
            "cloudformation:GetTemplate",
            "cloudformation:ValidateTemplate"  
        ],
        "Resource":"*"
    }]
}
```

### CloudFormation 的主控台特定動作
<a name="console-specific-actions"></a>

CloudFormation 主控台的使用者需要 AWS Command Line Interface 或 CloudFormation APIs 所需的額外許可。這些額外許可支援主控台特定的功能，例如範本上傳至 Amazon S3 儲存貯體，以及 AWS特定參數類型的下拉式清單。

針對以下列出的所有動作，向所有資源授予許可；不要將其限制在特定堆疊或儲存貯體。

以下動作僅供 CloudFormation 主控台使用，不會收錄在 API 參考中。此動作允許使用者將範本上傳至 Amazon S3 儲存貯體。
+ `cloudformation:CreateUploadBucket`

當使用者上傳範本時，他們也需要下列 Amazon S3 許可：
+ `s3:PutObject`
+ `s3:ListBucket`
+ `s3:GetObject`
+ `s3:CreateBucket`

若要查看具有 AWS特定參數類型的範本參數下拉式清單中的值，使用者需要許可才能進行對應的描述 API 呼叫。例如，當範本中使用這些參數類型時，需要下列許可：
+  `ec2:DescribeKeyPairs` – `AWS::EC2::KeyPair::KeyName` 參數類型的必要項目。
+ `ec2:DescribeSecurityGroups` – `AWS::EC2::SecurityGroup::Id` 參數類型的必要項目。
+ `ec2:DescribeSubnets` – `AWS::EC2::Subnet::Id` 參數類型的必要項目。
+ `ec2:DescribeVpcs` – `AWS::EC2::VPC::Id` 參數類型的必要項目。

如需 AWS特定參數類型的詳細資訊，請參閱 [使用 CloudFormation 提供的參數類型，在執行時期指定現有資源](cloudformation-supplied-parameter-types.md)。

### CloudFormation 的政策資源
<a name="resource-level-permissions"></a>

在 IAM 政策陳述式中，`Resource` 元素指定陳述式所涵蓋的一個或多個物件。對於 CloudFormation，每個 IAM 政策陳述式都會套用到您使用其 Amazon Resource Name (ARN) 指定的資源。特定 ARN 格式視資源而定。

如需 CloudFormation 資源類型及其 ARN 的完整清單，請參閱《服務授權參考》**中的 [CloudFormation定義的資源類型](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html#awscloudformation-resources-for-iam-policies)。若要了解您可以使用每個資源的 ARN 指定哪些動作，請參閱 [CloudFormation定義的動作](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awscloudformation.html#awscloudformation-actions-as-permissions)。

可以指定特定堆疊的動作，如下列政策範例所示。當您提供 ARN 時，請將 `placeholder text` 取代為您的資源特定資訊。

**Example 1: 拒絕刪除和更新指定堆疊動作的範例政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Action": [
                "cloudformation:DeleteStack",
                "cloudformation:UpdateStack"
            ],
            "Resource": "arn:aws:cloudformation:us-east-1:111122223333:stack/MyProductionStack/*"
        }
    ]
}
```

上例中的政策在堆疊名稱結尾處使用萬用字元，所以全堆疊 ID (例如 `arn:aws:cloudformation:region:account-id:stack/MyProductionStack/abc9dbf0-43c2-11e3-a6e8-50fa526be49c`) 和堆疊名稱 (例如 `MyProductionStack`) 會拒絕刪除堆疊和更新堆疊。

若要讓 `AWS::Serverless` 轉換來建立變更集，應包含 `arn:aws:cloudformation:region:aws:transform/Serverless-2016-10-31` 資源層級許可，如下列政策所示。

**Example 2: 允許針對指定轉換建立變更集動作的範例政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateChangeSet"
            ],
            "Resource": "arn:aws:cloudformation:us-east-1:aws:transform/Serverless-2016-10-31"
        }
    ]
}
```

### CloudFormation 的政策條件索引鍵
<a name="using-iam-conditions"></a>

在 IAM 政策陳述式中，您可以選擇性地指定控制政策生效時機的條件。例如，您可以定義一項政策，讓 使用者只能在他們指定特定範本 URL 的時候建立堆疊。您可以定義 CloudFormation 特定條件和 AWS整體條件，例如 `DateLessThan`，指定政策何時停止生效。如需詳細資訊和 AWS整體條件清單，請參閱《[IAM 使用者指南》中的 IAM 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition)中的條件。 **

**注意**  
請勿使用 `aws:SourceIp` AWS通用條件。CloudFormation 會使用自己的 IP 位址而非產生請求的 IP 位址來佈建資源。例如，當您建立堆疊時，CloudFormation 會從自己的 IP 位址提出請求，以啟動 Amazon EC2 執行個體或建立 Amazon S3 儲存貯體，而不是從 `CreateStack` 呼叫或 **create-stack** 命令中的 IP 位址。

下列清單說明 CloudFormation 專屬條件。這些條件只適用於使用者建立或更新堆疊時：

`cloudformation:ChangeSetName`  
您想要與政策建立關聯的 CloudFormation 變更集名稱。使用此條件控制 使用者可以執行或刪除的變更集。

`cloudformation:ImportResourceTypes`  
您希望與政策建立關聯的範本資源類型，例如 `AWS::EC2::Instance`。使用此條件來控制 使用者在將資源匯入堆疊時，能夠使用的資源類型。此條件會針對使用者在 `ResourcesToImport` 參數中宣告的資源類型進行檢查，目前僅支援 AWS CLI 和 API 請求。使用此參數時，您必須指定您希望使用者在匯入操作期間控制的所有資源類型。如需 `ResourcesToImport` 參數的詳細資訊，請參閱《AWS CloudFormation API 參考》中的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateChangeSet.html) 動作。**  
如需可能的 `ResourcesToImport` 清單，請參閱 [資源類型支援](resource-import-supported-resources.md)。  
使用三段式資源命名慣例，以指定使用者可使用的資源類型，範圍大至整個組織的所有資源，小至個別的資源類型。    
`organization::*`  
指定給定組織的所有資源類型。  
`organization::service_name::*`  
指定給定組織內特定服務的所有資源類型。  
`organization::service_name::resource_type`  
指定特定的資源類型。
例如：    
`AWS::*`  
指定所有支援 AWS 的資源類型。  
`AWS::service_name::*`  
指定特定 AWS 服務的所有支援資源。  
`AWS::service_name::resource_type`  
指定特定 AWS 資源類型，例如 `AWS::EC2::Instance`（所有 EC2 執行個體）。

`cloudformation:ResourceTypes`  
您希望與政策建立關聯的範本資源類型，例如 `AWS::EC2::Instance`。使用此條件控制 使用者在建立或更新堆疊時可以使用的資源類型。此條件的檢查目標是使用者在 `ResourceTypes` 參數中宣告的資源類型，目前僅支援 AWS CLI 和 API 請求。使用此參數時，使用者必須指定其範本中的所有資源類型。如需 `ResourceTypes` 參數的詳細資訊，請參閱《AWS CloudFormation API 參考》中的 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html) 動作。**  
如需資源類型的清單，請參閱 [CloudFormation 範本參考指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/introduction.html)。  
使用三段式資源命名慣例，以指定使用者可使用的資源類型，範圍大至整個組織的所有資源，小至個別的資源類型。    
`organization::*`  
指定給定組織的所有資源類型。  
`organization::service_name::*`  
指定給定組織內特定服務的所有資源類型。  
`organization::service_name::resource_type`  
指定特定的資源類型。
例如：    
`AWS::*`  
指定所有支援 AWS 的資源類型。  
`AWS::service_name::*`  
指定特定 AWS 服務的所有支援資源。  
`AWS::service_name::resource_type`  
指定特定 AWS 資源類型，例如 `AWS::EC2::Instance`（所有 EC2 執行個體）。  
`Alexa::ASK::*`  
指定 Alexa Skill Kit 中的所有資源類型。  
`Alexa::ASK::Skill`  
指定個別 [Alexa::ASK::Skill](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/alexa-resource-ask-skill.html) 資源類型。  
`Custom::*`  
指定所有自訂資源。  
如需詳細資訊，請參閱[使用自訂資源建立自訂佈建邏輯](template-custom-resources.md)。  
`Custom::resource_type`  
指定特定自訂資源類型。  
如需詳細資訊，請參閱[使用自訂資源建立自訂佈建邏輯](template-custom-resources.md)。

`cloudformation:RoleARN`  
您想要與政策建立關聯之 IAM 服務角色的 Amazon Resource Name (ARN)。使用此條件控制 使用者在使用堆疊或變更集時可以使用的服務角色。

`cloudformation:StackPolicyUrl`  
您想要與政策建立關聯的 Amazon S3 堆疊政策 URL。使用此條件控制 使用者可在建立或更新堆疊動作期間，與堆疊建立關聯的堆疊政策。如需堆疊政策的詳細資訊，請參閱[避免更新堆疊資源](protect-stack-resources.md)。  
為確保使用者只能使用您上傳的堆疊政策建立或更新堆疊，請針對這些使用者將 S3 儲存貯體設定為唯讀。

`cloudformation:TemplateUrl`  
您想要與政策建立關聯的 Amazon S3 範本 URL。使用此條件控制 使用者在建立或更新堆疊時可以使用的範本。  
為確保使用者只能使用您上傳的範本建立或更新堆疊，請針對這些使用者將 S3 儲存貯體設定為唯讀。
下列 CloudFormation 特定條件適用於相同名稱的 API 參數：  
+ `cloudformation:ChangeSetName`
+ `cloudformation:RoleARN`
+ `cloudformation:StackPolicyUrl`
+ `cloudformation:TemplateUrl`
例如，`cloudformation:TemplateUrl` 僅適用於 `CreateStack`、`UpdateStack`、和 `CreateChangeSet` API 的 `TemplateUrl` 參數。

如需使用條件索引鍵來控制存取的 IAM 政策範例，請參閱 [CloudFormation 的 IAM 基於身分識別的政策範例](security_iam_id-based-policy-examples.md)。

## 認可 CloudFormation 範本中的 IAM 資源
<a name="using-iam-capabilities"></a>

CloudFormation 會先驗證您的範本，您才可以建立堆疊。在驗證期間，CloudFormation 會檢查您的範本是否有它可能建立的 IAM 資源。IAM 資源 (例如具有完全存取權的使用者) 可以存取和修改您的 AWS 帳戶中的任何資源。因此，我們建議您先檢閱與每個 IAM 資源相關聯的許可再繼續操作，以免無意中建立提升許可的資源。為確保您已如此做，您必須認可範本包含這些資源，在 CloudFormation 建立堆疊前先授予其指定的功能。

您可以使用 CloudFormation 主控台、 AWS Command Line Interface (AWS CLI) 或 API 來確認 CloudFormation 範本的功能：
+ 在 CloudFormation 主控台，在「建立堆疊」或「更新堆疊」精靈的**設定堆疊選項**頁面中，選擇**我知道此範本可能會建立 IAM 資源**。
+ 在 中 AWS CLI，當您使用 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html)和 [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/update-stack.html)命令時，請指定 `--capabilities`選項的 `CAPABILITY_IAM`或 `CAPABILITY_NAMED_IAM`值。如果您的範本包含 IAM 資源，您可以指定任一功能。如果您的範本包含 IAM 資源的自訂名稱，您必須指定 `CAPABILITY_NAMED_IAM`。
+ 在 API 中，當您使用 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_CreateStack.html) 和 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_UpdateStack.html) 動作時，請指定 `Capabilities.member.1=CAPABILITY_IAM` 或 `Capabilities.member.1=CAPABILITY_NAMED_IAM`。如果您的範本包含 IAM 資源，您可以指定任一功能。如果您的範本包含 IAM 資源的自訂名稱，您必須指定 `CAPABILITY_NAMED_IAM`。

**重要**  
如果您的範本包含自訂的具名 IAM 資源，請不要重複使用相同的範本建立多個堆疊。IAM 資源在您的帳戶中必須是全域唯一的。如果您在不同的區域使用相同的範本建立多個堆疊，您的堆疊可能會共用相同的 IAM 資源，而不是一個堆疊獨有一個資源。在堆疊中共享資源可能會產生各種無法恢復的意外結果。例如，如果您刪除或更新一個堆疊中的共享 IAM 資源，您會在無意中修改其他堆疊的資源。

## 管理在 Amazon EC2 執行個體上執行之應用程式的憑證
<a name="using-iam-manage-creds"></a>

如果您有應用程式在 Amazon EC2 執行個體上執行，且需要向 AWS 資源 (例如 Amazon S3 儲存貯體或 DynamoDB 資料表) 提出請求，則此應用程式需要 AWS 安全憑證。不過，在每個您啟動的執行個體中分發和內嵌長期的安全憑證，是一項挑戰，同時可能有安全風險。與其使用像 IAM 使用者憑證的長期憑證，我們建議您在執行個體啟動時，建立與 Amazon EC2 執行個體相關聯的 IAM 角色。然後，應用程式就可以從 Amazon EC2 執行個體取得暫時的安全憑證。您不必在執行個體上內嵌長期的憑證。此外，為使管理憑證變得更輕鬆，您可以為多個 Amazon EC2 執行個體僅指定單一角色，不必為每個執行個體建立唯一的憑證。

如需示範如何使用角色啟動執行個體的範本程式碼片段，請參閱 [IAM 角色範本範例](quickref-iam.md#scenarios-iamroles)。

**注意**  
使用暫時安全登入資料之執行個體上的應用程式，可以呼叫任意 CloudFormation 動作。不過，由於 CloudFormation 與許多其他 AWS 服務互動，所以您必須確認您想要使用的所有服務，都支援暫時安全憑證。如需可接受臨時安全憑證的服務清單，請參閱《IAM 使用者指南》中的[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。**

## 授予暫時存取 (聯合身分存取)
<a name="using-iam-grant-access"></a>

在某些情況下，您可能想要授予沒有 AWS 登入資料的使用者暫時存取您的 AWS 帳戶。當您想要授予暫時存取權時，不要建立和刪除長期登入資料，而是使用 AWS Security Token Service (AWS STS)。例如，您可以使用 IAM 角色。從一個 IAM 角色，您可以透過程式設計方式建立，然後分發許多暫時安全憑證 (包括存取金鑰、私密存取金鑰和安全權杖)。這些登入資料生命週期有限，因此在過期 AWS 帳戶 後就無法用來存取您的 。您也可以建立多個 IAM 角色，以授與個別使用者不同層級的許可。IAM 角色對聯合身分和單一登入等案例很有用。

聯合身分是可以跨多個系統使用的獨特身分。對於已建立內部部署身分系統 (如 LDAP 或 Active Directory) 的企業使用者，您可用您的現場部署身分系統處理所有身分驗證。驗證完使用者身分後，您會從適當的 IAM 使用者或角色提供暫時安全憑證。例如，您可以建立管理員角色和開發人員角色，其中管理員可以完整存取 AWS 帳戶，而且開發人員只能使用 CloudFormation 堆疊。驗證管理員身分後，就會授權管理員從管理員角色中取得暫時安全憑證。不過，開發人員只能從開發人員角色中取得暫時安全憑證。

您也可以授予聯合身分使用者對 的存取權 AWS 管理主控台。在使用者向您的內部部署身分系統驗證後，您可以透過程式設計方式建構暫時的 URL，藉以直接存取 AWS 管理主控台。當使用者使用暫時 URL 時，他們不需要登入 ， AWS 因為他們已經過身分驗證 （單一登入）。此外，因為 URL 是從使用者的暫時安全憑證所建構，所以這些憑證可用的許可會決定使用者在 AWS 管理主控台中的許可。

您可以使用數個不同的 AWS STS APIs來產生臨時安全登入資料。如需有關使用何種 API 的詳細資訊，請參閱《IAM 使用者指南**》中的[比較 AWS STS 憑證](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_sts-comparison.html)。

**重要**  
當您使用 `GetFederationToken` API 產生的暫時安全憑證時，您不能使用 IAM。如果您需要使用 IAM，請改用來自角色的暫時安全憑證。

CloudFormation 會與許多其他 AWS 服務互動。當您搭配使用暫時安全憑證與 CloudFormation 時，請確認您想要使用的所有服務都支援暫時安全憑證。如需可接受臨時安全憑證的服務清單，請參閱《IAM 使用者指南》中的[可搭配 IAM 運作的AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。**

如需詳細資訊，請參閱《IAM 使用者指南》**中的下列相關資源：
+ [臨時登入資料的常見案例](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html#sts-introduction)
+ [啟用 AWS 主控台的自訂身分代理程式存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_enable-console-custom-url.html)

# CloudFormation 的 IAM 基於身分識別的政策範例
<a name="security_iam_id-based-policy-examples"></a>

依預設，使用者和角色不具備建立或修改 CloudFormation 資源的許可。他們也無法使用 AWS 管理主控台、 AWS Command Line Interface (AWS CLI) 或 AWS API 來執行任務。若要授予使用者對其所需資源執行動作的許可，IAM 管理員可以建立 IAM 政策。然後，管理員可以將 IAM 政策新增至角色，使用者便能擔任這些角色。如需詳細資訊，請參閱[定義 IAM 基於身分識別的政策](control-access-with-iam.md#iam-id-based-policies)。

下列範例顯示政策陳述式，可用於允許或拒絕使用一項或多項 CloudFormation 動作的許可。

**Topics**
+ [需要特定的範本 URL](#w2aac43c23c17b9)
+ [拒絕所有 CloudFormation 匯入操作](#w2aac43c23c17c11)
+ [允許特定資源類型的匯入操作](#w2aac43c23c17c13)
+ [拒絕堆疊範本中的 IAM 資源](#w2aac43c23c17c15)
+ [允許使用特定資源類型建立堆疊](#w2aac43c23c17c17)
+ [根據資源變動 API 動作來控制存取權](#w2aac43c23c17c19)
+ [根據區域和資源類型限制堆疊集操作](#resource-level-permissions-service-managed-stack-set)
+ [允許所有 IaC 產生器操作](#iam-policy-example-for-iac-generator)

## 需要特定的範本 URL
<a name="w2aac43c23c17b9"></a>

以下政策授予許可只使用 `https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template` 範本 URL 建立或更新堆疊。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:UpdateStack"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "cloudformation:TemplateUrl": [
                        "https://s3.amazonaws.com/amzn-s3-demo-bucket/test.template"
                    ]
                }
            }
        }
    ]
}
```

------

## 拒絕所有 CloudFormation 匯入操作
<a name="w2aac43c23c17c11"></a>

以下政策會授予使用者許可完成所有 CloudFormation 操作，但匯入操作「除外」。

------
#### [ JSON ]

****  

```
{ 
  "Version":"2012-10-17",		 	 	  
  "Statement": [ 
    { 
      "Sid": "AllowAllStackOperations",
      "Effect": "Allow", 
      "Action": "cloudformation:*", 
      "Resource": "*" 
    }, 
    { 
      "Sid": "DenyImport", 
      "Effect": "Deny", 
      "Action": "cloudformation:*", 
      "Resource": "*",
      "Condition": { 
        "ForAnyValue:StringLike": {
          "cloudformation:ImportResourceTypes": [ 
            "*" 
          ] 
        } 
      } 
    } 
  ] 
}
```

------

## 允許特定資源類型的匯入操作
<a name="w2aac43c23c17c13"></a>

以下政策授予所有堆疊操作的許可，以及僅限指定資源上的匯入操作 (在此範例中為 `AWS::S3::Bucket`)。

------
#### [ JSON ]

****  

```
{ 
  "Version":"2012-10-17",		 	 	  
  "Statement": [ 
    { 
      "Sid": "AllowImport",
      "Effect": "Allow", 
      "Action": "cloudformation:*", 
      "Resource": "*",
      "Condition": { 
        "ForAllValues:StringEqualsIgnoreCase": {
          "cloudformation:ImportResourceTypes": [ 
            "AWS::S3::Bucket" 
          ] 
        } 
      } 
    } 
  ] 
}
```

------

## 拒絕堆疊範本中的 IAM 資源
<a name="w2aac43c23c17c15"></a>

以下政策授予許可以建立堆疊，但如果堆疊範本包含任何來自 IAM 服務的資源，則拒絕請求。該政策也需要使用者指定 `ResourceTypes` 參數，僅供 AWS CLI 和 API 請求使用。此政策使用明確拒絕陳述式，因此，如有其他政策授予額外許可，此政策一律有效 (明確拒絕陳述式一律覆寫明確允許陳述式)。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect" : "Allow",
      "Action" : [ "cloudformation:CreateStack" ],
      "Resource" : "*"
    },
    {
      "Effect" : "Deny",
      "Action" : [ "cloudformation:CreateStack" ],
      "Resource" : "*",
      "Condition" : {
        "ForAnyValue:StringLikeIfExists" : {
          "cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
        }
      }
    },
    {
      "Effect": "Deny",
      "Action" : [ "cloudformation:CreateStack" ],
      "Resource": "*",
      "Condition": {
        "Null": {
          "cloudformation:ResourceTypes": "true"
        }
      }
    }
  ]
}
```

------

## 允許使用特定資源類型建立堆疊
<a name="w2aac43c23c17c17"></a>

以下政策類似前述範例。此政策授予許可以建立堆疊，除非堆疊範本包含任何來自 IAM 服務的資源。它還要求使用者指定 參數，該`ResourceTypes`參數僅適用於 AWS CLI 和 API 請求。此政策更為簡單，但不使用明確拒絕陳述式。授予額外許可的其他政策，可以覆寫此政策。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[
    {
      "Effect" : "Allow",
      "Action" : [ "cloudformation:CreateStack" ],
      "Resource" : "*",
      "Condition" : {
        "ForAllValues:StringNotLikeIfExists" : {
          "cloudformation:ResourceTypes" : [ "AWS::IAM::*" ]
        },
        "Null":{
          "cloudformation:ResourceTypes": "false"
        }
      }
    }
  ]
}
```

------

## 根據資源變動 API 動作來控制存取權
<a name="w2aac43c23c17c19"></a>

下列政策授予依據資源變更 API 動作名稱篩選存取權的許可。這用於控制 IAM 使用者可使用哪些 API 來在堆疊或堆疊集上新增或移除標籤。用於新增或移除標籤的操作應做為條件索引鍵的值新增。下列政策會授予 `TagResource` 和 `UntagResource` 變更操作 `CreateStack` 的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Sid": "CreateActionConditionPolicyForTagUntagResources",
        "Effect": "Allow",
        "Action": [
            "cloudformation:TagResource",
            "cloudformation:UntagResource"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "cloudformation:CreateAction": [
                    "CreateStack"
                ]
            }
        }
    }]
}
```

------

## 根據區域和資源類型限制堆疊集操作
<a name="resource-level-permissions-service-managed-stack-set"></a>

下列政策授與服務受管堆疊集許可。只有當堆疊集的範本包含 Amazon S3 資源類型 (`AWS::S3::*`) 或 `AWS::SES::ConfigurationSet` 資源類型時，具有此政策的使用者才能在堆疊集上執行操作。如果使用 ID 登入組織管理帳戶`123456789012`，使用者也只能對以 ID 為 的 OU 為目標的堆疊集執行操作`ou-1fsfsrsdsfrewr`，而且只能對以 ID AWS 帳戶 為 為目標`stack-set-id`的堆疊集執行操作`987654321012`。

如果堆疊集範本包含的資源類型不是政策中指定的資源類型，或部署目標不是政策中為對應的管理帳戶和堆疊集所指定的 OU 或帳戶 ID，則堆疊集操作會失敗。

只有在堆疊集操作以 `us-east-1`、`us-west-2` 或 `eu-west-2` AWS 區域為目標時，才會套用這些政策限制。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudformation:*"
            ],
            "Resource": [
                "arn:aws:cloudformation:*:*:stackset/*",
                "arn:aws:cloudformation:*:*:type/resource/AWS-S3-*",
                "arn:aws:cloudformation:us-west-2:111122223333:type/resource/AWS-SES-ConfigurationSet",
                "arn:aws:cloudformation:*:111122223333:stackset-target/*/ou-1fsfsrsdsfrewr",
                "arn:aws:cloudformation:*:111122223333:stackset-target/stack-set-id/444455556666"
            ],
            "Condition": {
                "ForAllValues:StringEqualsIgnoreCase": {
                    "cloudformation:TargetRegion": [
                        "us-east-1",
                        "us-west-2",
                        "eu-west-1"
                    ]
                }
            }
        }
    ]
}
```

------

## 允許所有 IaC 產生器操作
<a name="iam-policy-example-for-iac-generator"></a>

下列政策允許存取與 IaC 產生器資源掃描和範本管理相關的 CloudFormation 動作。第一個陳述式會授予描述、列出和啟動資源掃描的許可。它也允許存取其他必要的許可 (`cloudformation:GetResource`、`cloudformation:ListResources` 和 `cloudformation:ListTypes`)，這些許可可讓 IaC 產生器擷取有關資源和可用資源類型的資訊。第二個陳述式會授予建立、刪除、描述、列出和更新產生範本的完整許可。

您也必須將目標 AWS 服務的讀取許可授予使用 IaC 產生器掃描資源的任何人。如需詳細資訊，請參閱[掃描資源所需的 IAM 許可](generate-IaC.md#iac-generator-permissions)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement":[
        {
            "Sid":"ResourceScanningOperations",
            "Effect":"Allow",
            "Action":[
                "cloudformation:DescribeResourceScan",
                "cloudformation:GetResource",
                "cloudformation:ListResources",
                "cloudformation:ListResourceScanRelatedResources",
                "cloudformation:ListResourceScanResources",
                "cloudformation:ListResourceScans",
                "cloudformation:ListTypes",
                "cloudformation:StartResourceScan"
            ],
            "Resource":"*"
        },
        {
            "Sid":"TemplateGeneration",
            "Effect":"Allow",
            "Action":[
                "cloudformation:CreateGeneratedTemplate",
                "cloudformation:DeleteGeneratedTemplate",
                "cloudformation:DescribeGeneratedTemplate",
                "cloudformation:GetResource",
                "cloudformation:GetGeneratedTemplate",
                "cloudformation:ListGeneratedTemplates",
                "cloudformation:UpdateGeneratedTemplate"
            ],
            "Resource":"*"
        }
    ]
}
```

------

# AWS 的 受管政策 AWS CloudFormation
<a name="security-iam-awsmanpol"></a>

 AWS 受管政策是由 建立和管理的獨立政策 AWS。 AWS 受管政策旨在為許多常用案例提供許可，以便您可以開始將許可指派給使用者、群組和角色。

請記住， AWS 受管政策可能不會授予特定使用案例的最低權限許可，因為這些許可可供所有 AWS 客戶使用。我們建議您定義特定於使用案例的[客戶管理政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#customer-managed-policies)，以便進一步減少許可。

您無法變更 AWS 受管政策中定義的許可。如果 AWS 更新 AWS 受管政策中定義的許可，則更新會影響政策連接的所有委託人身分 （使用者、群組和角色）。當新 AWS 服務啟動或新 API 操作可用於現有服務時， AWS 最有可能更新 AWS 受管政策。

如需詳細資訊，請參閱 *IAM 使用者指南*中的 [AWS 受管政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html#aws-managed-policies)。

## AWS 受管政策：AWSCloudFormationFullAccess
<a name="security-iam-awsmanpol-AWSCloudFormationFullAccess"></a>

您可以將 `AWSCloudFormationFullAccess` 連接至使用者、群組與角色。

此政策會授予許可，以允許完整存取 CloudFormation 動作和資源。

**許可詳細資訊**

此政策包含以下許可。
+ `cloudformation` – 允許主體對所有資源執行所有 CloudFormation 動作。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考指南*》中的 [AWSCloudFormationFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudFormationFullAccess.html)。

## AWS 受管政策：AWSCloudFormationReadOnlyAccess
<a name="security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess"></a>

您可以將 `AWSCloudFormationReadOnlyAccess` 連接至使用者、群組與角色。

此政策授予許可，允許唯讀存取 CloudFormation 資源和動作。

**許可詳細資訊**

此政策包含以下許可。
+ `cloudformation` – 允許主體執行唯讀 CloudFormation 動作，例如描述堆疊、列出資源和檢視範本，但不允許建立、更新或刪除堆疊。

若要檢視此政策的許可，請參閱《 *AWS 受管政策參考指南*》中的 [AWSCloudFormationReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSCloudFormationReadOnlyAccess.html)。

## AWS 受管政策的 CloudFormation 更新
<a name="security-iam-awsmanpol-updates"></a>

檢視自此服務開始追蹤這些變更以來CloudFormation AWS 受管政策更新的詳細資訊。如需此頁面變更的自動提醒，請訂閱 CloudFormation 文件歷史記錄頁面上的 RSS 摘要。


| 變更 | 描述 | Date | 
| --- | --- | --- | 
|  [AWSCloudFormationReadOnlyAccess](#security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess) – 更新現有政策  |  CloudFormation 新增了新的許可，以允許批次描述操作`cloudformation:BatchDescribe*`的動作。  | 2026 年 1 月 30 日 | 
|  [AWSCloudFormationReadOnlyAccess](#security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess) – 更新現有政策  |  CloudFormation 新增了新的許可，以允許堆疊偏離偵測功能`cloudformation:Detect*`的動作。  | 2019 年 11 月 13 日 | 
|  [AWSCloudFormationReadOnlyAccess](#security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess) – 更新現有政策  |  CloudFormation 新增了允許 `cloudformation:EstimateTemplateCost`、 `cloudformation:Get*`和 `cloudformation:ValidateTemplate`動作的許可。  | 2017 年 11 月 2 日 | 
|  [AWSCloudFormationFullAccess](#security-iam-awsmanpol-AWSCloudFormationFullAccess) – 新政策  |  CloudFormation 新增了新的 AWS 受管政策，提供 CloudFormation 動作和資源的完整存取權。  | 2019 年 7 月 26 日 | 
|  [AWSCloudFormationReadOnlyAccess](#security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess) – 更新現有政策  |  CloudFormation 新增了允許 `cloudformation:DetectStackDrift`和 `cloudformation:DetectStackResourceDrift`動作進行堆疊偏離偵測的許可。  | 2019 年 2 月 6 日 | 
|  [AWSCloudFormationReadOnlyAccess](#security-iam-awsmanpol-AWSCloudFormationReadOnlyAccess) – 新政策  |  CloudFormation 新增了新的 AWS 受管政策，提供 CloudFormation 動作和資源的唯讀存取權。  | 2015 年 2 月 6 日 | 
|  CloudFormation 開始追蹤變更  |  CloudFormation 開始追蹤其 AWS 受管政策的變更。  | 2015 年 2 月 6 日 | 

# CloudFormation 服務角色
<a name="using-iam-servicerole"></a>

*服務角色*是 AWS Identity and Access Management (IAM) 角色，可讓 CloudFormation 代表您呼叫堆疊中的資源。您可以指定 IAM 角色，讓 CloudFormation 建立、更新或刪除您的堆疊資源。根據預設，CloudFormation 會使用從您的堆疊操作使用者登入資料所產生的暫時工作階段。如果您指定服務角色，CloudFormation 就會使用角色的登入資料。

使用服務角色明確指定 CloudFormation 可以執行的動作，但不一定是您或其他使用者可以執行的相同動作。例如，您可能有管理權限，但您可以限制 CloudFormation 只能存取 Amazon EC2 動作。

您使用 IAM 服務建立服務角色及其許可政策。如需建立服務角色的詳細資訊，請參閱《*IAM 使用者指南*》中的[建立角色以委派許可給 AWS 服務](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html)。指定 CloudFormation (`cloudformation.amazonaws.com`) 做為可擔任該角色的服務。

若要建立服務角色與堆疊的關聯，請在您建立堆疊時指定角色。如需詳細資訊，請參閱[設定堆疊選項](cfn-console-create-stack.md#configure-stack-options)。您也可以在更新主控台中的堆疊時變更服務角色，或透過 API [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStack.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_DeleteStack.html) 堆疊。在您指定服務角色之前，請確保您有傳遞許可 (`iam:PassRole`)。`iam:PassRole` 許可會指定您可使用哪些角色。如需詳細資訊，請參閱《*IAM 使用者指南*》中的[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

**重要**  
當您指定某個服務角色時，CloudFormation 一律使用該角色處理在該堆疊上執行的所有操作。建立堆疊後，就無法移除連接至堆疊的服務角色。其他具有在此堆疊上執行這些操作之許可的使用者，都能夠使用此角色，不論這些使用者是否有有 `iam:PassRole` 許可。如果該角色包含使用者不該有的許可，您可能在無意中提升使用者的許可。確定該角色授予最低權限。如需詳細資訊，請參閱《IAM 使用者指南》**中的[套用最低權限許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)。

# 預防跨服務混淆代理人
<a name="cross-service-confused-deputy-prevention"></a>

混淆代理人問題屬於安全性議題，其中沒有執行動作許可的實體可以強制具有更多許可的實體執行該動作。在 中 AWS，跨服務模擬可能會導致混淆代理人問題。在某個服務 (*呼叫服務*) 呼叫另一個服務 (*被呼叫服務*) 時，可能會發生跨服務模擬。可以操縱呼叫服務來使用其許可，以其不應有存取許可的方式對其他客戶的資源採取動作。為了防止這種情況， AWS 提供工具，協助您保護所有 服務的資料，讓 服務主體能夠存取您帳戶中的資源。

我們建議在資源政策中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn)和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount)全域條件內容索引鍵，以限制將另一個服務 CloudFormation 提供給特定資源的許可，例如 CloudFormation 延伸。如果您想要僅允許一個資源與跨服務存取相關聯，則請使用 `aws:SourceArn`。如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

確定 的值`aws:SourceArn`是 CloudFormation 存放之資源的 ARN。

防範混淆代理人問題最有效的方法，是使用 `aws:SourceArn` 全域條件內容金鑰，以及資源的完整 ARN。如果不知道資源的完整 ARN，或者如果您指定了多個資源，請使用 `aws:SourceArn` 全域條件內容金鑰，同時使用萬用字元 (`*`) 表示 ARN 的未知部分。例如 `arn:aws:cloudformation:*:123456789012:*`。

如果 `aws:SourceArn` 值不包含帳戶 ID，則必須使用這兩個全域條件內容索引鍵來限制許可。

下列範例示範如何在 中使用 `aws:SourceArn`和 `aws:SourceAccount`全域條件內容索引鍵 CloudFormation ，以防止混淆代理人問題。

## 使用 `aws:SourceArn` 和 `aws:SourceAccount` 條件索引鍵的信任政策範例
<a name="cross-service-confused-deputy-prevention-example"></a>

對於登錄服務， CloudFormation 會呼叫 AWS Security Token Service (AWS STS) 以在您的帳戶中擔任服務角色。在 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_RegisterType.html) 操作中為 `ExecutionRoleArn` 設定此角色，在 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_LoggingConfig.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_LoggingConfig.html) 操作中為 `LogRoleArn` 設定。如需詳細資訊，請參閱[為公有擴充功能存取設定具有 IAM 許可和信任政策的執行角色](registry-public.md#registry-public-enable-execution-role)。

此範例角色信任政策使用條件陳述式，將服務角色上的`AssumeRole`功能限制為僅對指定帳戶中指定的 CloudFormation 延伸執行動作。獨立評估 `aws:SourceArn` 和 `aws:SourceAccount` 條件。使用服務角色的任何請求都必須滿足這兩個條件。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "resources.cloudformation.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole",
      "Condition": {
        "StringEquals": {
          "aws:SourceAccount": "123456789012"
        },
        "ArnLike": {
          "aws:SourceArn": "arn:aws:cloudformation:us-east-1:123456789012:type/resource/Organization-Service-Resource"
        }
      }
    }
  ]
}
```

------

## 其他資訊
<a name="cross-service-confused-deputy-prevention-additional-information"></a>

如需使用 StackSets 所用服務角色的 `aws:SourceArn` 和 `aws:SourceAccount` 全域條件內容索引鍵的政策範例，請參閱 [設定全域索引鍵以減輕混淆代理人問題](stacksets-prereqs-self-managed.md#confused-deputy-mitigation)。

如需詳細資訊，請參閱《IAM 使用者指南》中的[更新角色信任政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)。**

# 轉送存取工作階段 (FAS) 請求和許可評估
<a name="fas-requests-and-permission-evaluation"></a>

建立、更新和刪除 CloudFormation 堆疊時，使用者可以選擇性地指定 IAM 角色 ARN。如果未提供任何角色，CloudFormation 會使用其預設服務機制與其他 AWS 服務互動。在此案例中，呼叫者必須擁有所管理資源的必要許可。或者，當使用者提供自己的 IAM 角色時，CloudFormation 將擔任該角色以代表他們執行服務互動。

無論使用者是否提供 IAM 角色，CloudFormation 都會為每個資源操作產生新的範圍縮小的 FAS 權杖。因此，在這兩種情況下都會填入 [FAS 相關條件金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html#access_fas_policy_conditions)`aws:ViaAWSService`，包括 。

使用 FAS 會影響 CloudFormation 操作期間的 IAM 政策評估方式。使用範本 (該範本包含受 FAS 相關條件金鑰影響的資源) 建立堆疊時，可能會發生許可拒絕。

**IAM 政策範例**  
請考慮下列 IAM 政策。`Statement2` 會持續阻止在 CloudFormation 中建立 `AWS::KMS::Key` 資源。無論堆疊操作期間是否提供 IAM 角色，都會一致地強制執行該限制。這是因為由於使用 FAS，`aws:ViaAWSService` 條件金鑰始終設為 `true`。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Action": [
                "kms:CreateKey"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Statement2",
            "Effect": "Deny",
            "Action": [
                "kms:CreateKey"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "Bool": {
                    "aws:ViaAWSService": "true"
                }
            }
        }
    ]
}
```

------

**堆疊範本範例**  
例如，當使用者使用下列範例範本建立堆疊時，`aws:ViaAWSService` 會設定為 `true`，而 FAS 政策會覆寫角色許可。堆疊建立會受到拒絕 `CreateKey` 動作的 IAM 政策的 `Statement2` 的影響。這會導致許可遭拒錯誤。

```
Resources:
  myPrimaryKey:
    Type: AWS::KMS::Key
    Properties:
      Description: An example multi-Region primary key
      KeyPolicy:
        Version: '2012-10-17'
        Id: key-default-1
        Statement:
          - Sid: Enable IAM User Permissions
            Effect: Allow
            Principal:
              AWS: !Join
                - ''
                - - 'arn:aws:iam::'
                  - !Ref AWS::AccountId
                  - ':root'
            Action: kms:*
            Resource: '*'
```

如需 FAS 的詳細資訊，請參閱《IAM 使用者指南**》中的[轉送存取工作階段](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html)。

**注意**  
大多數資源都遵循此行為。不過，如果在建立、更新或刪除資源時遇到意外的成功或失敗，且 IAM 政策包含 FAS 相關條件金鑰，則相關資源可能屬於不遵循此標準模式的小部分資源。

# 使用 記錄 CloudFormation API 呼叫 AWS CloudTrail
<a name="cfn-api-logging-cloudtrail"></a>

CloudFormation 已與 服務整合 AWS CloudTrail，此服務提供由使用者、角色或 CloudFormation 中的 AWS 服務所採取之動作的記錄。CloudTrail 將 CloudFormation 的所有 API 呼叫擷取為事件，包括來自 CloudFormation 主控台的呼叫，以及來自對 CloudFormation API 發出的程式碼呼叫。如果您建立追蹤記錄，就可以持續傳送 CloudTrail 事件至 Amazon S3 儲存貯體，包括 CloudFormation 的事件。即使您未設定追蹤，依然可以透過 CloudTrail 主控台中的**事件歷史記錄**檢視最新事件。您可以使用由 CloudTrail 收集的資訊來判斷對 CloudFormation 提出的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間，以及其他詳細資訊。

若要進一步了解 CloudTrail，請參閱[「AWS CloudTrail 使用者指南」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/)。

**Topics**
+ [CloudTrail 中的 CloudFormation 資訊](#cloudformation_info_in_cloudtrail)
+ [了解 CloudFormation 日誌檔案項目](#understanding_cloudformation_entries)

## CloudTrail 中的 CloudFormation 資訊
<a name="cloudformation_info_in_cloudtrail"></a>

當您建立 AWS 帳戶時，會在您的帳戶上啟用 CloudTrail。當活動在 CloudFormation 中發生時，該活動會與**事件歷史記錄**中的其他服務 AWS 事件一起記錄在 CloudTrail 事件中。您可以檢視、搜尋和下載 AWS 帳戶的最新事件。如需詳細資訊，請參閱[使用 CloudTrail 事件歷史記錄檢視事件](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

若要持續記錄您 AWS 帳戶中的事件，包括 CloudFormation 的事件，請建立追蹤。線索能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。根據預設，當您在主控台建立線索時，線索會套用到所有 區域。線索會記錄 AWS 分割區中所有區域的事件，並將日誌檔案交付至您指定的 Amazon S3 儲存貯體。此外，您可以設定其他 AWS 服務，以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊，請參閱：
+ [建立追蹤的概觀](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支援的服務和整合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-integrations)
+ [設定 CloudTrail 的 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html)
+ [接收多個區域的 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)及[接收多個帳戶的 CloudTrail 日誌檔案](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

所有 CloudFormation 動作皆由 CloudTrail 記錄，並記錄在 [https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Operations.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_Operations.html) 中。例如，對 `CreateStack`、`DeleteStack` 及 `ListStacks` 區段的呼叫，都會在 CloudTrail 日誌檔案中產生項目。

每一筆事件或日誌專案都會包含產生請求者的資訊。身分資訊可協助您判斷下列事項：
+ 該請求是否使用根或 IAM 使用者憑證提出。
+ 提出該請求時，是否使用了特定角色或聯合身分使用者的暫時安全憑證。
+ 請求是否由其他 AWS 服務提出。

如需詳細資訊，請參閱 [CloudTrail userIdentity 元素](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

## 了解 CloudFormation 日誌檔案項目
<a name="understanding_cloudformation_entries"></a>

追蹤是一種組態，能讓事件以日誌檔案的形式交付到您指定的 Amazon S3 儲存貯體。CloudTrail 日誌檔案包含一或多個日誌專案。一個事件代表任何來源提出的單一請求，並包含所請求之操作的相關資訊、操作的日期和時間、請求參數等等。CloudTrail 日誌檔案並非依公有 API 呼叫的堆疊追蹤排序，因此不會以任何特定順序出現。

以下範例顯示的 CloudTrail 日誌項目會示範 `CreateStack` 操作：該操作由名為 Alice 的 IAM 使用者發出。

**注意**  
僅記錄輸入參數索引鍵名稱。不記錄參數值。

```
{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAABCDEFGHIJKLNMOPQ",
    "arn": "arn:aws:iam::012345678910:user/Alice",
    "accountId": "012345678910",
    "accessKeyId": "AKIDEXAMPLE",
    "userName": "Alice"
  },
  "eventTime": "2014-03-24T21:02:43Z",
  "eventSource": "cloudformation.amazonaws.com",
  "eventName": "CreateStack",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "127.0.0.1",
  "userAgent": "aws-cli/1.2.11 Python/2.7.4 Linux/2.6.18-164.el5",
  "requestParameters": {
    "templateURL": "templateURL",
    "tags": [
      {
        "key": "test",
        "value": "tag"
      }
    ],
    "stackName": "my-test-stack",
    "disableRollback": true,
    "parameters": [
      {
        "parameterKey": "password"
      },
      {
        "parameterKey": "securitygroup"
      }
    ]
  },
  "responseElements": {
    "stackId": "arn:aws:cloudformation:us-east-1:012345678910:stack/my-test-stack/a38e6a60-b397-11e3-b0fc-08002755629e"
  },
  "requestID": "9f960720-b397-11e3-bb75-a5b75389b02d",
  "eventID": "9bf6cfb8-83e1-4589-9a70-b971e727099b"
}
```

以下範例顯示 Alice 在 `my-test-stack` 堆疊上呼叫了 `UpdateStack` 操作：

```
{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAABCDEFGHIJKLNMOPQ",
    "arn": "arn:aws:iam::012345678910:user/Alice",
    "accountId": "012345678910",
    "accessKeyId": "AKIDEXAMPLE",
    "userName": "Alice"
  },
  "eventTime": "2014-03-24T21:04:29Z",
  "eventSource": "cloudformation.amazonaws.com",
  "eventName": "UpdateStack",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "127.0.0.1",
  "userAgent": "aws-cli/1.2.11 Python/2.7.4 Linux/2.6.18-164.el5",
  "requestParameters": {
    "templateURL": "templateURL",
    "parameters": [
      {
        "parameterKey": "password"
      },
      {
        "parameterKey": "securitygroup"
      }
    ],
    "stackName": "my-test-stack"
  },
  "responseElements": {
    "stackId": "arn:aws:cloudformation:us-east-1:012345678910:stack/my-test-stack/a38e6a60-b397-11e3-b0fc-08002755629e"
  },
  "requestID": "def0bf5a-b397-11e3-bb75-a5b75389b02d",
  "eventID": "637707ce-e4a3-4af1-8edc-16e37e851b17"
}
```

以下範例顯示 Alice 呼叫了 `ListStacks` 操作。

```
{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAABCDEFGHIJKLNMOPQ",
    "arn": "arn:aws:iam::012345678910:user/Alice",
    "accountId": "012345678910",
    "accessKeyId": "AKIDEXAMPLE",
    "userName": "Alice"
  },
  "eventTime": "2014-03-24T21:03:16Z",
  "eventSource": "cloudformation.amazonaws.com",
  "eventName": "ListStacks",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "127.0.0.1",
  "userAgent": "aws-cli/1.2.11 Python/2.7.4 Linux/2.6.18-164.el5",
  "requestParameters": null,
  "responseElements": null,
  "requestID": "b7d351d7-b397-11e3-bb75-a5b75389b02d",
  "eventID": "918206d0-7281-4629-b778-b91eb0d83ce5"
}
```

以下範例顯示 Alice 在 `my-test-stack` 堆疊上呼叫了 `DescribeStacks` 操作。

```
{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAABCDEFGHIJKLNMOPQ",
    "arn": "arn:aws:iam::012345678910:user/Alice",
    "accountId": "012345678910",
    "accessKeyId": "AKIDEXAMPLE",
    "userName": "Alice"
  },
  "eventTime": "2014-03-24T21:06:15Z",
  "eventSource": "cloudformation.amazonaws.com",
  "eventName": "DescribeStacks",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "127.0.0.1",
  "userAgent": "aws-cli/1.2.11 Python/2.7.4 Linux/2.6.18-164.el5",
  "requestParameters": {
    "stackName": "my-test-stack"
  },
  "responseElements": null,
  "requestID": "224f2586-b398-11e3-bb75-a5b75389b02d",
  "eventID": "9e5b2fc9-1ba8-409b-9c13-587c2ea940e2"
}
```

以下範例顯示 Alice 在 `my-test-stack` 堆疊上呼叫了 `DeleteStack` 操作。

```
{
  "eventVersion": "1.01",
  "userIdentity": {
    "type": "IAMUser",
    "principalId": "AIDAABCDEFGHIJKLNMOPQ",
    "arn": "arn:aws:iam::012345678910:user/Alice",
    "accountId": "012345678910",
    "accessKeyId": "AKIDEXAMPLE",
    "userName": "Alice"
  },
  "eventTime": "2014-03-24T21:07:15Z",
  "eventSource": "cloudformation.amazonaws.com",
  "eventName": "DeleteStack",
  "awsRegion": "us-east-1",
  "sourceIPAddress": "127.0.0.1",
  "userAgent": "aws-cli/1.2.11 Python/2.7.4 Linux/2.6.18-164.el5",
  "requestParameters": {
    "stackName": "my-test-stack"
  },
  "responseElements": null,
  "requestID": "42dae739-b398-11e3-bb75-a5b75389b02d",
  "eventID": "4965eb38-5705-4942-bb7f-20ebe79aa9aa"
}
```

# 中的基礎設施安全 CloudFormation
<a name="infrastructure-security"></a>

作為受管服務， AWS CloudFormation 受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫， CloudFormation 透過網路存取 。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

您可以從任何網路位置呼叫這些 API 操作，但 CloudFormation 支援以資源為基礎的存取政策，其中可能包括根據來源 IP 地址的限制。您也可以使用 CloudFormation 政策來控制來自特定 Amazon Virtual Private Cloud (Amazon VPC) 端點或特定 VPCs存取。實際上，這只會隔離網路內特定 VPC 對指定 CloudFormation 資源 AWS 的網路存取。

# 中的彈性 CloudFormation
<a name="disaster-recovery-resiliency"></a>

 AWS 全球基礎設施是以 AWS 區域和可用區域為基礎建置的。 AWS 區域提供多個實體隔離和隔離的可用區域，這些區域以低延遲、高輸送量和高度備援的網路連接。透過可用區域，您可以設計與操作的應用程式和資料庫，在可用區域之間自動容錯移轉而不會發生中斷。可用區域的可用性、容錯能力和擴展能力，均較單一或多個資料中心的傳統基礎設施還高。

如需 AWS 區域和可用區域的詳細資訊，請參閱 [AWS 全球基礎設施](https://aws.amazon.com/about-aws/global-infrastructure/)。

# 的合規驗證 CloudFormation
<a name="cloudformation-compliance"></a>

若要了解 AWS 服務 是否在特定合規計劃範圍內，請參閱[AWS 服務 合規計劃範圍內](https://aws.amazon.com/compliance/services-in-scope/)然後選擇您感興趣的合規計劃。如需一般資訊，請參閱[AWS 合規計劃](https://aws.amazon.com/compliance/programs/)。

您可以使用 下載第三方稽核報告 AWS Artifact。如需詳細資訊，請參閱[下載報告 in AWS Artifact](https://docs.aws.amazon.com/artifact/latest/ug/downloading-documents.html)

您使用 時的合規責任 AWS 服務 取決於資料的機密性、您公司的合規目標，以及適用的法律和法規。如需使用 時合規責任的詳細資訊 AWS 服務，請參閱 [AWS 安全文件](https://docs.aws.amazon.com/security/)。

# 中的組態和漏洞分析 CloudFormation
<a name="vulnerability-analysis-and-management"></a>

組態和 IT 控制是 AWS 與身為我們客戶的您共同的責任。如需詳細資訊，請參閱 AWS [共同的責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)。

# CloudFormation 的安全最佳實務
<a name="security-best-practices"></a>

CloudFormation 提供許多安全功能，供您在開發和實作自己的安全政策時考慮。以下最佳實務為一般準則，並不代表完整的安全解決方案。這些最佳實務可能不適用或無法滿足您的環境需求，因此請將其視為實用建議就好，而不要當作是指示。

**Topics**
+ [使用 IAM 控制存取](#use-iam-to-control-access)
+ [請勿在您的範本中內嵌憑證](#creds)
+ [使用 AWS CloudTrail 記錄 CloudFormation 呼叫](#cloudtrail)

## 使用 IAM 控制存取
<a name="use-iam-to-control-access"></a>

IAM 是一項 AWS 服務，可用來在 中管理使用者及其許可 AWS。您可以使用 IAM 搭配 CloudFormation 來指定使用者可執行的 CloudFormation 動作，例如檢視堆疊範本、建立堆疊或刪除堆疊。此外，管理 CloudFormation 堆疊的任何人都需要這些堆疊中的資源許可。例如，如果使用者想要使用 CloudFormation 來啟動、更新或終止 Amazon EC2 執行個體，則必須具備呼叫相關 Amazon EC2 動作的許可。

在大多數情況下，使用者需要完整存取權，才能管理範本中的所有資源。CloudFormation 會呼叫來代替使用者建立、修改及刪除這些資源。若要區隔使用者與 CloudFormation 服務的許可，請使用服務角色。CloudFormation 使用服務角色的政策來呼叫，而不是使用者的政策。如需詳細資訊，請參閱[CloudFormation 服務角色](using-iam-servicerole.md)。

## 請勿在您的範本中內嵌憑證
<a name="creds"></a>

建議您在堆疊範本中使用*動態參考*，而不要在 CloudFormation 範本中嵌入敏感資訊。

動態參考提供精簡且強大的方式，讓您參考儲存在其他服務中的外部值，例如 AWS Systems Manager 參數存放區或 AWS Secrets Manager。當您使用動態參考時，在堆疊和變更集操作期間，CloudFormation 會在必要時擷取指定參考的值，並將值傳遞至適當的資源。不過，CloudFormation 絕不會存放實際參考值。如需詳細資訊，請參閱[使用動態參考取得存放在其他服務中的值](dynamic-references.md)。

[AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) 協助您安全地加密、儲存和擷取資料庫和其他服務的憑證。[AWS Systems Manager 參數存放區](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)提供安全的階層式儲存，以管理組態資料。

如需定義範本參數的詳細資訊，請參閱[CloudFormation 範本 Parameters 語法](parameters-section-structure.md)。

## 使用 AWS CloudTrail 記錄 CloudFormation 呼叫
<a name="cloudtrail"></a>

AWS CloudTrail 會追蹤在您的 中進行 CloudFormation API 呼叫的任何人 AWS 帳戶。只要有人使用 CloudFormation API、CloudFormation 主控台、後端主控台或 CloudFormation AWS CLI 命令，就會記錄 API 呼叫。啟用記錄，然後指定 Amazon S3 儲存貯體來存放日誌。如此一來，如果您需要，即可稽核誰在您的帳戶中發出哪些 CloudFormation 呼叫。如需詳細資訊，請參閱[使用 記錄 CloudFormation API 呼叫 AWS CloudTrail](cfn-api-logging-cloudtrail.md)。

# CloudFormation 使用界面端點存取 (AWS PrivateLink)
<a name="vpc-interface-endpoints"></a>

您可以使用 在 VPC 與 之間 AWS PrivateLink 建立私有連線 CloudFormation。您可以 CloudFormation 像在 VPC 中一樣存取 ，無需使用網際網路閘道、NAT 裝置、VPN 連接或 Direct Connect 連線。VPC 中的執行個體不需要公有 IP 地址即可存取 CloudFormation。

您可以建立由 AWS PrivateLink提供支援的*介面端點*來建立此私有連線。我們會在您為介面端點啟用的每個子網中建立端點網路介面。這些是請求者管理的網路介面，可作為目的地為 CloudFormation之流量的進入點。

CloudFormation 支援透過界面端點呼叫其所有 API 動作。

## CloudFormation VPC 端點的考量事項
<a name="vpc-endpoint-considerations"></a>

在您設定介面端點之前，請先確定您已符合《 *AWS PrivateLink 指南*》中的[使用介面 VPC 端點主題存取 AWS 服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)中的先決條件。

設定介面端點時，適用下列額外的先決條件和考量事項 CloudFormation：
+ 若您的 VPC 中有資源必須回應自訂資源請求或等待條件，請確保這些資源可存取所需的 CloudFormation 專屬 Amazon S3 儲存貯體。CloudFormation 在每個區域中擁有 S3 儲存貯體，以監控對於[自訂資源](template-custom-resources.md)請求或[等待條件](using-cfn-waitcondition.md)的回應。如果範本包含 VPC 中的自訂資源或等待條件，VPC 端點政策必須允許使用者將回應傳送至以下儲存貯體：
  + 對於自訂資源，允許流至 `cloudformation-custom-resource-response-region` 儲存貯體的流量。使用自訂資源時， AWS 區域 名稱不包含破折號。例如 `uswest2`。
  + 對於等待條件，允許流至 `cloudformation-waitcondition-region` 儲存貯體的流量。使用等待條件時， AWS 區域 名稱會包含破折號。例如 `us-west-2`。

  如果端點政策封鎖流至這些儲存貯體的流量，CloudFormation 將不會收到回應，堆疊操作將會失敗。例如，如果您在必須回應等待條件之 `us-west-2` 區域中的 VPC 有一個資源，此資源必須能夠傳送回應至 `cloudformation-waitcondition-us-west-2` 儲存貯體。

  如需 CloudFormation 目前可用 AWS 區域 位置的清單，請參閱 中的[CloudFormation 端點和配額](https://docs.aws.amazon.com/general/latest/gr/cfn.html)頁面*Amazon Web Services 一般參考*。
+ VPC 端點目前不支援跨區域請求 – 請確定在您打算對 CloudFormation 發出 API 呼叫的同一區域中建立端點。
+ 透過 Route 53，VPC 端點僅支援 Amazon 提供的 DNS。如果您想要使用自己的 DNS，您可以使用條件式 DNS 轉送。如需詳細資訊，請參閱《Amazon VPC 使用者指南》中的 [Amazon VPC 中的 DHCP 選項集](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_DHCP_Options.html)。
+ 連接到 VPC 端點的安全群組，必須允許從 VPC 的私有子網路，透過 443 埠傳入的連線。

## 建立 的介面 VPC 端點 CloudFormation
<a name="vpc-endpoint-create"></a>

您可以使用 Amazon VPC CloudFormation 主控台或 AWS Command Line Interface (AWS CLI) 來建立 VPC 端點。如需詳細資訊，請參閱《*AWS PrivateLink 指南*》中的[建立 VPC 端點](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。

 CloudFormation 使用下列服務名稱建立 的介面端點：
+ **com.amazonaws.*region*.cloudformation** – 建立用於 CloudFormation API 操作的端點。

如果您為介面端點啟用私有 DNS，您可以使用 CloudFormation 其預設的區域 DNS 名稱向 提出 API 請求。例如 `cloudformation.us-east-1.amazonaws.com`。

在支援 FIPS 特定端點 AWS 區域 的情況下，您也可以 CloudFormation 使用下列服務名稱建立 的介面端點：
+ **com.amazonaws.*region*.cloudformation-fips** – 建立符合[聯邦資訊處理標準 (FIPS) 140-2](https://aws.amazon.com/compliance/fips/) 的 CloudFormation API 端點。

如需 CloudFormation 端點的完整清單，請參閱 *Amazon Web Services 一般參考* 中的 [CloudFormation 端點與配額](https://docs.aws.amazon.com/general/latest/gr/cfn.html)。

## 為 建立 VPC 端點政策 CloudFormation
<a name="vpc-endpoint-policy"></a>

端點政策為 IAM 資源，您可將其連接至介面端點。預設端點政策允許 CloudFormation 透過介面端點完整存取 。若要控制允許 CloudFormation 從您的 VPC 存取 ，請將自訂端點政策連接至介面端點。

端點政策會指定以下資訊：
+ 可執行動作 (AWS 帳戶、IAM 使用者和 IAM 角色) 的主體。
+ 可執行的動作。
+ 可供執行動作的資源。

如需詳細資訊，請參閱《*AWS PrivateLink 指南》*中的[使用端點政策控制 VPC 端點的存取](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-access.html)。

**範例： CloudFormation 動作的 VPC 端點政策**  
以下是 端點政策的範例 CloudFormation。連接至 端點時，此政策會授予所有資源上所有委託人所列出 CloudFormation 動作的存取權。下列範例拒絕所有使用者透過 VPC 端點建立堆疊的許可，並允許完整存取 CloudFormation 服務上的所有其他動作。

```
{
  "Statement": [
    {
      "Action": "cloudformation:*", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Resource": "*"
    },
    {
      "Action": "cloudformation:CreateStack", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Resource": "*"
    }
  ]
}
```