本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
微調政策的「資源」和「條件」部分
您可以在 AWS Identity and Access Management (IAM) 原則中指定資源和條件,以限制使用者權限的範圍。政策中的每個動作都支援資源和條件類型組合,組合內容取決於動作的行為。
每個IAM原則陳述式都會授與對資源執行動作的權限。當動作不在具名資源上執行動作,或是當您授予對所有資源執行動作的許可,政策中資源的值是萬用字元 (*
)。對於許多動作,您可以透過指定資源的 Amazon 資源名稱 (ARN) 或符合多個資源的ARN模式來限制使用者可以修改的資源。
若要依資源限制權限,請依據指定資源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
例如,下列原則允許中的使用者叫 AWS 帳戶 123456789012
用美國西部 (奧勒岡) AWS 區域my-function
中名為的函數。
範例 呼叫函數政策
{ "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操作(調用)不同。對於其他動作,動作識別符就是開頭為 lambda:
的操作名稱。
瞭解原則中的「條件」區段
條件是選用的政策元素,會套用額外的邏輯來判斷是否允許動作。除了所有動作皆支援的一般條件之外,Lambda 還會定義您可用來限制某些動作之其他參數值的條件類型。
例如,lambda:Principal
條件讓您可在函數的資源型政策中,限制使用者可授予叫用存取權限的服務或帳號。下列政策可讓使用者授與 Amazon 簡單通知服務 (AmazonSNS) 主題的權限,以叫用名為的函數test
。
範例 管理函數政策許可
{ "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 務的動作、資源和條件金鑰。
在策略的「資源」部分中引用函數
您可以使用 Amazon 資源名稱 (ARN) 在政策聲明中引用 Lambda 函數。函數的格式ARN取決於您是引用整個函數(非限定)還是函數版本或別名(限定)。
進行 Lambda API 呼叫時,使用者可以在參數中傳遞版本ARN或別名,或ARN在GetFunctionFunctionName
參數中設定值來指定版本或別名。GetFunctionQualifier
Lambda 會將原則中的資源元素與FunctionName
和Qualifier
傳入API呼叫進行比較,以做出授權決IAM策。如果不符,Lambda 會拒絕該請求。
無論您是允許還是拒絕對函數執行動作,都必須在策略聲明中使用正確的函數ARN類型才能達到預期的結果。例如,如果您的政策引用了不合格的ARN,Lambda 會接受引用不合格ARN但拒絕引用合格請求的請求。ARN
注意
不能使用萬用字元 (*) 以讓帳戶 ID 相符。如需有關接受語法的詳細資訊,請參閱IAM使用指南中的IAMJSON政策參考資料。
範例 允許調用不合格 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
範例 允許調用特定的合格 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合格的請求。
範例 允許調用任何合格的 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
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction",
"Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*"
} ] }
支援的函數動作
對函數進行操作的動作可依函數、版本或別名限制為特定函數ARN,如下表所述。會將不支援資源限制的動作授予給所有資源 (*
)。
動作 | 資源 | 條件 |
---|---|---|
函式 函式版本 函式別名 |
|
|
許可: |
函式 函式版本 函式別名 |
|
函式 |
|
|
函式 |
|
|
DeleteFunctionCodeSigningConfig |
函式 |
|
函式 函式別名 |
|
|
函式 |
|
|
DeleteFunctionEventInvokeConfig |
函式 |
|
DeleteProvisionedConcurrencyConfig |
函式別名 函式版本 |
|
|
無 |
|
函式 |
|
|
函式 |
|
支援的事件來源對應動作
對於事件來源映射,您可將 Delete 和 Update 許可限制至特定事件來源。lambda:FunctionArn
條件可讓您限制使用者可以設定事件來源叫用哪些函數。
對於這些動作,資源是事件來源映射,所以 Lambda 提供一個條件,可讓您根據事件來源映射叫用的函數來限制許可。
事件來源映射動作 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
動作 | 資源 | 條件 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
事件來源映射 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
無 |
支援的圖層動作
圖層動作可讓您限制使用者可以管理或搭配函數使用的圖層。與圖層使用和許可相關的動作在圖層版本上執行作業,而 PublishLayerVersion
在圖層名稱上執行作業。您可以搭配使用萬用字元,來限制使用者可依照名稱使用的 layer。
注意
該GetLayerVersion動作也涵蓋GetLayerVersionByArn。Lambda 不支持作GetLayerVersionByArn
為一個IAM動作。
圖層動作 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
動作 | 資源 | 條件 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Layer 版本 |
無 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Layer |
無 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
無 |