使用政策控制對 AWS 資源的存取許可 - AWS Identity and Access Management

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

使用政策控制對 AWS 資源的存取許可

您可以使用政策控制對 IAM 或所有 AWS 中的資源的存取。

若要使用政策來控制對 AWS 的存取,您必須了解 AWS 如何授予存取許可。AWS 由一系列「資源」組成。IAM 使用者即為資源。Amazon S3 儲存貯體即為資源。在使用 AWS API、AWS CLI 或 AWS Management Console執行操作 (如建立使用者) 時,您會為該操作傳送「請求」。您的請求指定動作、資源、主體實體 (使用者或角色)、主體帳戶,以及所需的任何請求資訊。所有這些資訊提供了上下文

AWS然後, 檢查是否對您 (主體) 進行身分驗證 (登入) 和授權 (具有許可權),以便對指定的資源執行指定的操作。在授權期間,AWS 會檢查所有適用於請求內容的政策。大多數的政策會以 JSON 文件形式存放在 AWS 中,並負責指定主體實體的許可。如需有關政策類型及其使用的詳細資訊,請參閱 IAM 中的政策和許可

AWS只有在政策允許請求的每個部分時, 才會授權該請求。若要檢視此程序的圖表,請參閱 IAM 的運作方式。如需 AWS 如何決定是否允許請求的詳細資訊,請參閱政策評估邏輯

當您建立 IAM 政策時,可以控制對下列項目的存取:

  • 主體 – 控制允許發出請求的人員 (主體) 執行哪些操作。

  • IAM 身分 – 控制哪些 IAM 身分 (使用者群組、使用者與角色) 可被存取以及存取的方法。

  • IAM政策 – 控制哪些使用者可以建立、編輯和刪除客戶受管政策,以及哪些使用者可以連接和分開所有受管政策。

  • AWS 資源 – 控制哪些使用者有權使用以身分為基礎的政策或以資源為基礎的政策來存取資源。

  • AWS 帳戶 – 控制是否僅允許特定帳戶的成員發出請求。

政策可讓您指定哪些使用者有權存取 AWS 資源,以及他們可以對這些資源執行哪些操作。每個 IAM 使用者在開始時都沒有許可。換言之,在預設狀態下,使用者無法執行任何動作,甚至不能查看自己的存取金鑰。若要為使用者授予執行某些操作的許可,您可以為使用者新增許可 (也就是將政策連接到使用者)。或者,您可以將使用者加入到具有預期的許可的使用者群組中。

例如,您可能授予使用者列出自己的存取金鑰的許可。您可能擴展該許可,並讓每位使用者建立、更新和刪除自己的索引鍵。

當您授予一個使用者群組許可時,使用者群組內的全部使用者都會獲得那些許可。例如,您可以為 Administrators 使用者群組新增許可,允許這個群組對任意 AWS 帳戶 資源執行任意 IAM 動作。另一個範例:您可以授予 Managers 使用者群組描述 AWS 帳戶 的 Amazon EC2 執行個體的許可。

有關如何委託基本許可給使用者、使用者群組和角色的資訊,請參閱 存取 IAM 資源所需的許可。有關說明基本許可的其他政策範例,請參閱 管理 IAM 資源的政策範例

控制主體的存取許可

您可以使用政策,控制允許發出請求的人員 (主體) 執行哪些操作。若要執行此操作,您必須將以身分為基礎的政策連接到此人的身分 (使用者、使用者群組或角色)。您也可以使用許可界限,設定實體 (使用者或角色) 可擁有的最大許可。

例如,假設您希望使用者 Zhang Wei 能夠完整存取 CloudWatch、Amazon DynamoDB、Amazon EC2 和 Amazon S3。您可以建立兩個不同的政策,以便以後其他使用者需要一組許可時為其分配其中的一個政策。或者,您可以將兩個許可放在單一政策中,然後將該政策連接到名為 Zhang Wei 的 IAM 使用者。您還可以將一個政策連接到 Zhang 所屬的使用者群組,或者連接到 Zhang 可以擔任的角色。因此,在 Zhang 查看 S3 儲存貯體內容時,會允許他的請求。如果他嘗試建立新的 IAM 使用者,他的請求會被拒絕,因為他未獲許可。

您可以在 Zhang 身上使用許可界限,確定他絕對不會被授予 DOC-EXAMPLE-BUCKET1 S3 儲存貯體存取權。若要執行此操作,請決定您希望 Zhang 擁有的許可上限。在這種情況下,您可以控制他使用許可政策做哪些事。在這裡,您只在意他不會存取機密儲存貯體。因此,您使用以下政策來定義 Zhang 的界限,允許對 Amazon S3 和其他幾項服務執行所有 AWS 動作,但拒絕對 DOC-EXAMPLE-BUCKET1 S3 儲存貯體進行存取。由於許可界限不允許任何 IAM 動作,如此可防止 Zhang IAM 刪除他 (或任何人的) 界限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionsBoundarySomeServices", "Effect": "Allow", "Action": [ "cloudwatch:*", "dynamodb:*", "ec2:*", "s3:*" ], "Resource": "*" }, { "Sid": "PermissionsBoundaryNoConfidentialBucket", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET1", "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*" ] } ] }

當您針對使用者指派像這類許可界限的政策時,請記得,並沒有授予任何許可。它負責設定以身分為基礎的政策可為 IAM 實體授予的最大許可。如需有關許可界限的詳細資訊,請參閱 IAM 實體的許可界限

如需之前所述的程序詳細資訊,請參考以下資源:

控制對身分的存取

您可以透過使用者群組來建立連接到使用者的 IAM 政策,以使用該政策控制您的所有使用者可對某個身分執行哪些操作。若要執行此操作,請建立一個政策以限制可對某個身分執行哪些操作,以及哪些使用者可以存取該身分。

例如,您可以建立一個名為 AllUsers 的使用者群組,然後將該使用者群組連接到所有使用者。在建立該使用者群組時,您可以為所有使用者授予存取權限以設定其憑證,如前一節中所述。然後,您可以建立一個政策,以便拒絕存取以禁止更改該使用者群組,除非在政策條件中包含使用者名稱。但是,該政策部分僅拒絕列出的使用者以外的任何人進行存取。您也必須包含許可權,以允許該使用者群組中的所有使用者可執行所有使用者群組管理動作。最後,將該政策連接到該使用者群組,以便將其套用於所有使用者。因此,在政策中未指定的使用者嘗試更改該使用者群組時,將拒絕請求。

若要使用視覺化編輯器來建立此政策
  1. 登入 AWS Management Console,並開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  2. 在左側的導覽窗格中,選擇 Policies (政策)

    如果這是您第一次選擇 Policies (政策),將會顯示 Welcome to Managed Policies (歡迎使用受管政策) 頁面。選擇 Get Started (開始使用)

  3. 選擇 建立政策

  4. 政策編輯器區段中,選擇視覺化選項。

  5. 選擇服務中,選擇 IAM

  6. 允許的動作中,在搜尋方塊中輸入 group。視覺化編輯器將顯示所有包含 group 一詞的 IAM 動作。選取所有核取方塊。

  7. 選擇 Resources (資源) 來為您的政策指定資源。根據您所選的動作,應會看到群組使用者資源類型。

    • 群組 – 選擇新增 ARN。針對資源位於,選取任何帳號選項。選取任何具有路徑的群組名稱核取方塊,然後輸入使用者群組名稱 AllUsers。接著選擇新增 ARN

    • 使用者 – 選取此帳戶中的任何旁的核取方塊。

    您選擇的操作之一 (ListGroups) 不支援使用特定的資源。您不需要為該動作選擇 All resources (所有資源)。在 JSON 編輯器中儲存或查看您的政策時,您可以看到 IAM 自動建立新的許可區塊,以便為所有資源授予該動作的許可。

  8. 若要新增其他許可區塊,請選擇新增更多許可

  9. 選擇選取服務,然後選擇 IAM

  10. 選擇允許的動作,然後選擇切換為拒絕許可。在執行該操作時,將使用整個區塊來拒絕許可。

  11. 在搜尋方塊中,輸入 group。視覺化編輯器將顯示所有包含 group 一詞的 IAM 動作。選取下列動作旁的核取方塊:

    • CreateGroup

    • DeleteGroup

    • RemoveUserFromGroup

    • AttachGroupPolicy

    • DeleteGroupPolicy

    • DetachGroupPolicy

    • PutGroupPolicy

    • UpdateGroup

  12. 選擇 Resources (資源) 來為您的政策指定資源。根據您所選的動作,應會看到群組資源類型。選擇新增 ARN。針對資源位於,選取任何帳號選項。針對任何具有路徑的群組名稱,輸入使用者群組名稱 AllUsers。接著選擇新增 ARN

  13. 選擇請求條件 - 選用,然後選擇新增另一個條件。以下列的值來完成表單:

    • 條件金鑰 - 選擇 aws:使用者名稱

    • Qualifier (限定詞) – 選擇 Default (預設)

    • Operator (運算子) – 選擇 StringNotEquals

    • – 輸入 srodriguez 然後選擇新增,以新增另一個值。輸入 mjackson,然後選擇新增,以新增另一個值。輸入 adesai,然後選擇新增條件

    在清單中不包含進行呼叫的使用者時,該條件將確認拒絕存取指定的使用者群組管理動作。由於這會明確拒絕許可權,它將覆寫前面允許這些使用者呼叫這些操作的區塊。不會拒絕清單中的使用者進行存取,並在第一個許可區塊中為他們授予許可,因此,他們可以完全管理該使用者群組。

  14. 完成時,選擇 Next (下一步)

    注意

    您可以隨時切換視覺化JSON 編輯器選項。不過,如果您進行變更或在視覺化編輯器選項中選擇下一步,IAM 就可能會調整您的政策結構,以便針對視覺化編輯器進行最佳化。如需更多詳細資訊,請參閱 政策結構調整

  15. 檢視與建立頁面上,針對政策名稱輸入 LimitAllUserGroupManagement。針對 Description (描述),輸入 Allows all users read-only access to a specific user group, and allows only specific users access to make changes to the user group。檢視該政策中定義的許可,來確認您已授予想要的許可。然後選擇 Create policy (建立政策) 來儲存您的新政策。

  16. 將政策連接到您的使用者群組。如需詳細資訊,請參閱 新增和移除 IAM 身分許可

或者,您也可以使用該範例 JSON 政策文件建立相同的政策。若要檢視此 JSON 政策,請參閱 IAM:允許特定 IAM 使用者以程式設計方式在主控台中管理群組。如需關於使用 JSON 文件來建立政策的詳細說明,請參閱 正在使用 JSON 編輯器建立政策

控制對政策的存取

您可以控制您的使用者如何採用 AWS 受管政策。若要執行此操作,請將該政策連接到您的所有使用者。理想情況下,您可以使用使用者群組執行該操作。

例如,您可以建立一個政策以允許使用者僅將 IAMUserChangePasswordPowerUserAccess AWS 受管政策連接到新的 IAM 使用者、使用者群組或角色。

對於客戶受管政策,您可以控制哪些使用者可以建立、更新和刪除這些政策。您可以控制哪些使用者可以將政策連接到主體實體 (使用者群組、使用者和角色) 以及將政策從主體實體中分開。您也可以控制使用者可以對哪些實體連接或分開哪些政策。

例如,您可以為帳戶管理員授予許可以建立、更新和刪除政策。然後,您可以為小組負責人或其他有限管理員授予許可,以便將這些政策連接到該有限管理員管理的主體實體以及將這些政策從這些主體實體中分開。

如需詳細資訊,請參閱下列資源:

控制建立、更新和刪除客戶受管政策的許可

您可以使用 IAM 政策控制誰有權在您的 AWS 帳戶 中建立、更新和刪除客戶管理政策。以下清單包含與建立、更新和刪除政策或政策版本直接相關的 API 操作:

上述清單中的 API 操作對應於可使用 IAM 政策允許或拒絕的操作 — 也就是您可以授予的許可。

請考量下列範例政策。允許使用者建立、更新 (即建立新的政策版本)、刪除 AWS 帳戶 中的所有客戶管理政策以及設定這些政策的預設版本。該範例政策還允許該使用者列出政策並獲取政策。若要了解如何使用此範例 JSON 政策文件來建立政策,請參閱 正在使用 JSON 編輯器建立政策

範例 允許建立、更新、刪除、列出、獲取所有政策以及設定這些政策的預設版本的政策範例
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:CreatePolicy", "iam:CreatePolicyVersion", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:ListPolicies", "iam:ListPolicyVersions", "iam:SetDefaultPolicyVersion" ], "Resource": "*" } }

您可以建立限制使用這些 API 操作的政策以僅影響指定的受管政策。例如,您可能希望允許使用者設定預設版本和刪除政策版本,但是僅允許針對特定客戶受管政策執行這些操作。運用在授予這些許可權的政策的 Resource 元素中指定政策 ARN,可實現此目的。

以下範例顯示的政策,可讓使用者刪除政策版本,並設定預設版本。但是,這些動作只允許用於客戶受管政策,其包含路徑 /TEAM-A/。客戶受管政策 ARN 是在政策的 Resource 元素中指定 (在此範例中,ARN 包含一個路徑和一個萬用字元,因而可配對包含路徑 /TEAM-A/ 的所有客戶受管政策)。若要了解如何使用此範例 JSON 政策文件來建立政策,請參閱 正在使用 JSON 編輯器建立政策

如需有關如何使用該範例 JSON 政策文件建立政策,請參閱 易用名稱和路徑

範例 僅允許針對特定政策刪除政策版本和設定預設版本的政策範例
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:DeletePolicyVersion", "iam:SetDefaultPolicyVersion" ], "Resource": "arn:aws:iam::account-id:policy/TEAM-A/*" } }

控制連接和分開受管政策的許可

您還可以使用 IAM 政策僅允許使用者使用特定的受管政策。實際上,您可以控制允許使用者為其他主體實體授予哪些許可。

以下清單顯示與將受管政策連接到主體實體以及從中分開直接相關的 API 操作:

您可以建立限制使用這些 API 操作的政策以僅影響特定的受管政策與/或您指定的主體實體。例如,您可能希望允許使用者連接受管政策,但是只能連接您指定的受管政策。或者,您可能希望允許使用者連接受管政策,但是只能連接到您指定的主體實體。

以下範例政策僅允許使用者將受管政策連接到包含路徑 /TEAM-A/ 的使用者群組和角色。使用者群組和角色 ARN 是在政策的 Resource 元素中指定的。(在此範例中,ARN 包含一個路徑和一個萬用字元,因而與包含路徑 /TEAM-A/ 的所有使用者群組和角色配對。) 若要了解如何使用此範例 JSON 政策文件來建立政策,請參閱 正在使用 JSON 編輯器建立政策

範例 僅允許將受管政策連接到特定使用者群組或角色的政策範例
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:AttachGroupPolicy", "iam:AttachRolePolicy" ], "Resource": [ "arn:aws:iam::account-id:group/TEAM-A/*", "arn:aws:iam::account-id:role/TEAM-A/*" ] } }

您可以進一步限制前面範例中的動作,讓它僅影響特定的政策。也就是,透過在政策中新增條件,您可以控制允許使用者連接到其他主體實體的許可。

以下範例中的條件可確保只有在連接的政策與指定政策之一配對時才允許 AttachGroupPolicyAttachRolePolicy 許可。條件使用iam:PolicyARN 條件索引鍵來決定要連接哪個政策或哪些政策。以下範例政策延伸之前的範例。其允許使用者僅將包含路徑 /TEAM-A/ 的受管政策連接到包含路徑 /TEAM-A/ 的使用者群組和角色。若要了解如何使用此範例 JSON 政策文件來建立政策,請參閱 正在使用 JSON 編輯器建立政策

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "iam:AttachGroupPolicy", "iam:AttachRolePolicy" ], "Resource": [ "arn:aws:iam::account-id:group/TEAM-A/*", "arn:aws:iam::account-id:role/TEAM-A/*" ], "Condition": {"ArnLike": {"iam:PolicyARN": "arn:aws:iam::account-id:policy/TEAM-A/*"} } } }

本政策使用 ArnLike 條件運算子,但也可以使用 ArnEquals 條件運算子,因為這兩個條件運算子執行相同的操作。如需有關 ArnLikeArnEquals 的詳細資訊,請參閱《政策元素參考》條件類型章節中的 Amazon Resource Name (ARN) 條件運算子

例如,您可以限制使用操作以僅涉及指定的受管政策。運用在授予這些許可權的政策的 Condition 元素中指定政策 ARN,可實現此目的。例如,指定客戶受管政策的 ARN:

"Condition": {"ArnEquals": {"iam:PolicyARN": "arn:aws:iam::123456789012:policy/POLICY-NAME"} }

您也可以在政策的 AWS 元素中指定 Condition 受管政策的 ARN。AWS 受管政策的 ARN 會在政策 ARN 中使用特殊別名 aws,而不是帳戶 ID,如此範例所示:

"Condition": {"ArnEquals": {"iam:PolicyARN": "arn:aws:iam::aws:policy/AmazonEC2FullAccess"} }

控制資源的存取許可

您可以控制哪些使用者有權使用以身分為基礎的政策或以資源為基礎的政策來存取資源。在以身分為基礎的政策中,您將政策連接到一個身分並指定該身分可以存取哪些資源。在以資源為基礎的政策中,您將政策連接到要控制的資源。在該政策中,您指定哪些主體可以存取該資源。如需有關兩種政策類型的詳細資訊,請參閱 以身分為基礎和以資源為基礎的政策

如需詳細資訊,請參閱下列資源:

資源建立者不會自動擁有許可

如果使用 AWS 帳戶根使用者 登入資料來登入,您有權對屬於該帳戶的資源執行任何操作。但是,對 IAM 使用者來說並非如此。IAM 使用者可以獲得建立資源的許可,但即使對於該資源,該使用者許可也僅限於明確授予的內容。這表示您不會只因為建立資源 (如 IAM 角色) 就自動具有編輯或刪除該角色的許可。此外,帳戶擁有者或有權管理您的許可的其他使用者可以隨時撤銷您的許可。

控制對特定帳戶中的主體的存取

您可以直接向自己帳戶中的 IAM 使用者授予對您的資源的存取權限。如果來自另一個帳戶的使用者需要存取您的資源,您可以建立 IAM 角色。角色是一個實體,其中包含許可,但不與特定使用者關聯。然後,其他帳戶中的使用者可以擔任該角色,並根據您為該角色分配的許可存取資源。如需詳細資訊,請參閱 在您擁有的另一個 AWS 帳戶 中提供 IAM 使用者存取權

注意

部分服務支援以資源為基礎的政策,如 以身分為基礎和以資源為基礎的政策 (例如 Amazon S3、Amazon SNS 和 Amazon SQS) 中所述。對於這些服務,使用角色的替代方法是將政策連接到您要共用的資源 (儲存貯體、主題或佇列)。以資源為基礎的政策可以指定擁有資源存取許可的 AWS 帳戶。