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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "SomeServices", "Effect": "Allow", "Action": [ "cloudwatch:*", "dynamodb:*", "ec2:*", "s3:*" ], "Resource": "*" }, { "Sid": "NoConfidentialBucket", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::CompanyConfidential/*", "arn:aws:s3:::CompanyConfidential" ] } ] }

當您針對使用者指派像這類許可界限的政策時,請記得,並沒有授予任何許可。它負責設定以身分為基礎的政策可為 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. 選擇 Create policy (建立政策)。

  4. Visual editor (視覺化編輯器) 標籤上,選擇 Choose a service (選擇一項服務) 來開始使用。然後選擇 IAM

  5. 選擇 Select actions (選取動作),然後在搜尋方塊中輸入 group。視覺化編輯器將顯示所有包含 group 一詞的 IAM 動作。選取所有核取方塊。

  6. 選擇 Resources (資源) 來為您的政策指定資源。根據您所選的動作,應會看到 group (群組)group-path (群組路徑)、以及 user (使用者) 資源類型。

    • group (群組) – 選擇 Add ARN (新增 ARN)。針對 Resource (資源),請選取 Any (任意) 旁的核取方塊。針對 Group Name With Path (含有路徑的群組名稱),輸入 AllUsers 使用者群組名稱。接著選擇 Add (新增)

    • group-path (群組路徑) – 選取 Any (任意) 旁的核取方塊。

    • user (使用者) – 選取 Any (任意) 旁的核取方塊。

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

  7. 若要新增其他許可區塊,請選擇 Add additional permissions (新增額外許可)

  8. 選擇 Choose a service (選擇一個服務) 然後選擇 IAM

  9. 選擇 Select actions (選取動作),然後選擇 Switch to deny permissions (切換為拒絕許可)。在執行該操作時,將使用整個區塊來拒絕許可。

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

    • CreateGroup

    • DeleteGroup

    • RemoveUserFromGroup

    • AttachGroupPolicy

    • DeleteGroupPolicy

    • DetachGroupPolicy

    • PutGroupPolicy

    • UpdateGroup

  11. 選擇 Resources (資源) 來為您的政策指定資源。根據您所選的動作,應會看到 group (群組) 資源類型。選擇 Add ARN (新增 ARN)。針對 Resource (資源),請選取 Any (任意) 旁的核取方塊。針對 Group Name With Path (含有路徑的群組名稱),輸入 AllUsers 使用者群組名稱。接著選擇 Add (新增)

  12. 選擇 Specify request conditions (optional) (指定請求條件 (選用)),然後選擇 Add condition (新增條件)。以下列的值來完成表單:

    • Key (索引鍵) – 選擇 aws:username

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

    • Operator (運算子) – 選擇 StringNotEquals

    • Value (值) – 輸入 srodriguez 然後選擇 Add another condition value (新增其他條件值)。輸入 mjackson 然後選擇 Add another condition value (新增其他條件值)。輸入 adesai 然後選擇 Add (新增)

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

  13. 完成時,選擇 Review policy (檢閱政策)。

    注意

    您可以隨時切換 Visual editor (視覺化編輯器) 與 JSON 標籤。不過,如果您進行更改或在 Visual editor (視覺編輯工具) 索引標籤中選擇 Review policy (檢閱政策),IAM 可能會調整您的政策結構以針對視覺編輯工具進行最佳化。如需詳細資訊,請參閱 政策結構調整

  14. Review policy (檢閱政策) 頁面上,針對 Name (名稱) 輸入 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 (建立政策) 來儲存您的新政策。

  15. 將政策連接到您的使用者群組。如需詳細資訊,請參閱 新增和移除 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 條件運算子,因為 ARN 包含萬用字元。對於特定的 ARN,請使用 ArnEquals 條件運算子。如需有關 ArnLikeArnEquals 的詳細資訊,請參閱《政策元素參考》條件類型章節中的 Amazon 資源名稱 (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 帳戶。