存取 IAM 資源所需的許可 - AWS Identity and Access Management

存取 IAM 資源所需的許可

資源是服務中的物件。IAM 資源包括群組、使用者、角色和政策。如果您使用 AWS 帳戶 根使用者憑證登入,則對管理 IAM 憑證或 IAM 資源沒有任何限制。但是,必須明確授予 IAM 使用者管理憑證或 IAM 資源的許可。您可以透過將以身分為基礎的政策連接到使用者來執行此操作。

注意

在整個 AWS 文件中,當我們在沒有提及任何特定類別的情況下引用 IAM 政策時,我們指的是以身分為基礎的客戶受管政策。如需政策類別的詳細資訊,請參閱IAM 中的政策和許可

管理 IAM 身分的許可

管理 IAM 群組、使用者、角色和憑證所需的許可通常對應於任務的 API 動作。例如,若要建立 IAM 使用者,您必須擁有具有對應的 API 命令的 iam:CreateUser 許可:CreateUser。若要允許 IAM 使用者建立其他 IAM 使用者,您可以將 IAM 政策 (如下所示) 連接到該使用者:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:CreateUser", "Resource": "*" } }

在政策中,Resource 元素的值取決於動作以及動作可以影響的資源。在上述範例中,政策可讓使用者建立任何使用者 (* 是符合所有字串的萬用字元)。反之,讓使用者僅變更自己的存取金鑰 (API 動作 CreateAccessKeyUpdateAccessKey) 的政策通常具有 Resource 元素。在這種情況下,ARN 包含一個變數 (${aws:username}),其解析至目前使用者名稱,如以下範例所示:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ListUsersForConsole", "Effect": "Allow", "Action": "iam:ListUsers", "Resource": "arn:aws:iam::*:*" }, { "Sid": "ViewAndUpdateAccessKeys", "Effect": "Allow", "Action": [ "iam:UpdateAccessKey", "iam:CreateAccessKey", "iam:ListAccessKeys" ], "Resource": "arn:aws:iam::*:user/${aws:username}" } ] }

在上述範例中,${aws:username} 是一個解析為目前使用者的使用者名稱的變數。如需有關政策變數的詳細資訊,請參閱 IAM 政策元素:變數與標籤

在動作名稱中使用萬用字元 (*) 通常可讓您更輕鬆地授予許可給與特定任務相關的所有動作。例如,若要允許使用者執行任何 IAM 動作,您可以使用 iam:* 執行動作。為了允許使用者能夠執行只與存取金鑰相關的任何動作,您可以在政策陳述式的 iam:*AccessKey* 元素中使用 Action。如此可提供使用者許可來執行 CreateAccessKeyDeleteAccessKeyGetAccessKeyLastUsedListAccessKeysUpdateAccessKey 動作。(如果動作新增到未來具有「AccessKey」的 IAM 中,則對 iam:*AccessKey* 元素使用 Action 也將授予使用者對該新動作的許可)。以下範例顯示一個政策,該政策可讓使用者執行與其自己的存取金鑰相關的所有動作 (請用您的 account-id 帳戶 ID 取代 AWS):

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::account-id:user/${aws:username}" } }

有些任務 (例如刪除群組) 涉及多個動作:您必須先從群組中移除使用者,然後分開或刪除群組的政策,然後實際刪除該群組。如果您希望使用者能夠刪除群組,則必須確保授予使用者執行所有相關動作的許可。

在 AWS Management Console 工作的許可

上述範例顯示允許使用者使用 AWS CLIAWS 開發套件執行動作的政策。

當使用者使用主控台,主控台會向 IAM 發出請求,以列出群組、使用者、角色和政策,並獲得與群組、使用者或角色關聯的政策。主控台還發出取得 AWS 帳戶資訊和委託人資訊的請求。委託人是使用者在主控台中提出請求。

一般而言,要執行動作,您必須擁有只包含在政策中的符合動作。要建立使用者,您需要有呼叫 CreateUser 動作的許可。通常,當您使用主控台來執行動作時,您必須具有在主控台中顯示、列出、取得或以其他方式查看資源的許可。這是必要的,以便您可以在主控台中導覽以執行指定的動作。例如,如果使用者 Jorge 想要使用主控台來變更自己的存取金鑰,他會進入 IAM 主控台並選擇 Users (使用者)。此動作會導致主控台發出 ListUsers 請求。如果 Jorge 沒有 iam:ListUsers 動作的許可,則在嘗試列出使用者時,主控台將被拒絕存取。因此,Jorge 無法取得自己的名稱和自己的存取金鑰,即使他擁有 CreateAccessKeyUpdateAccessKey 動作的許可。

如果要授予使用者使用 AWS Management Console 管理群組、使用者、角色、政策和憑證的許可,則需要包含主控台執行的動作的許可。如需可以用來授予使用者許可的一些政策範例,請參閱管理 IAM 資源的政策範例

跨 AWS 帳戶授予許可

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

注意

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

由一個服務來存取另一個服務的許可

許多 AWS 服務皆可存取其他 AWS 服務。例如,幾個 AWS 服務 (包括 Amazon EMR、Elastic Load Balancing 和 Amazon EC2 Auto Scaling) 管理 Amazon EC2 執行個體。其他 AWS 服務使用 Amazon S3 儲存貯體、Amazon SNS 主題、Amazon SQS 佇列等等。

在這些情況下管理許可的方案因服務而異。以下是一些如何處理不同服務許可的範例:

  • 在 Amazon EC2 Auto Scaling 中,使用者必須具有使用 Auto Scaling 的許可,但不需要明確授予管理 Amazon EC2 執行個體的許可。

  • 在 AWS Data Pipeline 中,IAM 角色決定了管道可以做什麼;使用者需要擔任該角色的許可 (有關詳細資訊,請參閱在《AWS Data Pipeline 開發人員指南》中的使用 IAM 授予管道許可)。

如需有關如何適當的設定許可以便 AWS 服務能夠完成您要執行的任務的詳細資訊,請參閱您要呼叫的服務的文件。若要了解如何為服務建立角色的詳細資訊,請參閱建立角色以將許可委派給 AWS 服務

設定具有 IAM 角色的服務以代表您的工作

如果要將 AWS 服務設定為代您進行工作,您通常會為 IAM 角色提供 ARN,以定義允許服務執行的操作。AWS 會檢查,以確保您具有將角色傳遞給服務的許可。如需詳細資訊,請參閱 授予使用者將角色傳遞至 AWS 服務的許可

必要的動作

動作是您可以對資源執行的動作,例如查看、建立、編輯和刪除該資源。每個 AWS 服務定義動作。

若要允許某人執行動作,您必須在適用於呼叫身分或受影響資源的政策中包含必要的動作。一般而言,要提供執行動作所需的許可,您必須在政策中包含該動作。例如,要建立使用者,您需要將 CreateUser 動作新增到政策中。

在某些情況下,動作可能要求您在政策中包含其他相關動作。例如,若要提供某人許可,使其可以使用 AWS Directory Service 操作在 ds:CreateDirectory 中建立目錄,您必須在其政策中包含下列動作:

  • ds:CreateDirectory

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • ec2:CreateSecurityGroup

  • ec2:CreateNetworkInterface

  • ec2:DescribeNetworkInterfaces

  • ec2:AuthorizeSecurityGroupIngress

  • ec2:AuthorizeSecurityGroupEgress

使用視覺化編輯器建立或編輯政策時,會收到警告和提示,以幫助您選擇政策的所有必需操作。

如需有關在 AWS Directory Service 中建立目錄所需的許可詳細資訊,請參閱範例 2:允許使用者建立目錄