

• 2026 年 4 月 30 日之後將不再提供 AWS Systems Manager CloudWatch Dashboard。客戶可以繼續使用 Amazon CloudWatch 主控台來檢視、建立和管理其 Amazon CloudWatch 儀表板，就像現在一樣。如需詳細資訊，請參閱 [Amazon CloudWatch Dashboard 文件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

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

# 自動核准和拒絕存取政策的陳述式結構和內建運算子
<a name="auto-approval-deny-access-policy-statement-structure"></a>

下表顯示自動核准與拒絕存取政策的結構。


| 元件 | 語法 | 
| --- | --- | 
| 效用 | `permit \| forbid` | 
| scope | `(principal, action, resource)` | 
| 條件子句 |  <pre>when {<br />    {{principal or resource}} has {{attribute name}}             <br />};</pre>  | 

## 政策元件
<a name="policy-components"></a>

自動核准或拒絕存取政策包含下列元件：
+ **效果** – `permit` (允許) 或 `forbid` (拒絕) 存取。
+ **範圍** – 套用效果的主體、動作和資源。您可以不識別特定主體、動作或資源，讓 Cedar 中的範圍保持未定義的狀態。在此情況下，政策適用於所有可能的主體、動作和資源。對於即時節點存取，`action` 一律為 `AWS::SSM::Action::"getTokenForInstanceAccess"`。
+ **條件子句** – 套用效果的內容。

## 說明
<a name="auth-policies-policy-comments"></a>

您可以在政策中包含註解。註解定義為以 `//` 開頭和以換行符號字元結尾的行。

以下範例顯示政策中的註解。

```
// Allows users in the Engineering group from the Platform org to automatically connect to nodes tagged with Engineering and Production keys. 
permit (
    principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
    action == AWS::SSM::Action::"getTokenForInstanceAccess",
    resource
)
when {
    principal has organization && resource.hasTag("Engineering") && resource.hasTag("Production") && principal.organization == "Platform"
};
```

## 多個子句
<a name="multiple-clauses"></a>

您可以使用 `&&` 運算子，在政策陳述式中使用多個條件子句。

```
// Allow access if node has tag where the tag key is Environment 
// & tag value is Development 

permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "Development"
};
```

## 保留字元
<a name="reserved-characters"></a>

下列範例顯示如何在內容屬性使用 `:` (分號) (這是政策語言中的保留字元) 時寫入政策。

```
permit (
    principal,
    action == AWS::SSM::Action::"getTokenForInstanceAccess",
    resource
)
when {
    principal has employeeNumber && principal.employeeNumber like "E-1*" && resource.hasTag("Purpose") && resource.getTag("Purpose") == "Testing"
}
```

如需額外的範例，請參閱[政策陳述式範例](#policy-statement-examples)。

## 即時節點存取結構描述
<a name="auto-approval-deny-access-policy-statement-schema"></a>

以下是即時節點存取的 Cedar 結構描述。

```
namespace AWS::EC2 {
    entity Instance tags String;
}


namespace AWS::IdentityStore {
    entity Group;
    
    entity User in [Group] {
    employeeNumber?: String,
    costCenter?: String,
    organization?: String,
    division?: String,
    };

}


namespace AWS::IAM {

    entity Role;
    
    type AuthorizationContext = {
        principalTags: PrincipalTags,
    };
    
    entity PrincipalTags tags String;
}

namespace AWS::SSM {

    entity ManagedInstance tags String;

    action "getTokenForInstanceAccess" appliesTo {
    principal: [AWS::IdentityStore::User],
    resource: [AWS::EC2::Instance, AWS::SSM::ManagedInstance],
    context: {
        "iam": AWS::IAM::AuthorizationContext
        }
    };
}
```

## 內建運算子
<a name="built-in-policy-operators"></a>

使用各種條件建立自動核准或拒絕存取政策的內容時，您可以使用 `&&` 運算子新增其他條件。您也可以使用許多其他內建運算子，為您的政策條件新增額外的表述能力。下表包含所有內建運算子，以供參考。



- ** \! **
  - **類型與多載:** 布林值 → 布林值
  - **Description:** 邏輯非。

- ** == **
  - **類型與多載:** 任何 → 任何
  - **Description:** 相等。適用於任何類型的引數，即使類型並不相符。不同類型的值永遠不會彼此相等。

- **\!=**
  - **類型與多載:** 任何 → 任何
  - **Description:** 不相等；與相等完全相反 (請參閱上文)。

- ** < **
  - **類型與多載:** (長整數、長整數) → 布林值
  - **Description:** 長整數小於。

- ** <= **
  - **類型與多載:** (長整數、長整數) → 布林值
  - **Description:** 長整數小於等於。

- ** > **
  - **類型與多載:** (長整數、長整數) → 布林值
  - **Description:** 長整數大於。

- ** >= **
  - **類型與多載:** (長整數、長整數) → 布林值
  - **Description:** 長整數大於等於。

- **in**
  - **類型與多載:** (實體、實體) → 布林值 / **Description:** 階層成員資格 (自反：A 中的 A 一律為 true)。
  - **類型與多載:** (實體、集合(實體)) → 布林值 / **Description:** 階層成員資格：如果 (A 和 B) \|\| (C 中的 A) \|\| 則 [B, C, ...] 中的 A 為 true；如果集合包含非實體，則錯誤。

- **&&**
  - **類型與多載:** (布林值、布林值) → 布林值
  - **Description:** 邏輯和 (short-circuiting)。

- **\|\|**
  - **類型與多載:** (布林值、布林值) → 布林值
  - **Description:** 邏輯或 (short-circuiting)。

- **.exists()**
  - **類型與多載:** 實體 → 布林值
  - **Description:** 實體存在。

- **has**
  - **類型與多載:** (實體、屬性) → 布林值
  - **Description:** infix 運算子。e has f 測試記錄或實體 e 是否具有屬性 f 的繫結。如果 e 不存在或 e 存在但沒有屬性 f，則傳回 false。屬性可以表示為識別碼或字串常值。

- **like**
  - **類型與多載:** (字串、字串) → 布林值
  - **Description:** Infix 運算子。t like p 檢查文字 t 是否符合模式 p，其中可能包含符合 0 或多個任何字元的萬用字元 \*。為了符合 t 中的常值星形字元，您可以使用 p 中的特殊逸出字元序列 \\\*。

- **.hasTag()**
  - **類型與多載:** (實體、字串) → 布林值
  - **Description:** 檢查實體是否已套用指定標籤。

- **.getTag()**
  - **類型與多載:** (實體、字串) → 布林值
  - **Description:** 傳回指定標籤鍵的值。

- **.contains()**
  - **類型與多載:** (集合、任何) → 布林值
  - **Description:** 設定成員資格 (B 為 A 的元素)。

- **.containsAll()**
  - **類型與多載:** (集合、集合) → 布林值
  - **Description:** 測試集合 A 是否包含集合 B 中的所有元素。

- **.containsAny()**
  - **類型與多載:** (集合、集合) → 布林值
  - **Description:** 測試集合 A 是否包含集合 B 中的任何元素。



## 政策陳述式範例
<a name="policy-statement-examples"></a>

以下是政策陳述式範例。

```
// Users assuming IAM roles with a principal tag of "Elevated" can automatically access nodes tagged with the "Environment" key when the value equals "prod"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    // Verify IAM role principal tag
    context.iam.principalTags.getTag("AccessLevel") == "Elevated" &&
    
    // Verify the node has a tag with "Environment" tag key and a tag value of "prod"
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "prod"
};
```

```
// Identity Center users in the "Contractor" division can automatically access nodes tagged with the "Environment" key when the value equals "dev"
permit(principal, action == AWS::SSM::getTokenForInstanceAccess, resource)
when {
    // Verify that the user is part of the "Contractor" division
    principal.division == "Contractor" &&
    
    // Verify the node has a tag with "Environment" tag key and a tag value of "dev"
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "dev"
};
```

```
// Identity Center users in a specified group can automatically access nodes tagged with the "Environment" key when the value equals "Production"
permit(principal in AWS::IdentityStore::Group::"d4q81745-r081-7079-d789-14da1EXAMPLE",
    action == AWS::SSM::getTokenForInstanceAccess,
    resource)
when {
    resource.hasTag("Environment") &&
    resource.getTag("Environment") == "Production"
};
```