

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

# 建立許可界限
<a name="creating-a-permissions-boundary"></a>

部署許可集之後，您會建立許可界限。此*許可界限*是一種機制，它將 IAM 存取權僅委派給正在開發、測試、啟動和管理雲端基礎設施的使用者。這些使用者只能執行政策和許可界限允許的動作。

您可以在 AWS CloudFormation 範本中定義許可界限，然後使用 CloudFormation StackSets 將範本部署到多個帳戶。這可協助您透過單一操作在整個組織中建立和維護標準化政策。如需詳細資訊和指示，請參閱[使用 AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) (CloudFormation 文件)。

下列 CloudFormation 範本會佈建 IAM 角色，並建立作為許可界限的 IAM 政策。使用堆疊集，可以將此範本部署到組織中的所有成員帳戶。

```
CloudFormationRole:
  Type: "AWS::IAM::Role"
  Properties:
    AssumeRolePolicyDocument:
      Version: "2012-10-17"
      Statement:
        Effect: Allow
        Principal:
          Service: !Sub "cloudformation.${AWS::URLSuffix}"
        Action: "sts:AssumeRole"
        Condition:
          StringEquals:
            "aws:SourceAccount": !Ref "AWS::AccountId"
    Description: !Sub "DO NOT DELETE - Used by CloudFormation. Created by CloudFormation ${AWS::StackId}"
    ManagedPolicyArns:
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AdministratorAccess"
    PermissionsBoundary: !Ref DeveloperBoundary
    RoleName: CloudFormationRole

DeveloperBoundary:
  Type: "AWS::IAM::ManagedPolicy"
  Properties:
    Description: Permission boundary for developers
    ManagedPolicyName: PermissionsBoundary
    PolicyDocument:
      Version: "2012-10-17"
      Statement:
        - Sid: AllowModifyIamRolesWithBoundary
          Effect: Allow
          Action:
            - "iam:AttachRolePolicy"
            - "iam:CreateRole"
            - "iam:DeleteRolePolicy"
            - "iam:DetachRolePolicy"
            - "iam:PutRolePermissionsBoundary"
            - "iam:PutRolePolicy"
          Resource: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/app/*"
          Condition:
            ArnEquals:
              "iam:PermissionsBoundary": !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/PermissionsBoundary"
        - Sid: AllowModifyIamRoles
          Effect: Allow
          Action:
            - "iam:DeleteRole"
            - "iam:TagRole"
            - "iam:UntagRole"
            - "iam:UpdateAssumeRolePolicy"
            - "iam:UpdateRole"
            - "iam:UpdateRoleDescription"
          Resource: !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/app/*"
        - Sid: OverlyPermissiveAllowedServices
          Effect: Allow
          Action:
            - "lambda:*"
            - "apigateway:*"
            - "events:*"
            - "s3:*"
            - "logs:*"
          Resource: "*"
```

**CloudFormationRole** 角色、**PermissionsBoundary** 政策以及 **DeveloperAccess** 許可集共同運作以授與下列許可：
+ 使用者 AWS 服務可透過 **ReadOnlyAccess** AWS 受管政策，對大多數使用者進行唯讀存取。
+ 使用者可以透過 **AWSSupportAccess** AWS 受管政策存取開啟的支援案例。
+ 使用者可透過 **AWSBillingReadOnlyAccess** AWS 受管政策來唯讀存取 AWS Billing 主控台儀表板。
+ 使用者可以透過 **AWSServiceCatalogEndUserFullAccess** AWS 受管政策，從 Service Catalog 佈建產品。
+ 使用者可以透過內嵌政策來驗證和估算任何 CloudFormation 範本的成本。
+ 透過使用 **CloudFormationRole** IAM 角色，使用者可以建立、更新或刪除任何以 **app/** 開始的 CloudFormation 堆疊。
+ 使用者可以使用 CloudFormation 來建立、更新或刪除以 **app/** 開頭的 IAM 角色 。**PermissionsBoundary** IAM 政策可防止使用者提升其權限。
+ 使用者只能使用 CloudFormation 佈建 AWS Lambda Amazon EventBridge、Amazon CloudWatch、Amazon Simple Storage Service (Amazon S3) 和 Amazon API Gateway 資源。

下圖顯示了授權使用者 (例如開發人員) 如何使用本指南中所描述的許可集、IAM 角色和許可界限，在成員帳戶中建立新的 IAM 角色：

1. 使用者會在 IAM Identity Center 進行驗證，並承擔 **DeveloperAccess** IAM 角色。

1. 使用者會啟動 `cloudformation:CreateStack` 動作，並承擔 **CloudFormationRole** IAM 角色。

1. 使用者會啟動 `iam:CreateRole` 動作並使用 CloudFormation 建立新的 IAM 角色。

1. **PermissionsBoundary** IAM 政策會套用至新的 IAM 角色。



![\[建立 IAM 角色的使用者受成員帳戶中許可界限的約束\]](http://docs.aws.amazon.com/zh_tw/prescriptive-guidance/latest/transitioning-to-multiple-aws-accounts/images/2_create-iam-role.png)


**CloudFormationRole** 角色已附接 [AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator) 受管政策，但由於 **PermissionsBoundary** IAM 政策，**CloudFormationRole** 角色的有效許可等同於 **PermissionsBoundary** 政策。**PermissionsBoundary** 政策在允許 `iam:CreateRole` 動作時會參照本身，這可確保只有在套用許可界限時才能建立角色。