依標籤保護您的函數 - AWS Lambda

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

依標籤保護您的函數

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

必要條件

請確定您擁有 Lambda 執行角色。您將會在授予 IAM 許可以及建立 Lambda 函數時使用此角色。

步驟 1:要求新函數具有標籤

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

建立與以下範例類似的 IAM 政策。此政策會使用 aws:RequestTag/tag-keyaws:ResourceTag/tag-keyaws: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:測試許可

  1. abac-test-user 身分登入 AWS 主控台。如需詳細資訊,請參閱以 IAM 使用者身分登入

  2. 切換到 abac-project-role 角色。如需詳細資訊,請參閱切換到角色 (主控台)

  3. 建立 Lambda 函數

    • Permissions (許可) 下,選擇 Change default execution role (變更預設執行角色),然後在 Execution role (執行角色) 中選擇 Use an existing role (使用現有角色)。選擇與您在 步驟 4:授予 IAM 許可 中使用的相同執行角色。

    • Advanced settings (進階設定)下,選擇 Enable tags (啟用標籤),然後選擇 Add new tag (新增標籤)。在 Key (索引鍵) 欄位,輸入 project。請勿輸入

  4. 測試函數

  5. 建立第二個 Lambda 函數,並新增一個不同的標籤,例如 environment。此操作應會失敗,因為您在 步驟 1:要求新函數具有標籤 中建立的 ABAC 政策僅允許主體建立具有 project 標籤的函數。

  6. 建立無標籤的第三個函數。此操作應會失敗,因為您在 步驟 1:要求新函數具有標籤 中建立的 ABAC 政策不允許主體建立無標籤的函數。

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

步驟 8:清理資源

刪除 IAM 角色
  1. 開啟 IAM 主控台中的角色頁面

  2. 選取您在步驟 5 中建立的角色。

  3. 選擇刪除

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

  5. 選擇刪除

若要刪除 IAM 使用者
  1. 開啟 IAM 主控台的使用者頁面

  2. 選取您在步驟 6 中建立的 IAM 使用者。

  3. 選擇刪除

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

  5. 選擇刪除使用者

若要刪除 Lambda 函數
  1. 開啟 Lambda 主控台中的 函數頁面

  2. 選擇您建立的函數。

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

  4. 在文字輸入欄位中輸入 delete,然後選擇刪除