

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

# 微調政策的資源和條件區段
<a name="lambda-api-permissions-ref"></a>

您可以在 AWS Identity and Access Management (IAM) 政策中指定資源和條件，來限制使用者許可的範圍。政策中的每個動作都支援資源和條件類型組合，組合內容取決於動作的行為。

每個 IAM 政策陳述式授予在資源上執行動作的許可。當動作不在具名資源上執行動作，或是當您授予對所有資源執行動作的許可，政策中資源的值是萬用字元 (`*`)。對於許多動作，您可以透過指定資源的 Amazon Resource Name (ARN) 或符合多個資源的 ARN 模式，來限制使用者可以修改的資源。

根據資源類型，關於如何限制動作範圍的一般設計如下：
+ 函數 - 在函數上執行的動作可依據函數、版本或別名 ARN 限定於特定函數。
+ 事件來源映射 - 動作可依據 ARN 限定於特定事件來源映射資源。事件來源映射一律與函數相關聯。也可以使用 `lambda:FunctionArn` 條件，依據相關的函數限定動作。
+ 層 - 與 Layer 使用和許可相關的動作作用於層的某個版本。
+ 程式碼簽署組態 - 動作可依據 ARN 限定於特定程式碼簽署組態資源。
+ 標籤 - 使用標準標籤條件。如需詳細資訊，請參閱[使用 Lambda 中的屬性型存取控制](attribute-based-access-control.md)。

若要依照資源限制許可，請依照 ARN 指定資源。

**Lambda 資源 ARN 格式**
+ 函數 - `arn:aws:lambda:us-west-2:123456789012:function:my-function`
+ 函數版本 - `arn:aws:lambda:us-west-2:123456789012:function:my-function:1`
+ 函數別名 - `arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST`
+ 事件來源映射 - `arn:aws:lambda:us-west-2:123456789012:event-source-mapping:fa123456-14a1-4fd2-9fec-83de64ad683de6d47`
+ 層 - `arn:aws:lambda:us-west-2:123456789012:layer:my-layer`
+ 層版本 - `arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1`
+ 程式碼簽署組態 – `arn:aws:lambda:us-west-2:123456789012:code-signing-config:my-csc`

例如，以下政策允許使用者在 AWS 帳戶 `123456789012``my-function`中呼叫美國西部 （奧勒岡） AWS 區域中名為 的函數。

**Example 呼叫函數政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Invoke",
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function"
        }
    ]
}
```

此為特例，其中動作識別符 (`lambda:InvokeFunction`) 與 API 操作 ([Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)) 不同。對於其他動作，動作識別符就是開頭為 `lambda:` 的操作名稱。

**Topics**
+ [

## 了解政策中的條件區段
](#authorization-conditions)
+ [

## 參考政策資源區段中的函數
](#function-resources)
+ [

## 支援的 IAM 動作和函數行為
](#permissions-resources)

## 了解政策中的條件區段
<a name="authorization-conditions"></a>

條件是選用的政策元素，會套用額外的邏輯來判斷是否允許動作。除了所有動作皆支援的一般[條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)之外，Lambda 還會定義您可用來限制某些動作之其他參數值的條件類型。

例如，`lambda:Principal` 條件讓您可在函數的[資源型政策](access-control-resource-based.md)中，限制使用者可授予叫用存取權限的服務或帳號。以下政策會讓使用者可將許可授予 Amazon Simple Notiﬁcation Service (Amazon SNS) 主題以叫用名為 `test` 的函數。

**Example 管理函數政策許可**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageFunctionPolicy",
            "Effect": "Allow",
            "Action": [
                "lambda:AddPermission",
                "lambda:RemovePermission"
            ],
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:test:*",
            "Condition": {
                "StringEquals": {
                    "lambda:Principal": "sns.amazonaws.com"
                }
            }
        }
    ]
}
```

條件要求委託人是 Amazon SNS 而不是其他服務或帳戶。資源模式要求函數名稱是 `test` 並包含版本編號或別名。例如 `test:v1`。

如需 Lambda 和其他 AWS 服務的資源和條件的詳細資訊，請參閱*《服務授權參考*》中的 [AWS 服務的動作、資源和條件索引鍵](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。

## 參考政策資源區段中的函數
<a name="function-resources"></a>

您可以使用 Amazon Resource Name (ARN) 來參考政策陳述式中的 Lambda 函數。函數 ARN 的格式取決於您是參考整個函數 (不合格)、函數[版本](configuration-versions.md)或[別名](configuration-aliases.md) (合格)。

進行 Lambda API 呼叫時，使用者可以指定版本或別名，方法是在 [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html) `FunctionName` 參數中傳遞版本 ARN 或別名 ARN，或者在 [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html) `Qualifier` 參數中設定值。Lambda 會比較 IAM 政策中的資源元素與 API 呼叫中傳遞的 `FunctionName` 和 `Qualifier`，從而作出授權決策。如果不符，Lambda 會拒絕該請求。

無論是允許還是拒絕對函數執行操作，都必須在政策陳述式中使用正確的函數 ARN 類型，才能達到預期的結果。例如，如果您的政策引用了不合格的 ARN，Lambda 會接受參考不合格 ARN 的請求，但拒絕參考合格 ARN 的請求。

**注意**  
不能使用萬用字元 (\$1) 以讓帳戶 ID 相符。如需有關已接受語法的詳細資訊，請參閱 *IAM User Guide* 中的 [IAM JSON policy reference](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

**Example 允許叫用不合格的 ARN**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction"
        }
    ]
}
```

如果您的政策引用了特定合格的 ARN，Lambda 會接受參考該 ARN 的請求，但拒絕參考不合格 ARN 或不同的合格 ARN 的請求，例如 `myFunction:2`。

**Example 允許叫用特定的合格 ARN**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1"
        }
    ]
}
```

如果您的政策使用 `:*` 參考任何合格的 ARN，Lambda 會接受任何合格的 ARN，但拒絕參考不合格 ARN 的請求。

**Example 允許叫用任何合格的 ARN**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*"
        }
    ]
}
```

如果您的政策使用 `*` 參考任何 ARN，Lambda 會接受任何合格或不合格的 ARN。

**Example 允許叫用任何合格或不合格的 ARN**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*"
        }
    ]
}
```

## 支援的 IAM 動作和函數行為
<a name="permissions-resources"></a>

 動作定義了可透過 IAM 政策許可的項目。若要查看 Lambda 中支援的動作清單，請參閱《服務授權參考》中的 [Actions, resources, and condition keys for AWS Lambda](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awslambda.html)。在大多數情況下，當 IAM 動作許可某個 Lambda API 動作時，該 IAM 動作的名稱會與 Lambda API 動作的名稱相同，但以下情況除外：


| API 動作 | IAM 動作 | 
| --- | --- | 
| [Invoke](https://docs.aws.amazon.com//lambda/latest/api/API_Invoke.html) | lambda:InvokeFunction | 
| [GetLayerVersion](https://docs.aws.amazon.com//lambda/latest/api/API_GetLayerVersion.html) [GetLayerVersionByArn](https://docs.aws.amazon.com//lambda/latest/api/API_GetLayerVersionByArn.html) | lambda:GetLayerVersion | 

除了 [Service Authorization Reference](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awslambda.html) 中定義的資源和條件之外，Lambda 還針對特定動作支援下列資源和條件。其中許多與政策資源區段中的參考函數有關。您可依據函數、版本或別名 ARN，將在函數上操作的動作限於特定函數，如下表所述。


| Action | 資源 | 條件 | 
| --- | --- | --- | 
|  [AddPermission](https://docs.aws.amazon.com/lambda/latest/api/API_AddPermission.html) [RemovePermission](https://docs.aws.amazon.com/lambda/latest/api/API_RemovePermission.html) [調用](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)：(**許可：**`lambda:InvokeFunction`)  |  函式版本 函式別名  |  N/A  | 
|  [UpdateFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionConfiguration.html)  |  N/A  |  `lambda:CodeSigningConfigArn`  | 
|  [CreateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_CreateFunctionUrlConfig.html) [DeleteFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionUrlConfig.html) [GetFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionUrlConfig.html) [UpdateFunctionUrlConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionUrlConfig.html)  |  函式別名  |  N/A  | 