本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
依標籤保護您的函數
以下步驟會示範使用 ABAC 設定函數許可的一種方法。在此範例案例中,您將會建立四個 IAM 許可政策。然後,您會將這些政策連接至新的 IAM 角色。最後,您將建立 IAM 使用者,並授予該使用者擔任新角色的許可。
主題
必要條件
請確定您擁有 Lambda 執行角色。您將會在授予 IAM 許可以及建立 Lambda 函數時使用此角色。
步驟 1:要求新函數具有標籤
在搭配使用 ABAC 和 Lambda 時,最佳實務是要求所有函數都具有標籤。這有助於確保您的 ABAC 許可政策如預期般運作。
建立與以下範例類似的 IAM 政策。此政策會使用 aws:RequestTag/tag-key、aws:ResourceTag/tag-key 和 aws:TagKeys 條件索引鍵,要求新函數和建立函數的 IAM 主體皆具有 project
標籤。ForAllValues
修飾詞會確保 project
是唯一受允許的標籤。如果您不納入 ForAllValues
修飾詞,則只要使用者也傳遞 project
,其便也可新增其他標籤至函數。
範例 – 要求新函數具有標籤
{ "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 主體的標籤來允許動作
使用 aws:ResourceTag/tag-key 條件索引鍵來建立第二個 IAM 政策,以要求主體的標籤與連接至函數的標籤相符。以下範例政策會允許具有 project
標籤的主體呼叫具有 project
標籤的函數。如果函數有任何其他標籤,則會該動作將遭拒。
範例 – 要求函數和 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 許可
建立允許主體列出 Lambda 函數和 IAM 角色的政策。此政策會允許主體在主控台以及呼叫 API 動作時查看所有 Lambda 函數和 IAM 角色。
範例 – 授予 Lambda 和 IAM 的 List 許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }
步驟 4:授予 IAM 許可
建立允許 iam:PassRole 的政策。在您將執行角色指派給函數時,便會需要此許可。在以下範例政策中,用您 Lambda 執行角色的 ARN 來取代範例 ARN。
注意
請勿將政策中的 ResourceTag
條件金鑰與 iam:PassRole
動作搭配使用。您不能使用該 IAM 角色的標籤來控制可傳遞該角色的人員。如需有關傳遞角色至服務所需許可的詳細資訊,請參閱授予使用者將角色傳遞至 AWS 服務的許可。
範例 – 授予傳遞執行角色的許可
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "
arn:aws:iam::111122223333:role/lambda-ex
" } ] }
步驟 5:建立 IAM 角色
最佳實務為使用角色來委派許可。建立名為 abac-project-role
的 IAM 角色:
-
在步驟 1:選取可信任實體時:選擇 AWS account ( 帳戶),然後選擇 This account (此帳戶)。
-
在步驟 2:新增許可時:連接您於前一步中建立的四個 IAM 政策。
-
在步驟 3:命名、檢閱和建立時:選擇 Add tag (新增標籤)。在 Key (索引鍵) 欄位,輸入
project
。請勿輸入值。
步驟 6:建立 IAM 使用者
建立名為 abac-test-user
的 IAM 使用者。在 Set permissions (設定許可) 區段中,選擇 Attach existing policies directly (直接連接現有政策),接著選擇 Create policy (建立政策)。輸入以下政策定義。以您的 AWS 帳戶 ID 來取代 111122223333
。此政策允許 abac-test-user
擔任 abac-project-role
。
範例 – 允許 IAM 使用者擔任 ABAC 角色
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
111122223333
:role/abac-project-role
" } }
步驟 7:測試許可
-
以
abac-test-user
身分登入 AWS 主控台。如需詳細資訊,請參閱以 IAM 使用者身分登入。 -
切換到
abac-project-role
角色。如需詳細資訊,請參閱切換到角色 (主控台)。 -
-
在 Permissions (許可) 下,選擇 Change default execution role (變更預設執行角色),然後在 Execution role (執行角色) 中選擇 Use an existing role (使用現有角色)。選擇與您在 步驟 4:授予 IAM 許可 中使用的相同執行角色。
-
在 Advanced settings (進階設定)下,選擇 Enable tags (啟用標籤),然後選擇 Add new tag (新增標籤)。在 Key (索引鍵) 欄位,輸入
project
。請勿輸入值。
-
-
測試函數。
-
建立第二個 Lambda 函數,並新增一個不同的標籤,例如
environment
。此操作應會失敗,因為您在 步驟 1:要求新函數具有標籤 中建立的 ABAC 政策僅允許主體建立具有project
標籤的函數。 -
建立無標籤的第三個函數。此操作應會失敗,因為您在 步驟 1:要求新函數具有標籤 中建立的 ABAC 政策不允許主體建立無標籤的函數。
此授權策略允許您控制存取,且無需為每個新使用者建立新政策。若要將授予新使用者存取權限,只需要向其授予擔任與其受指派專案相對應角色的許可。
步驟 8:清理資源
若要刪除 Lambda 函數
-
開啟 Lambda 主控台中的 函數頁面
。 -
選擇您建立的函數。
-
選擇 Actions (動作)、Delete (刪除)。
-
在文字輸入欄位中輸入
delete
,然後選擇刪除。