IAM 實體的許可界限 - AWS Identity and Access Management

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

IAM 實體的許可界限

AWS 支援IAM實體 (使用者或角色) 的權限界限。權限界限是使用受管理原則來設定以身分識別為基礎的原則可授與實體的最大權限的進階功能。IAM實體的許可界限可讓其只執行由身分類型政策和其許可界限同時允許的動作。

如需有關政策類型的詳細資訊,請參閱 政策類型

重要

請勿使用以資源為基礎的政策陳述式,其中包含Deny對已附加權限界限NotPrincipal原則的使用IAM者或角色具有影響的政策元素。無論NotPrincipal元素中指定的值為何,具有Deny效果的元NotPrincipal素都會一律拒絕任何附加權限界限原則的IAM主參與者。這會導致某些可以存取資源的IAM使用者或角色失去存取權。我們建議您變更資源型政策陳述式,將條件運算子 ArnNotEqualsaws:PrincipalArn 內容索引鍵搭配使用來限制存取,而不是使用 NotPrincipal 元素。如需有關 NotPrincipal 元素的資訊,請參閱 AWS JSON政策元素:NotPrincipal

您可以使用 AWS 受管政策或客戶管理的策略來設定IAM實體 (使用者或角色) 的界限。該政策限制使用者或角色的許可上限。

例如,假設名為的IAM使用者ShirleyRodriguez應該只允許管理 Amazon S3 CloudWatch、Amazon 和 Amazon EC2。為了強行實施這個規則,您可以使用以下政策設定 ShirleyRodriguez 使用者的許可界限:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*" ], "Resource": "*" } ] }

當您使用政策來設定使用者的許可界限時,它會限制使用者的許可,但不自行提供許可。在此範例中,政策將 Amazon S3 和 Amazon 中所有操作的最大許可設定ShirleyRodriguez為EC2。 CloudWatchShirley 永遠不能在任何其他服務中執行操作,包括IAM,即使她擁有允許它的權限策略也是如此。例如,您可以將以下政策加入到 ShirleyRodriguez 使用者:

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

此原則允許在中建立使用者IAM。如果您將此許可政策連接到 ShirleyRodriguez 使用者,當 Shirley 嘗試建立使用者時,操作會失敗。失敗的原因是許可界限不允許 iam:CreateUser 操作。因為這兩項政策,Shirley 沒有許可在 AWS中執行任何操作。您必須新增不同的許可政策,才能允許其他服務 (例如 Amazon S3) 中的動作。或者,您可以更新權限界限,以允許她在中建立使用者IAM。

評估含界限的有效許可

IAM實體 (使用者或角色) 的權限界限會設定實體可以擁有的最大權限。這可能改變該使用者或角色的有效許可。實體的有效許可,是指會影響使用者或角色的所有政策所授予的許可。在帳戶中,實體的權限可能會受到以身分識別為基礎的策略、以資源為基礎的策略、權限界限、Organizations SCPs 或工作階段策略的影響。如需有關不同政策類型的詳細資訊,請參閱 中的政策和許可 AWS Identity and Access Management

如果其中任何一種政策會明確拒絕存取操作,則請求將會遭拒。經由多種許可類型授予的許可將更為複雜。如需有關如何 AWS 評估策略的詳細資訊,請參閱政策評估邏輯

包含界限的以身分為基礎政策 – 以身分為基礎的政策可分為會連接至使用者、使用者群組或角色的內嵌或受管政策。以身分為基礎的政策可為實體授予許可,而許可界限會限制這些許可。有效的許可是兩種政策類型的交集。在這些政策的明確拒絕會覆寫允許。

評估以身分為基礎的政策及許可界限

以資源為基礎的政策 – 以資源為基礎的政策會控制指定主體如何存取資源,即政策連接至其中的資源。

適用於 IAM 使用者的資源型政策

在相同帳戶中,將權限授與IAM使用者 ARN (非同盟使用者工作階段) 的資源型政策不會受到身分識別型原則或權限界限中隱含拒絕的限制。

評估以資源為基礎的政策、許可界限和以身分為基礎的政策
角色的資源型政策 IAM

IAMrole — 授與角色權限的以資源為基礎的策略IAM受到權限界限或工作階段策略中隱含拒絕的限制。ARN

IAMrole session — 在同一帳戶中,將權限授與角IAM色工作階段的以資源為基礎的策略直接ARN授與權限給假定的角色工作階段。直接授予工作階段的許可不會受到身分識別型政策、許可界限或工作階段政策中隱含拒絕的限制。當您擔任角色並提出要求時,提出要求的主參與者是角色工作階段,ARN而不是IAM角色本身ARN的角色工作階段。

IAM聯合使用者工作階段的資源型政策

IAM聯合使用者工作階段 — IAM 聯合使用者工作階段是透過呼叫建立的工作階段。GetFederationToken當同盟使用者提出要求時,提出要求的主參與者是同盟使用者,ARN而不是同盟ARN的使IAM用者。在同一帳戶中,將權限授與聯合使用者的以資源為基礎的政策會直接ARN授與工作階段的權限。直接授予工作階段的許可不會受到身分識別型政策、許可界限或工作階段政策中隱含拒絕的限制。

不過,如果以資源為基礎的政策授與聯合IAM使用者ARN的權限,則同盟使用者在工作階段期間所提出的要求會受到權限界限或工作階段原則中隱含拒絕的限制。

Or SCPs ganizations — SCPs 套用至整個 AWS 帳戶。它們會限制由該帳戶內主體所提出各個請求的許可。IAM實體 (使用者或角色) 可以提出受SCP、權限界限和身分型原則影響的要求。在這種情況下,只有當所有三種政策類型允許時才允許該要求。有效許可是所有三種政策類型的交集。所有這類政策中的明確拒絕都會覆寫該允許。

評估SCP、權限界限和以身分識別為基礎的原則

您可以了解您的帳戶是否為 AWS Organizations中組織的成員。組織成員可能受到SCP. 若要使用 AWS CLI 命令或 AWS API作業檢視此資料,您必須擁有 Organizations 實體organizations:DescribeOrganization動作的權限。您必須擁有其他許可,才能在 Organizations 主控台中執行操作。若要瞭解SCP是否拒絕存取特定要求,或是要變更您的有效權限,請聯絡您的 AWS Organizations 管理員。

工作階段政策 – 工作階段政策是一種進階政策,您可以在透過編寫程式的方式建立角色或聯合使用者的暫時工作階段時,作為參數傳遞。工作階段的權限來自用於建立工作階段和工作階段原則的IAM實體 (使用者或角色)。實體的以身分為基礎的政策,會受到工作階段政策及許可界限所限制。這組政策類型的有效許可是所有三種政策類型的交集。所有這類政策中的明確拒絕都會覆寫該允許。如需有關工作階段政策的詳細資訊,請參閱工作階段政策

評估工作階段政策、許可界限和以身分為基礎的政策

使用許可界限委派責任給他人

您可以使用權限界限將權限管理工作 (例如使用者建立) 委派給帳IAM戶中的使用者。這允許其他人在特定許可界限內代替您執行任務。

例如,假設瑪麗亞是 X AWS 帳戶公司的管理員。她想要委派使用者建立責任給 Zhang。不過,她必須確保 Zhang 建立的使用者遵守下列公司規則:

  • 使用者無法用IAM來建立或管理使用者、群組、角色或策略。

  • 使用者遭到拒絕存取 Amazon S3 儲存logs貯體,且無法存取 i-1234567890abcdef0 Amazon EC2 執行個體。

  • 使用者無法移除自己的界限政策。

為了強制執行這些規則,María 完成以下任務,其包含以下詳細資訊:

  1. María 建立 XCompanyBoundaries 受管政策以針對帳戶中所有的新的使用者,當成許可界限使用。

  2. María 建立 DelegatedUserBoundary 受管政策,並將其指派為 Zhang 的許可界限。Maria 記下她的管理員使用者,ARN並在政策中使用它來防止張氏存取它。

  3. María 建立 DelegatedUserPermissions 受管政策,並將其連接為 Zhang 的許可政策。

  4. María 告訴 Zhang 有關他的新責任和限制。

任務 1:María 必須先建立受管政策來定義新使用者的界限。María 將允許 Zhang 提供使用者所需的許可政策,但她希望這些使用者受到限制。為了執行此操作,她建立以下客戶受管政策,名稱為 XCompanyBoundaries。此政策會執行下列動作:

  • 可讓使用者完整存取數個服務

  • 允許在IAM主控台中有限的自我管理存取。這表示他們可以在登入主控台之後變更密碼。也無法設定其初始密碼。若要允許此操作,請將 "*LoginProfile" 動作加入 AllowManageOwnPasswordAndAccessKeys 陳述式。

  • 拒絕使用者存取 Amazon S3 日誌儲存貯體或 i-1234567890abcdef0 Amazon EC2 執行個體

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ServiceBoundaries", "Effect": "Allow", "Action": [ "s3:*", "cloudwatch:*", "ec2:*", "dynamodb:*" ], "Resource": "*" }, { "Sid": "AllowIAMConsoleForCredentials", "Effect": "Allow", "Action": [ "iam:ListUsers", "iam:GetAccountPasswordPolicy" ], "Resource": "*" }, { "Sid": "AllowManageOwnPasswordAndAccessKeys", "Effect": "Allow", "Action": [ "iam:*AccessKey*", "iam:ChangePassword", "iam:GetUser", "iam:*ServiceSpecificCredential*", "iam:*SigningCertificate*" ], "Resource": ["arn:aws:iam::*:user/${aws:username}"] }, { "Sid": "DenyS3Logs", "Effect": "Deny", "Action": "s3:*", "Resource": [ "arn:aws:s3:::logs", "arn:aws:s3:::logs/*" ] }, { "Sid": "DenyEC2Production", "Effect": "Deny", "Action": "ec2:*", "Resource": "arn:aws:ec2:*:*:instance/i-1234567890abcdef0" } ] }

每個陳述式提供不同的用途:

  1. 此原則的ServiceBoundaries陳述式允許完整存取指定的 AWS 服務。這表示新使用者在這些服務的動作,僅受限於連接到使用者的許可政策。

  2. AllowIAMConsoleForCredentials語句允許訪問列出所有IAM用戶。這個存取權是導覽 AWS Management Console中 Users (使用者) 頁面的必要條件。它也允許檢視帳戶的密碼要求,而這是變更您自身密碼時的必要程序。

  3. AllowManageOwnPasswordAndAccessKeys 陳述式允許使用者僅管理自己的主控台密碼和程式設計存取金鑰。如果張或其他管理員為新使用者指派具有完整IAM存取權限的權限原則,這一點很重要。在這種情況下,該使用者可能會變更自己的或其他使用者的許可。此陳述式可避免此種情況發生。

  4. DenyS3Logs 陳述式明確拒絕存取 logs 儲存貯體。

  5. DenyEC2Production 陳述式明確拒絕存取 i-1234567890abcdef0 執行個體。

任務 2:María 想要允許 Zhang 建立所有 X-Company 使用者,但只允許 XCompanyBoundaries 許可界限。她建立以下客戶受管政策,名稱為 DelegatedUserBoundary。此政策定義 Zhang 可以擁有的許可上限。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateOrChangeOnlyWithBoundary", "Effect": "Allow", "Action": [ "iam:AttachUserPolicy", "iam:CreateUser", "iam:DeleteUserPolicy", "iam:DetachUserPolicy", "iam:PutUserPermissionsBoundary", "iam:PutUserPolicy" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PermissionsBoundary": "arn:aws:iam::123456789012:policy/XCompanyBoundaries" } } }, { "Sid": "CloudWatchAndOtherIAMTasks", "Effect": "Allow", "Action": [ "cloudwatch:*", "iam:CreateAccessKey", "iam:CreateGroup", "iam:CreateLoginProfile", "iam:CreatePolicy", "iam:DeleteGroup", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:DeleteUser", "iam:GetAccountPasswordPolicy", "iam:GetGroup", "iam:GetLoginProfile", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRolePolicy", "iam:GetUser", "iam:GetUserPolicy", "iam:ListAccessKeys", "iam:ListAttachedRolePolicies", "iam:ListAttachedUserPolicies", "iam:ListEntitiesForPolicy", "iam:ListGroups", "iam:ListGroupsForUser", "iam:ListMFADevices", "iam:ListPolicies", "iam:ListPolicyVersions", "iam:ListRolePolicies", "iam:ListSSHPublicKeys", "iam:ListServiceSpecificCredentials", "iam:ListSigningCertificates", "iam:ListUserPolicies", "iam:ListUsers", "iam:SetDefaultPolicyVersion", "iam:SimulateCustomPolicy", "iam:SimulatePrincipalPolicy", "iam:UpdateGroup", "iam:UpdateLoginProfile", "iam:UpdateUser" ], "NotResource": "arn:aws:iam::123456789012:user/Maria" }, { "Sid": "NoBoundaryPolicyEdit", "Effect": "Deny", "Action": [ "iam:CreatePolicyVersion", "iam:DeletePolicy", "iam:DeletePolicyVersion", "iam:SetDefaultPolicyVersion" ], "Resource": [ "arn:aws:iam::123456789012:policy/XCompanyBoundaries", "arn:aws:iam::123456789012:policy/DelegatedUserBoundary" ] }, { "Sid": "NoBoundaryUserDelete", "Effect": "Deny", "Action": "iam:DeleteUserPermissionsBoundary", "Resource": "*" } ] }

每個陳述式提供不同的用途:

  1. 這個CreateOrChangeOnlyWithBoundary陳述式允許張建立使用IAM者,但前提是他使用XCompanyBoundaries原則來設定權限界限。此陳述式也可讓他為現有的使用者設定許可界限,但只能使用該相同政策。最後,此陳述式讓 Zhang 管理具此許可界限設定之使用者的許可政策。

  2. CloudWatchAndOtherIAMTasks 陳述式允許 Zhang 完成其他使用者、群組和政策管理任務。他有權重設密碼,並為未列在NotResource策略元素中的任何IAM使用者建立存取金鑰。這可讓 Zhang 協助使用者解決登入問題。

  3. NoBoundaryPolicyEdit 陳述式拒絕 Zhang 存取更新 XCompanyBoundaries 政策。他不被允許變更任何用於設定他自己或其他使用者的許可界限的政策。

  4. NoBoundaryUserDelete 陳述式拒絕讓 Zhang 存取刪除他自己或其他使用者的許可界限。

然後,María 針對 Zhang 使用者將 DelegatedUserBoundary 政策分派許可界限

任務 3:由於許可界限限制許可上限,但不自行授予存取權,因此 Maria 必須為 Zhang 建立許可政策。她建立以下政策,名稱為 DelegatedUserPermissions。此政策定義在已定義的界限內,Zhang 可以執行的操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "IAM", "Effect": "Allow", "Action": "iam:*", "Resource": "*" }, { "Sid": "CloudWatchLimited", "Effect": "Allow", "Action": [ "cloudwatch:GetDashboard", "cloudwatch:GetMetricData", "cloudwatch:ListDashboards", "cloudwatch:GetMetricStatistics", "cloudwatch:ListMetrics" ], "Resource": "*" }, { "Sid": "S3BucketContents", "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::ZhangBucket" } ] }

每個陳述式提供不同的用途:

  1. 該政策的IAM聲明允許張完全訪問IAM。不過,由於他的權限邊界只允許某些IAM作業,所以他的有效IAM權限只受其權限界限的限制。

  2. CloudWatchLimited聲明允許張在中執行五個操作 CloudWatch。他的權限邊界允許中的所有操作 CloudWatch,因此他的有效 CloudWatch 權限僅受其權限策略的限制。

  3. S3BucketContents 陳述式允許 Zhang 列出 ZhangBucket Amazon S3 儲存貯體。不過,他的許可界限不允許任何 Amazon S3 動作,因此他無法執行任何 S3 操作,無論他是否有許可政策。

    注意

    Zhang 的政策允許其建立一個使用者,此使用者可存取 Zhang 無法存取的 Amazon S3 資源。透過委派這些管理動作,Maria 利用 Amazon S3 存取權以有效方式信任了 Zhang。

接著,María 將 DelegatedUserPermissions 政策連接為 Zhang 使用者的許可政策。

任務 4:她提供 Zhang 有關建立新使用者的指示。她通知他可以建立具備所需的任何許可的新使用者,但他必須將 XCompanyBoundaries 政策指派給他們做為許可界限。

Zhang 完成下列任務:

  1. 張建立的使用者使用 AWS Management Console. 他輸入使用者名稱 Nikhil,並啟用該使用者的主控台存取權。他會清除 [需要重設密碼] 旁邊的核取方塊,因為上述策略只允許使用者在登入IAM主控台後變更其密碼。

  2. 在「設定權限」頁面上,張選擇允許 Nikhil 完成工作的IAMFullAccessAmazonS3 ReadOnlyAccess 許可政策。

  3. Zhang 忘了 María 的指示,略過 Set permissions boundary (設定許可界限) 區段。

  4. Zhang 檢閱使用者詳細資訊,然後選擇 Create user (建立使用者)

    操作失敗,存取遭拒。Zhang 的 DelegatedUserBoundary 許可界限要求他所建立的任何使用者都將 XCompanyBoundaries 政策當做許可界限來使用。

  5. Zhang 返回到之前的頁面。在 Set permissions boundary (設定許可界限) 區段中,他選擇了 XCompanyBoundaries 政策。

  6. Zhang 檢閱使用者詳細資訊,然後選擇 Create user (建立使用者)

    使用者已建立。

當 Nikhil 登錄時,他可以訪問IAM和 Amazon S3,但許可邊界拒絕的操作除外。例如,他可以在中變更自己的密碼,IAM但無法建立其他使用者或編輯其策略。Nikhil 只有 Amazon S3 的讀取存取權。

如果有人將資源類型政策新增至 logs 儲存貯體,而讓 Nikhil 在儲存貯體中放入物件,則他仍然無法存取該儲存貯體。原因在於對 logs 儲存貯體執行的任何動作,均會受到其許可界限的明確拒絕。任何政策類型中的明確拒絕,都會導致請求遭到拒絕。不過,如果 Secrets Manager 秘密連接的以資源為基礎的政策允許 Nikhil 執行 – secretsmanager:GetSecretValue動作,則 Nikhil 可以擷取和解密該秘密。原因在於這項許可界限並未明確拒絕上述 Secrets Manager 操作,而且許可界限的隱含拒絕不會限制資源類型政策。