

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

# 授予其他 AWS 實體存取 Lambda 函數的權限
<a name="permissions-granting-access"></a>

若要授予其他 AWS 帳戶、組織和服務存取 Lambda 資源的許可，您有幾個選項：
+ 您可以使用[身分型政策](access-control-identity-based.md)授予其他使用者對 Lambda 資源的存取權。以身分為基礎的政策可直接套用到使用者或與使用者相關連的群組和角色。
+ 您可以使用[以資源為基礎的政策](access-control-resource-based.md)，為其他帳戶提供存取 Lambda 資源的 AWS 服務 許可。當使用者嘗試存取 Lambda 資源時，Lambda 會同時考慮身分型政策 (針對使用者)，以及以資源型政策 (針對資源)。當 Amazon Simple Storage Service (Amazon S3) 之類的 AWS 服務呼叫您的 Lambda 函數時，Lambda 只會考慮以資源為基礎的政策。
+ 您可以使用[屬性型存取控制 (ABAC)](attribute-based-access-control.md) 模型來控制對 Lambda 函數的存取。透過 ABAC，您可以將標籤連接至 Lambda 函數、在特定 API 請求中傳遞標籤，或將其連接至提出請求的 IAM 主體。在 IAM 政策的條件元素中指定相同的標籤以控制函數存取。

為了協助您微調最低權限存取許可，Lambda 提供了一些其他條件，可供您包含在政策中。如需詳細資訊，請參閱[微調政策的資源和條件區段](lambda-api-permissions-ref.md)。

# Lambda 適用的身分型 IAM 政策
<a name="access-control-identity-based"></a>

您可以在 AWS Identity and Access Management (IAM) 中使用身分型政策來授予帳戶中的使用者 Lambda 的存取權。身分型政策可套用至使用者、使用者群組或角色。您可以授予另一個帳戶的使用者許可，讓他們可以擔任您帳戶中的角色並存取 Lambda 資源。

Lambda 提供 AWS 受管政策，授予 Lambda API 動作的存取權，以及在某些情況下，其他用於開發和管理 Lambda 資源的 AWS 服務存取權。Lambda 會視需要更新這些受管政策，來確保您的使用者可在新功能發行時進行存取。
+ [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_FullAccess.html) - 對於用於開發和維護 Lambda 資源的 Lambda 動作和其他 AWS 服務，授予完整存取權限。
+ [AWSLambda\$1ReadOnlyAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_ReadOnlyAccess.html) - 授予 Lambda 資源的唯讀存取權限。
+ [AWSLambdaRole](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambdaRole.html) - 授予調用 Lambda 函數的許可。

AWS 受管政策授予 API 動作的許可，而不限制使用者可以修改的 Lambda 函數或層。如需進行更精細的控制，您可以建立自己的政策，來限制使用者的許可範圍。

**Topics**
+ [授予使用者對 Lambda 函數的存取權](permissions-user-function.md)
+ [授予使用者對 Lambda 層的存取權](permissions-user-layer.md)

# 授予使用者對 Lambda 函數的存取權
<a name="permissions-user-function"></a>

使用[身分型政策](access-control-identity-based.md)以允許使用者、使用者群組或角色對 Lambda 函數執行操作。

**注意**  
對於定義為容器映像的函數，存取映像的使用者許可必須在 Amazon Elastic Container Registry (Amazon ECR) 中設定。如需範例，請參閱 [Amazon ECR 儲存庫政策](images-create.md#configuration-images-permissions)。

以下顯示具受限範圍之許可政策的範例。這可讓使用者建立和管理以指定字首 (`intern-`) 命名並以指定執行角色設定的 Lambda 函數。

**Example 函數開發政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ReadOnlyPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetEventSourceMapping",
                "lambda:GetFunction",
                "lambda:GetFunctionConfiguration",
                "lambda:GetFunctionCodeSigningConfig",
                "lambda:GetFunctionConcurrency",
                "lambda:ListEventSourceMappings",
                "lambda:ListFunctions",
                "lambda:ListTags",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Sid": "DevelopFunctions",
            "Effect": "Allow",
            "NotAction": [
                "lambda:AddPermission",
                "lambda:PutFunctionConcurrency"
            ],
            "Resource": "arn:aws:lambda:*:*:function:intern-*"
        },
        {
            "Sid": "DevelopEventSourceMappings",
            "Effect": "Allow",
            "Action": [
                "lambda:DeleteEventSourceMapping",
                "lambda:UpdateEventSourceMapping",
                "lambda:CreateEventSourceMapping"
            ],
            "Resource": "*",
            "Condition": {
                "ArnLike": {
                    "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                }
            }
        },
        {
            "Sid": "PassExecutionRole",
            "Effect": "Allow",
            "Action": [
                "iam:ListRolePolicies",
                "iam:ListAttachedRolePolicies",
                "iam:GetRole",
                "iam:GetRolePolicy",
                "iam:PassRole",
                "iam:SimulatePrincipalPolicy"
            ],
            "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
        },
        {
            "Sid": "ViewLogs",
            "Effect": "Allow",
            "Action": [
                "logs:*"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
        }
    ]
}
```

會根據許可支援的[資源和條件](lambda-api-permissions-ref.md)來將此政策中的許可組織為陳述式。
+ `ReadOnlyPermissions` - Lambda 主控台會在您瀏覽和檢視函數時使用這些許可。他們不支援資源模式或條件。

  ```
              "Action": [
                  "lambda:GetAccountSettings",
                  "lambda:GetEventSourceMapping",
                  "lambda:GetFunction",
                  "lambda:GetFunctionConfiguration",           
                  "lambda:GetFunctionCodeSigningConfig",
                  "lambda:GetFunctionConcurrency",                
                  "lambda:ListEventSourceMappings",
                  "lambda:ListFunctions",      
                  "lambda:ListTags",
                  "iam:ListRoles"
              ],
              "Resource": "*"
  ```
+ `DevelopFunctions` - 使用會對字首為 `intern-` 的函數進行操作的 Lambda 動作 (除了 `AddPermission` 和 `PutFunctionConcurrency`)。`AddPermission` 會在該函數中修改[以資源為基礎的政策](access-control-resource-based.md)，並且可能會產生安全隱憂。`PutFunctionConcurrency` 會為某函數保留擴展容量並可從其他函數取走容量。

  ```
              "NotAction": [
                  "lambda:AddPermission",
                  "lambda:PutFunctionConcurrency"
              ],
              "Resource": "arn:aws:lambda:*:*:function:intern-*"
  ```
+ `DevelopEventSourceMappings` – 在字首為 `intern-` 的函數上管理事件來源映射。這些動作會在事件來源映射上操作，但您可以使用*條件*來依函數進行限制。

  ```
              "Action": [
                  "lambda:DeleteEventSourceMapping",
                  "lambda:UpdateEventSourceMapping",
                  "lambda:CreateEventSourceMapping"
              ],
              "Resource": "*",
              "Condition": {
                  "StringLike": {
                      "lambda:FunctionArn": "arn:aws:lambda:*:*:function:intern-*"
                  }
              }
  ```
+ `PassExecutionRole` - 檢視並僅傳遞名為 `intern-lambda-execution-role` 的角色，必須由具有 IAM 許可的使用者建立和管理該角色。當您將執行角色指派至函數時就會用到 `PassRole`。

  ```
              "Action": [
                  "iam:ListRolePolicies",
                  "iam:ListAttachedRolePolicies",
                  "iam:GetRole",
                  "iam:GetRolePolicy",
                  "iam:PassRole",
                  "iam:SimulatePrincipalPolicy"
              ],
              "Resource": "arn:aws:iam::*:role/intern-lambda-execution-role"
  ```
+ `ViewLogs` - 使用 CloudWatch Logs 來檢視字首為 `intern-` 的函數的日誌。

  ```
              "Action": [
                  "logs:*"
              ],
              "Resource": "arn:aws:logs:*:*:log-group:/aws/lambda/intern-*"
  ```

此政策可讓使用者開始使用 Lambda，而不需使其他使用者的資源承受風險。它不允許使用者設定由 觸發的函數或呼叫其他 AWS 服務，這需要更廣泛的 IAM 許可。這也不包含對不支援 CloudWatch 和 X-Ray 這類範圍受限政策之服務的許可。對這些服務使用唯讀政策來為使用者提供指標和追蹤資料的存取。

當您為函數設定觸發時，您需要存取 ，才能使用叫用函數 AWS 的服務。例如，若要設定 Amazon S3 觸發，您需要使用 Amazon S3 動作的許可來管理儲存貯體通知。這些許可包含在 [AWSLambda\$1FullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSLambda_FullAccess.html) 受管政策中。

# 授予使用者對 Lambda 層的存取權
<a name="permissions-user-layer"></a>

使用[身分型政策](access-control-identity-based.md)以允許使用者、使用者群組或角色對 Lambda 層執行操作。下列政策授予使用者建立 layer 以及搭配函數使用的許可。資源模式允許使用者使用任何 AWS 區域 和任何 layer 版本，只要 layer 的名稱以 開頭`test-`即可。

**Example 圖層開發政策**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PublishLayers",
            "Effect": "Allow",
            "Action": [
                "lambda:PublishLayerVersion"
            ],
            "Resource": "arn:aws:lambda:*:*:layer:test-*"
        },
        {
            "Sid": "ManageLayerVersions",
            "Effect": "Allow",
            "Action": [
                "lambda:GetLayerVersion",
                "lambda:DeleteLayerVersion"
            ],
            "Resource": "arn:aws:lambda:*:*:layer:test-*:*"
        }
    ]
}
```

您也可以使用 `lambda:Layer` 條件來在函數建立和設定期間強制執行 layer 的使用。例如，您可以防止使用者使用其他帳戶發佈的 layer。下列政策會將條件新增至 `CreateFunction`，且 `UpdateFunctionConfiguration` 動作需要來自帳戶 `123456789012` 指定的任何 layer。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ConfigureFunctions",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:UpdateFunctionConfiguration"
            ],
            "Resource": "*",
            "Condition": {
                "ForAllValues:StringLike": {
                    "lambda:Layer": [
                        "arn:aws:lambda:*:123456789012:layer:*:*"
                    ]
                }
            }
        }
    ]
}
```

------

若要確保條件是否套用，請確認沒有其他陳述式授予使用者這些動作的許可。

# 在 Lambda 中檢視資源型 IAM 政策
<a name="access-control-resource-based"></a>

Lambda 支援對 Lambda 函數和層使用資源型許可政策。您可以使用資源型政策，將存取權授予其他 [AWS 帳戶](permissions-function-cross-account.md)、[組織](permissions-function-organization.md)或[服務](permissions-function-services.md)。以資源為基礎的政策適用於單一函式、版本、別名或 layer 版本。

------
#### [ Console ]

**檢視函式以資源為基礎的政策**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇一個函數。

1. 選擇 **Configuration** (組態)，然後選擇 **Permissions** (權限)。

1. 向下捲動至 **Resource-based policy (資源型政策)**，然後選擇 **View policy document (檢視政策文件)**。以資源為基礎的政策會顯示當另一個帳戶 AWS 或服務嘗試存取 函數時所套用的許可。下列範例顯示的陳述式允許 Amazon S3 針對帳戶 `123456789012` 中名稱為 `amzn-s3-demo-bucket` 的儲存貯體，叫用名為 `my-function` 的函數。  
**Example 資源型政策**    
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "default",
       "Statement": [
           {
               "Sid": "lambda-allow-s3-my-function",
               "Effect": "Allow",
               "Principal": {
                 "Service": "s3.amazonaws.com"
               },
               "Action": "lambda:InvokeFunction",
               "Resource":  "arn:aws:lambda:us-east-2:123456789012:function:my-function",
               "Condition": {
                 "StringEquals": {
                   "AWS:SourceAccount": "123456789012"
                 },
                 "ArnLike": {
                   "AWS:SourceArn": "arn:aws:s3:::amzn-s3-demo-bucket"
                 }
               }
           }
        ]
   }
   ```

------
#### [ AWS CLI ]

若要檢查函式的以資源為基礎的政策，請使用 `get-policy` 命令。

```
aws lambda get-policy \
  --function-name my-function \
  --output text
```

您應該會看到下列輸出：

****  

```
{"Version":"2012-10-17",		 	 	 "Id":"default","Statement":[{"Sid":"sns","Effect":"Allow","Principal":{"Service":"s3.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function","Condition":{"ArnLike":{"AWS:SourceArn":"arn:aws:sns:us-east-2:123456789012:lambda*"}}}]}
```

針對版本和別名，在函式名稱的後方附加版本編號或別名。

```
aws lambda get-policy --function-name my-function:PROD
```

若要將許可從函式中移除，請使用 `remove-permission`。

```
aws lambda remove-permission \
  --function-name example \
  --statement-id sns
```

使用 `get-layer-version-policy` 指令檢視層級上的許可。

```
aws lambda get-layer-version-policy \
  --layer-name my-layer \
  --version-number 3 \
  --output text
```

您應該會看到下列輸出：

```
b0cd9796-d4eb-4564-939f-de7fe0b42236    {"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-west-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"
```

使用 `remove-layer-version-permission` 以從策略中移除陳述式。

```
aws lambda remove-layer-version-permission --layer-name my-layer --version-number 3 --statement-id engineering-org
```

------

## 支援的 API 動作
<a name="permissions-resource-api"></a>

下列 Lambda API 動作支援資源型政策：
+ [CreateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_CreateAlias.html)
+ [DeleteAlias](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteAlias.html)
+ [DeleteFunction](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunction.html)
+ [DeleteFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionConcurrency.html)
+ [DeleteFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteFunctionEventInvokeConfig.html)
+ [DeleteProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteProvisionedConcurrencyConfig.html)
+ [GetAlias](https://docs.aws.amazon.com/lambda/latest/api/API_GetAlias.html)
+ [GetFunction](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunction.html)
+ [GetFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConcurrency.html)
+ [GetFunctionConfiguration](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionConfiguration.html)
+ [GetFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetFunctionEventInvokeConfig.html)
+ [GetPolicy](https://docs.aws.amazon.com/lambda/latest/api/API_GetPolicy.html)
+ [GetProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_GetProvisionedConcurrencyConfig.html)
+ [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html)
+ [InvokeFunctionUrl](urls-auth.md) (僅限許可)
+ [ListAliases](https://docs.aws.amazon.com/lambda/latest/api/API_ListAliases.html)
+ [ListFunctionEventInvokeConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListFunctionEventInvokeConfigs.html)
+ [ListProvisionedConcurrencyConfigs](https://docs.aws.amazon.com/lambda/latest/api/API_ListProvisionedConcurrencyConfigs.html)
+ [ListTags](https://docs.aws.amazon.com/lambda/latest/api/API_ListTags.html)
+ [ListVersionsByFunction](https://docs.aws.amazon.com/lambda/latest/api/API_ListVersionsByFunction.html)
+ [PublishVersion](https://docs.aws.amazon.com/lambda/latest/api/API_PublishVersion.html)
+ [PutFunctionConcurrency](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionConcurrency.html)
+ [PutFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutFunctionEventInvokeConfig.html)
+ [PutProvisionedConcurrencyConfig](https://docs.aws.amazon.com/lambda/latest/api/API_PutProvisionedConcurrencyConfig.html)
+ [TagResource](https://docs.aws.amazon.com/lambda/latest/api/API_TagResource.html)
+ [UntagResource](https://docs.aws.amazon.com/lambda/latest/api/API_UntagResource.html)
+ [UpdateAlias](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateAlias.html)
+ [UpdateFunctionCode](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionCode.html)
+ [UpdateFunctionEventInvokeConfig](https://docs.aws.amazon.com/lambda/latest/api/API_UpdateFunctionEventInvokeConfig.html)

# 授予 Lambda 函數存取權 AWS 服務
<a name="permissions-function-services"></a>

當您[使用 AWS 服務來叫用函數](lambda-services.md)時，您可以在以資源為基礎的政策的陳述式中授予許可。您可以將陳述式套用至整個函數，或將陳述式限制在單一版本或別名。

**注意**  
當您透過Lambda 主控台將觸發新增至函數時，主控台會更新函數的以資源為基礎的政策來允許服務進行叫用。若要將許可授予無法在 Lambda 主控台中使用的其他帳戶或服務，您可使用 AWS CLI。

使用 [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 命令新增陳述式。最簡單的以資源為基礎的政策陳述式可讓服務叫用函式。下列命令可授予 Amazon Simple Notification Service 調用名為 `my-function` 之函數的許可。

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id sns \
  --principal sns.amazonaws.com \
  --output text
```

您應該會看到下列輸出：

```
{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
```

這可讓 Amazon SNS 呼叫函數的 [Invoke](https://docs.aws.amazon.com/lambda/latest/api/API_Invoke.html) API 動作，但不會限制會觸發調用的 Amazon SNS 主題。若要確保您的函式只會被特定的資源叫用，請使用 `source-arn` 選項來指定資源的 Amazon Resource Name (ARN)。下列命令僅允許 Amazon SNS 為名為 `my-topic` 的主題訂閱叫用函數。

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id sns-my-topic \
  --principal sns.amazonaws.com \
  --source-arn arn:aws:sns:us-east-2:123456789012:my-topic
```

有些服務可在不同的帳戶中叫用函式。如果您指定的來源 ARN 中有帳戶 ID，您可以放心。然而，對於 Amazon S3，來源是一種儲存貯體，其 ARN 沒有帳戶 ID。您可以刪除該儲存貯體，且其他帳戶可使用相同的名稱建立儲存貯體。透過您的帳戶 ID 使用 `source-account` 選項來確保只有帳戶中的資源可叫用該函式。

```
aws lambda add-permission \
  --function-name my-function \
  --action lambda:InvokeFunction \
  --statement-id s3-account \
  --principal s3.amazonaws.com \
  --source-arn arn:aws:s3:::amzn-s3-demo-bucket \
  --source-account 123456789012
```

# 授予組織對函數的存取
<a name="permissions-function-organization"></a>

若要向 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 中的組織授予許可，需將組織 ID 指定為 `principal-org-id`。下列 [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 命令將調用存取權授予組織 `o-a1b2c3d4e5f` 中的所有使用者。

```
aws lambda add-permission \
  --function-name example \
  --statement-id PrincipalOrgIDExample \
  --action lambda:InvokeFunction \
  --principal * \
  --principal-org-id o-a1b2c3d4e5f
```

**注意**  
在此命令中，`Principal` 是 `*`。這意味著組織 `o-a1b2c3d4e5f` 中的所有使用者都會取得函數叫用許可。如果您將 AWS 帳戶 或 角色指定為 `Principal`，則只有該委託人才能取得函數叫用許可，但前提是他們也是`o-a1b2c3d4e5f`組織的一部分。

此命令建立類似以下的資源型政策：

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "PrincipalOrgIDExample",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "lambda:InvokeFunction",
            "Resource": "arn:aws:lambda:us-east-2:123456789012:function:example",
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalOrgID": "o-a1b2c3d4e5f"
                }
            }
        }
    ]
}
```

------

如需詳細資訊，請參閱《IAM 使用者指南》**中的 [aws:PrincipalOrgID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principalorgid)。

# 授予 Lambda 函數對其他帳戶的存取權
<a name="permissions-function-cross-account"></a>

若要與另一個 共用函數 AWS 帳戶，請將跨帳戶許可陳述式新增至函數[的資源型政策](access-control-resource-based.md)。執行 [add-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-permission.html) 命令，並將帳戶 ID 指定為 `principal`。以下範例會授予帳戶 `111122223333` 以 `prod` 別名叫用 `my-function` 的許可。

```
aws lambda add-permission \
  --function-name my-function:prod \
  --statement-id xaccount \
  --action lambda:InvokeFunction \
  --principal 111122223333 \
  --output text
```

您應該會看到下列輸出：

```
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-1:123456789012:function:my-function"}
```

以資源為基礎的政策會授予其他帳戶存取函數的許可，但不允許該帳戶中的使用者超過其許可。另一個帳戶中的使用者必須具有相對應的[使用者許可](access-control-identity-based.md)才能使用 Lambda API。

若要限制另一個帳戶中使用者或角色的存取，請指定身分的完整 ARN 作為主體。例如：`arn:aws:iam::123456789012:user/developer`。

[別名](configuration-aliases.md)會限制其他帳戶可叫用的版本。這需要其他帳戶在函式 ARN 中包含別名。

```
aws lambda invoke \
  --function-name arn:aws:lambda:us-east-2:123456789012:function:my-function:prod out
```

您應該會看到下列輸出：

```
{
    "StatusCode": 200,
    "ExecutedVersion": "1"
}
```

然後，函數擁有者可以更新別名以指向新版本，而無需呼叫者變更他們叫用函數的方式。這可確保另一個帳戶不需要變更其程式碼來使用新版本，而且它只具有叫用與別名關聯之函數版本的許可。

您可以為在現有函式上操作之大部分 API 動作授予跨帳戶存取。例如，您可以授予對 `lambda:ListAliases` 的存取，來讓帳戶取得別名的清單，或 `lambda:GetFunction` 讓他們下載函式程式碼。個別新增每個許可，或使用 `lambda:*` 來授予對指定函式進行所有動作的存取。

若要授予其他帳戶多個動作或是不在函數上操作之動作的許可，我們建議您請使用 [IAM 角色](access-control-identity-based.md)。

# 將 Lambda 層存取權授予其他帳戶
<a name="permissions-layer-cross-account"></a>

若要與另一個 共用 layer AWS 帳戶，請將跨帳戶許可陳述式新增至 layer [的資源型政策](access-control-resource-based.md)。執行 [add-layer-version-permission](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/add-layer-version-permission.html) 命令，並將帳戶 ID 指定為 `principal`。在各陳述式中，您可將許可授予單一帳戶、所有帳戶或 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 中的某個組織。

以下列範例會授予帳戶 111122223333 存取 `bash-runtime` layer 第 2 版的許可。

```
aws lambda add-layer-version-permission \
  --layer-name bash-runtime \
  --version-number 2 \  
  --statement-id xaccount \
  --action lambda:GetLayerVersion \
  --principal 111122223333 \
  --output text
```

您應該會看到類似下列的輸出：

```
{"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::111122223333:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-1:123456789012:layer:bash-runtime:2"}
```

許可僅適用於單一層版本。每次建立新的層版本時均需重複此程序。

若要將許可授予 [AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_introduction.html) 組織中的所有帳戶，請使用 `organization-id` 選項。以下範例授予組織 `o-t194hfs8cz` 內的所有帳戶使用第 3 版 `my-layer` 的許可。

```
aws lambda add-layer-version-permission \
  --layer-name my-layer \
  --version-number 3 \
  --statement-id engineering-org \
  --principal '*' \
  --action lambda:GetLayerVersion \
  --organization-id o-t194hfs8cz \
  --output text
```

您應該會看到下列輸出：

```
{"Sid":"engineering-org","Effect":"Allow","Principal":"*","Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3","Condition":{"StringEquals":{"aws:PrincipalOrgID":"o-t194hfs8cz"}}}"
```

若要授予多個帳戶或組織許可，您必須新增多個陳述式。

# 使用 Lambda 中的屬性型存取控制
<a name="attribute-based-access-control"></a>

搭配[屬性型存取控制 (ABAC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)，您可以使用標籤來控制對 Lambda 資源的存取。您可以將標籤連接至特定 Lambda 資源、將其連接至特定 API 請求，或將其連接至提出請求的 AWS Identity and Access Management (IAM) 委託人。如需如何 AWS 授予屬性型存取的詳細資訊，請參閱《*IAM 使用者指南*》中的[使用標籤控制對 AWS 資源的存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html)。

您可以使用 ABAC 來[授予最低權限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)，無需在 IAM 政策中指定 Amazon Resource Name (ARN) 或 ARN 模式。可以在 IAM 政策 的[條件元素](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition.html)中指定標籤，來控制存取。使用 ABAC 可以更輕鬆地擴展，因為在建立新資源時，您無需更新 IAM 政策，而是將標籤新增至新資源以控制存取。

在 Lambda 中，標籤適用於以下資源：
+ 函數 – 如需標記函數的詳細資訊，請參閱[在 Lambda 函數上使用標籤](configuration-tags.md)。
+ 程式碼簽署組態 – 如需標記程式碼簽署組態的詳細資訊，請參閱[在程式碼簽署組態上使用標籤](tags-csc.md)。
+ 事件來源映射 – 如需標記事件來源映射的詳細資訊，請參閱[在事件來源映射上使用標籤](tags-esm.md)。

層不支援標籤。

您可以使用以下條件索引鍵，根據標籤撰寫 IAM 政策規則：
+ [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag)：依據連接至 Lambda 資源的標籤來控制存取。
+ [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)：要求請求中有標籤，例如在建立新函數時。
+ [aws:PrincipalTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-principaltag)：依據連接至其 IAM [使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_users.html) 或[角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_tags_roles.html)的標籤，控制 IAM 主體 (提出請求者) 允許執行的操作。
+  [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)：控制可否於請求中使用特定標籤索引鍵。

 只能為支援它們的動作指定條件。如需每個 Lambda 動作所支援的條件清單，請參閱《服務授權參考》中的 [Actions, resources, and condition keys for AWS Lambda](https://docs.aws.amazon.com//service-authorization/latest/reference/list_awslambda.html)。如需 **aws：ResourceTag/tag-key** 支援，請參閱「由 定義的資源類型」 AWS Lambda。如需 **aws：RequestTag/tag-key** 和 **aws：TagKeys** 支援，請參閱「由 定義的動作」 AWS Lambda。

**Topics**
+ [依標籤保護您的函數](attribute-based-access-control-example.md)

# 依標籤保護您的函數
<a name="attribute-based-access-control-example"></a>

以下步驟會示範使用 ABAC 設定函數許可的一種方法。在此範例案例中，您將會建立四個 IAM 許可政策。然後，您會將這些政策連接至新的 IAM 角色。最後，您將建立 IAM 使用者，並授予該使用者擔任新角色的許可。

**Topics**
+ [先決條件](#abac-prerequisites)
+ [步驟 1：要求新函數具有標籤](#require-tag-on-create)
+ [步驟 2：依據連接至 Lambda 函數和 IAM 主體的標籤來允許動作](#restrict-actions-function-tags)
+ [步驟 3：授予 List 許可](#abac-list-permissions)
+ [步驟 4：授予 IAM 許可](#abac-iam-permissions)
+ [步驟 5：建立 IAM 角色](#abac-create-role)
+ [步驟 6：建立 IAM 使用者](#abac-create-user)
+ [步驟 7：測試許可](#abac-test)
+ [步驟 8：清理資源](#abac-clean-up)

## 先決條件
<a name="abac-prerequisites"></a>

請確定您擁有 [Lambda 執行角色](lambda-intro-execution-role.md)。您將會在授予 IAM 許可以及建立 Lambda 函數時使用此角色。

## 步驟 1：要求新函數具有標籤
<a name="require-tag-on-create"></a>

在搭配使用 ABAC 和 Lambda 時，最佳實務是要求所有函數都具有標籤。這有助於確保您的 ABAC 許可政策如預期般運作。

[建立與以下範例類似的 IAM 政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)。此政策會使用 [aws:RequestTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag)、[aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 與 [aws:TagKeys](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) 條件金鑰，要求新建立的函式以及建立這些函式的 IAM 主體都必須具有 `project` 標籤。`ForAllValues` 修飾詞會確保 `project` 是唯一受允許的標籤。如果您不納入 `ForAllValues` 修飾詞，則只要使用者也傳遞 `project`，其便也可新增其他標籤至函數。

**Example – 要求新函數具有標籤**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:TagResource"
      ],
      "Resource": "arn:aws:lambda:*:*:function:*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/project": "${aws:PrincipalTag/project}",
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": "project"
        }
      }
    }
  }
```

## 步驟 2：依據連接至 Lambda 函數和 IAM 主體的標籤來允許動作
<a name="restrict-actions-function-tags"></a>

使用 [aws:ResourceTag/tag-key](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag) 條件索引鍵來建立第二個 IAM 政策，以要求主體的標籤與連接至函數的標籤相符。以下範例政策會允許具有 `project` 標籤的主體呼叫具有 `project` 標籤的函數。如果函數有任何其他標籤，則會該動作將遭拒。

**Example – 要求函數和 IAM 主體的標籤相符**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Action": [
          "lambda:InvokeFunction",
          "lambda:GetFunction"
        ],
        "Resource": "arn:aws:lambda:*:*:function:*",
        "Condition": {
          "StringEquals": {
            "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
          }
        }
      }
    ]
  }
```

## 步驟 3：授予 List 許可
<a name="abac-list-permissions"></a>

建立允許主體列出 Lambda 函數和 IAM 角色的政策。此政策會允許主體在主控台以及呼叫 API 動作時查看所有 Lambda 函數和 IAM 角色。

**Example – 授予 Lambda 和 IAM 的 List 許可**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "AllResourcesLambdaNoTags",
        "Effect": "Allow",
        "Action": [
          "lambda:GetAccountSettings",
          "lambda:ListFunctions",
          "iam:ListRoles"
        ],
        "Resource": "*"
      }
    ]
  }
```

## 步驟 4：授予 IAM 許可
<a name="abac-iam-permissions"></a>

建立允許 **iam:PassRole** 的政策。在您將執行角色指派給函數時，便會需要此許可。在以下範例政策中，用您 Lambda 執行角色的 ARN 來取代範例 ARN。

**注意**  
請勿將政策中的 `ResourceTag` 條件金鑰與 `iam:PassRole` 動作搭配使用。您不能使用該 IAM 角色的標籤來控制可傳遞該角色的人員。如需將角色傳遞至服務所需的許可的詳細資訊，請參閱[授予使用者將角色傳遞至 AWS 服務的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。

**Example – 授予傳遞執行角色的許可**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
      {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
          "iam:PassRole"
        ],
        "Resource": "arn:aws:iam::111122223333:role/lambda-ex"
      }
    ]
  }
```

## 步驟 5：建立 IAM 角色
<a name="abac-create-role"></a>

最佳實務為[使用角色來委派許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#delegate-using-roles)。[建立名為 `abac-project-role` 的 IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html#roles-creatingrole-user-console)：
+ 在**步驟 1：選取可信任實體**時：選擇 **AWS account** ( 帳戶)，然後選擇 **This account** (此帳戶)。
+ 在**步驟 2：新增許可**時：連接您於前一步中建立的四個 IAM 政策。
+ 在**步驟 3：命名、檢閱和建立**時：選擇 **Add tag** (新增標籤)。在 **Key** (索引鍵) 欄位，輸入 `project`。請勿輸入**值**。

## 步驟 6：建立 IAM 使用者
<a name="abac-create-user"></a>

[建立名為 `abac-test-user` 的 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console)。在 **Set permissions** (設定許可) 區段中，選擇 **Attach existing policies directly** (直接連接現有政策)，接著選擇 **Create policy** (建立政策)。輸入以下政策定義。以您的 [AWS 帳戶 ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html#FindingYourAccountIdentifiers) 來取代 *111122223333*。此政策允許 `abac-test-user` 擔任 `abac-project-role`。

**Example – 允許 IAM 使用者擔任 ABAC 角色**  

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": {
      "Effect": "Allow",
      "Action": "sts:AssumeRole",
      "Resource": "arn:aws:iam::111122223333:role/abac-project-role"
    }
  }
```

------

## 步驟 7：測試許可
<a name="abac-test"></a>

1. 以 身分登入 AWS 主控台`abac-test-user`。如需詳細資訊，請參閱[以 IAM 使用者身分登入](https://docs.aws.amazon.com/IAM/latest/UserGuide/console.html#user-sign-in-page)。

1. 切換到 `abac-project-role` 角色。如需詳細資訊，請參閱[切換到角色 (主控台)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)。

1. [建立 Lambda 函數](configuration-tags.md#using-tags-with-the-console)。
   + 在 **Permissions** (許可) 下，選擇 **Change default execution role** (變更預設執行角色)，然後在 **Execution role** (執行角色) 中選擇 **Use an existing role** (使用現有角色)。選擇與您在 [步驟 4：授予 IAM 許可](#abac-iam-permissions) 中使用的相同執行角色。
   + 在 **Advanced settings** (進階設定)下，選擇 **Enable tags** (啟用標籤)，然後選擇 **Add new tag** (新增標籤)。在 **Key** (索引鍵) 欄位，輸入 `project`。請勿輸入**值**。

1. [測試函數](testing-functions.md)。

1. 建立第二個 Lambda 函數，並新增一個不同的標籤，例如 `environment`。此操作應會失敗，因為您在 [步驟 1：要求新函數具有標籤](#require-tag-on-create) 中建立的 ABAC 政策僅允許主體建立具有 `project` 標籤的函數。

1. 建立無標籤的第三個函數。此操作應會失敗，因為您在 [步驟 1：要求新函數具有標籤](#require-tag-on-create) 中建立的 ABAC 政策不允許主體建立無標籤的函數。

此授權策略允許您控制存取，且無需為每個新使用者建立新政策。若要將授予新使用者存取權限，只需要向其授予擔任與其受指派專案相對應角色的許可。

## 步驟 8：清理資源
<a name="abac-clean-up"></a>

**刪除 IAM 角色**

1. 開啟 IAM 主控台中的[角色頁面](https://console.aws.amazon.com/iam/home#/roles)。

1. 選取您在[步驟 5](#abac-create-role) 中建立的角色。

1. 選擇 **刪除**。

1. 若要確認刪除，請在文字輸入欄位中輸入角色名稱。

1. 選擇 **刪除**。

**若要刪除 IAM 使用者**

1. 開啟 IAM 主控台的[使用者頁面](https://console.aws.amazon.com/iam/home#/users)。

1. 選取您在[步驟 6](#abac-create-user) 中建立的 IAM 使用者。

1. 選擇 **刪除**。

1. 若要確認刪除，請在文字輸入欄位中輸入使用者名稱。

1. 選擇**刪除使用者**。

**若要刪除 Lambda 函數**

1. 開啟 Lambda 主控台中的 [函數頁面](https://console.aws.amazon.com/lambda/home#/functions)。

1. 選擇您建立的函數。

1. 選擇 **Actions** (動作)、**Delete** (刪除)。

1. 在文字輸入欄位中輸入 **confirm**，然後選擇 **刪除** 。

# 微調政策的資源和條件區段
<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  | 