

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Mengelola izin dan akses untuk arsitektur multi-akun
<a name="managing-permissions"></a>

**Topics**
+ [Pertimbangan budaya teknik](engineering-cultural-considerations.md)
+ [Membuat set izin](creating-permission-sets.md)
+ [Membuat batas izin](creating-a-permissions-boundary.md)
+ [Mengelola izin untuk individu](managing-permissions-for-individuals.md)

# Pertimbangan budaya teknik
<a name="engineering-cultural-considerations"></a>

Salah satu pilar dari AWS Well-Architected Framework adalah Operational Excellence. Tim harus memahami [model operasi](https://docs.aws.amazon.com/wellarchitected/latest/operational-excellence-pillar/operating-model.html) dan peran mereka dalam mencapai hasil bisnis Anda. Tim dapat fokus pada pencapaian tujuan bersama ketika mereka memahami tanggung jawab mereka, dapat mengambil kepemilikan, dan mengetahui bagaimana keputusan dibuat.

Dengan perusahaan tahap awal yang membangun dengan cepat, semua orang di tim melakukan banyak peran. Tidak jarang bagi pengguna ini untuk memiliki akses yang sangat istimewa ke keseluruhan. Akun AWS Seiring pertumbuhan perusahaan, mereka sering ingin mengikuti prinsip *hak istimewa paling sedikit* dan hanya memberikan izin yang diperlukan bagi pengguna untuk melakukan pekerjaan mereka. Untuk membantu Anda membatasi cakupan, Anda dapat menggunakan [AWS Identity and Access Management Access Analyzer](https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html)untuk melihat izin apa yang sebenarnya digunakan oleh pengguna atau peran IAM, sehingga Anda dapat menghapus izin berlebih.

Mungkin sulit untuk memutuskan siapa di perusahaan Anda yang memiliki izin untuk membuat peran IAM. Ini biasanya merupakan vektor untuk meningkatkan hak istimewa. Meningkatnya hak istimewa adalah ketika pengguna dapat memperluas izin atau cakupan akses mereka sendiri. Misalnya, jika pengguna memiliki izin terbatas tetapi dapat membuat peran IAM baru, pengguna tersebut dapat meningkatkan hak istimewa mereka dengan membuat dan mengasumsikan peran IAM baru yang menerapkan kebijakan terkelola. `AdministratorAccess`

Beberapa perusahaan membatasi penyediaan peran IAM ke tim individu tepercaya yang terpusat. Kelemahan dari pendekatan ini adalah bahwa tim ini dapat dengan cepat menjadi hambatan karena hampir semua Layanan AWS memerlukan peran IAM untuk beroperasi. Sebagai alternatif, Anda dapat menggunakan [batas izin](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_boundaries.html) untuk mendelegasikan akses IAM hanya kepada pengguna yang mengembangkan, menguji, meluncurkan, dan mengelola infrastruktur cloud Anda. Misalnya kebijakan, lihat [Contoh Batas Izin](https://github.com/aws-samples/example-permissions-boundary) (GitHub).

Tim operasi pengembangan (DevOps), juga dikenal sebagai tim *platform*, sering perlu menyeimbangkan kemampuan layanan mandiri untuk beberapa tim pengembangan internal terhadap stabilitas operasional aplikasi. Membina budaya teknik yang mencakup otonomi, penguasaan, dan tujuan di tempat kerja dapat membantu memotivasi tim. Insinyur ingin melakukan pekerjaan mereka dengan cara yang diarahkan sendiri, tanpa bergantung pada orang lain untuk melakukan sesuatu untuk mereka. Jika DevOps tim dapat menerapkan solusi swalayan, ini juga mengurangi jumlah waktu orang lain bergantung pada mereka untuk menyelesaikan sesuatu.

# Membuat set izin
<a name="creating-permission-sets"></a>

Anda dapat mengelola Akun AWS akses dengan menggunakan [set izin](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html) di AWS IAM Identity Center. *Kumpulan izin* adalah templat yang membantu Anda menerapkan satu atau beberapa kebijakan IAM ke beberapa. Akun AWS Saat Anda menetapkan izin yang disetel ke Akun AWS, Pusat Identitas IAM akan membuat peran IAM dan melampirkan kebijakan IAM Anda ke peran tersebut. Untuk informasi selengkapnya, lihat [Membuat dan mengelola set izin](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsets.html) (dokumentasi Pusat Identitas IAM).

AWS merekomendasikan membuat set izin yang memetakan ke persona yang berbeda dalam bisnis Anda.

**Topics**
+ [Set izin penagihan](#billing-permission-set)
+ [Set izin pengembang](#developer-permission-set)
+ [Set izin produksi](#production-permission-set)

Set izin berikut adalah cuplikan dari template. AWS CloudFormation Anda harus menggunakan kode ini sebagai titik awal dan menyesuaikannya untuk bisnis Anda. Untuk informasi selengkapnya tentang CloudFormation templat, lihat [Pelajari dasar-dasar templat](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/gettingstarted.templatebasics.html) (CloudFormation dokumentasi).

## Set izin penagihan
<a name="billing-permission-set"></a>

Tim keuangan menggunakan **BillingAccessPermissionSet**untuk melihat dasbor AWS Billing konsol dan AWS Cost Explorer di setiap akun.

```
BillingAccessPermissionSet:
  Type: "AWS::SSO::PermissionSet"
  Properties:
    Description: Access to Billing and Cost Explorer
    InstanceArn: !Sub "arn:${AWS::Partition}:sso:::instance/ssoins-instanceId"
    ManagedPolicies:
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/job-function/Billing"
    Name: BillingAccess
    SessionDuration: PT8H
    RelayStateType: https://console.aws.amazon.com/billing/home
```

## Set izin pengembang
<a name="developer-permission-set"></a>

Tim teknik menggunakan **DeveloperAccessPermissionSet**untuk mengakses akun non-produksi.

```
DeveloperAccessPermissionSet:
  Type: "AWS::SSO::PermissionSet"
  Properties:
    Description: Access to provision resources through CloudFormation
    InlinePolicy: !Sub |-
      {
        "Version": "2012-10-17", 		 	 	 		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:${AWS::Partition}:iam::*:role/CloudFormationRole",
            "Condition": {
              "StringEquals": {
                "aws:ResourceAccount": "${!aws:PrincipalAccount}",
                "iam:PassedToService": "cloudformation.${AWS::URLSuffix}"
              }
            }
          },
          {
            "Effect": "Allow",
            "Action": [
              "cloudformation:ContinueUpdateRollback",
              "cloudformation:CreateChangeSet",
              "cloudformation:CreateStack",
              "cloudformation:DeleteStack",
              "cloudformation:RollbackStack",
              "cloudformation:UpdateStack"
            ],
            "Resource": "arn:${AWS::Partition}:cloudformation:*:*:stack/app-*",
            "Condition": {
              "ArnLike": {
                "cloudformation:RoleArn": "arn:${AWS::Partition}:iam::${!aws:PrincipalAccount}:role/CloudFormationRole"
              },
              "Null": {
                "cloudformation:ImportResourceTypes": true
              }
            }
          },
          {
            "Effect": "Allow",
            "Action": [
              "cloudformation:CancelUpdateStack",
              "cloudformation:DeleteChangeSet",
              "cloudformation:DetectStackDrift",
              "cloudformation:DetectStackResourceDrift",
              "cloudformation:ExecuteChangeSet",
              "cloudformation:TagResource",
              "cloudformation:UntagResource",
              "cloudformation:UpdateTerminationProtection"
            ],
            "Resource": "arn:${AWS::Partition}:cloudformation:*:*:stack/app-*"
          },
          {
           "Effect": "Allow",
            "Action": [
              "cloudformation:CreateUploadBucket",
              "cloudformation:ValidateTemplate",
              "cloudformation:EstimateTemplateCost"
            ],
            "Resource": "*"
          }
        ]
      }
    InstanceArn: !Sub "arn:${AWS::Partition}:sso:::instance/ssoins-instanceId"
    ManagedPolicies:
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AWSServiceCatalogEndUserFullAccess"
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AWSBillingReadOnlyAccess"
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AWSSupportAccess"
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/ReadOnlyAccess"
    Name: DeveloperAccess
    SessionDuration: PT8H
```

## Set izin produksi
<a name="production-permission-set"></a>

Tim teknik menggunakan **ProductionPermissionSet**untuk mengakses akun produksi. Set izin ini memiliki akses terbatas hanya lihat.

```
ProductionPermissionSet:
  Type: "AWS::SSO::PermissionSet"
  Properties:
    Description: Access to production accounts
    InlinePolicy: !Sub |-
      {
        "Version": "2012-10-17", 		 	 	 		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:${AWS::Partition}:iam::*:role/CloudFormationRole",
            "Condition": {
              "StringEquals": {
                "aws:ResourceAccount": "${!aws:PrincipalAccount}",
                "iam:PassedToService": "cloudformation.${AWS::URLSuffix}"
              }
            }
          },
          {
            "Effect": "Allow",
            "Action": "cloudformation:ContinueUpdateRollback",
            "Resource": "arn:${AWS::Partition}:cloudformation:*:*:stack/app-*",
            "Condition": {
              "ArnLike": {
                "cloudformation:RoleArn": "arn:${AWS::Partition}:iam::${!aws:PrincipalAccount}:role/CloudFormationRole"
              }
            }
          },
          {
            "Effect": "Allow",
            "Action": "cloudformation:CancelUpdateStack",
            "Resource": "arn:${AWS::Partition}:cloudformation:*:*:stack/app-*"
          }
        ]
      }
    InstanceArn: !Sub "arn:${AWS::Partition}:sso:::instance/ssoins-instanceId"
    ManagedPolicies:
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AWSBillingReadOnlyAccess"
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/AWSSupportAccess"
      - !Sub "arn:${AWS::Partition}:iam::aws:policy/job-function/ViewOnlyAccess"
    Name: ProductionAccess
    SessionDuration: PT2H
```

# Membuat batas izin
<a name="creating-a-permissions-boundary"></a>

Setelah menerapkan set izin, Anda menetapkan batas izin. *Batas izin ini adalah mekanisme* untuk mendelegasikan akses IAM hanya kepada pengguna yang mengembangkan, menguji, meluncurkan, dan mengelola infrastruktur cloud Anda. Pengguna tersebut hanya dapat melakukan tindakan yang diizinkan oleh kebijakan dan batas izin.

Anda dapat menentukan batas izin dalam AWS CloudFormation template dan kemudian menggunakan CloudFormation StackSets untuk menyebarkan template ke beberapa akun. Ini membantu Anda menetapkan dan memelihara kebijakan standar di seluruh organisasi Anda dengan satu operasi. Untuk informasi dan petunjuk selengkapnya, lihat [Bekerja dengan AWS CloudFormation StackSets](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/what-is-cfnstacksets.html) (CloudFormation dokumentasi).

 CloudFormation Template berikut menyediakan peran IAM dan membuat kebijakan IAM yang bertindak sebagai batas izin. Dengan menggunakan kumpulan tumpukan, Anda dapat menerapkan template ini ke semua akun anggota di organisasi Anda.

```
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**Peran, **PermissionsBoundary**kebijakan, dan set **DeveloperAccess**izin bekerja sama untuk memberikan izin berikut:
+ Pengguna memiliki akses hanya-baca ke sebagian besar Layanan AWS, melalui kebijakan **ReadOnlyAccess** AWS terkelola.
+ Pengguna memiliki akses ke kasus dukungan terbuka, melalui kebijakan yang AWS dikelola **AWSSupportAccess**.
+ Pengguna memiliki akses hanya-baca ke dasbor AWS Billing konsol, melalui kebijakan **AWSBillingReadOnlyAccess** AWS terkelola.
+ Pengguna dapat menyediakan produk dari Service Catalog, melalui kebijakan yang **AWSServiceCatalogEndUserFullAccess** AWS dikelola.
+ Pengguna dapat memvalidasi dan memperkirakan biaya CloudFormation template apa pun, melalui kebijakan inline.
+ Dengan menggunakan peran **CloudFormationRole**IAM, pengguna dapat membuat, memperbarui, atau menghapus CloudFormation tumpukan apa pun yang dimulai dengan **app/**.
+ Pengguna dapat menggunakan CloudFormation untuk membuat, memperbarui, atau menghapus peran IAM yang dimulai dengan **app/**. Kebijakan **PermissionsBoundary**IAM mencegah pengguna meningkatkan hak istimewa mereka.
+ Pengguna dapat menyediakan sumber daya Amazon AWS Lambda EventBridge, Amazon CloudWatch, Amazon Simple Storage Service (Amazon S3), dan Amazon API Gateway hanya dengan menggunakan. CloudFormation

Gambar berikut menunjukkan bagaimana pengguna yang berwenang, seperti pengembang, dapat membuat peran IAM baru di akun anggota dengan menggunakan set izin, peran IAM, dan batas izin yang dijelaskan dalam panduan ini:

1. Pengguna mengautentikasi di IAM Identity Center dan mengasumsikan peran IAM. **DeveloperAccess**

1. Pengguna memulai `cloudformation:CreateStack` tindakan dan mengasumsikan peran **CloudFormationRole**IAM.

1. Pengguna memulai `iam:CreateRole` tindakan dan menggunakan CloudFormation untuk membuat peran IAM baru.

1. Kebijakan **PermissionsBoundary**IAM diterapkan pada peran IAM baru.



![\[Pengguna membuat peran IAM yang tunduk pada batas izin di akun anggota\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/transitioning-to-multiple-aws-accounts/images/2_create-iam-role.png)


**CloudFormationRole**Peran tersebut memiliki kebijakan [AdministratorAccess](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions.html#jf_administrator)terkelola yang dilampirkan, tetapi karena kebijakan **PermissionsBoundary**IAM, izin efektif **CloudFormationRole**peran menjadi sama dengan kebijakan. **PermissionsBoundary** **PermissionsBoundary**Kebijakan mereferensikan dirinya sendiri saat mengizinkan `iam:CreateRole` tindakan, yang memastikan bahwa peran hanya dapat dibuat jika batas izin diterapkan.

# Mengelola izin untuk individu
<a name="managing-permissions-for-individuals"></a>

Dengan menggunakan set izin, batas izin, dan peran **CloudFormationRole**IAM, Anda dapat membatasi jumlah izin yang perlu Anda tetapkan langsung ke masing-masing kepala sekolah. Ini membantu Anda mengelola akses saat perusahaan Anda tumbuh dan membantu Anda menerapkan praktik terbaik keamanan untuk memberikan hak istimewa paling sedikit.

Anda juga dapat menggunakan *peran terkait layanan*, yang memberikan izin ke AWS layanan untuk menyediakan sumber daya atas nama Anda. Alih-alih memberikan izin kepada prinsipal IAM (pengguna, grup pengguna, atau peran), Anda dapat memberikan izin ke layanan. Misalnya, peran terkait layanan [AWS Service Catalog](https://docs.aws.amazon.com/servicecatalog/latest/adminguide/introduction.html)memungkinkan Anda menyediakan templat, sumber daya, dan lingkungan Anda sendiri, tanpa menetapkan izin ke prinsipal IAM. Untuk informasi selengkapnya, lihat [Layanan AWS yang bekerja dengan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html) dan [Menggunakan peran terkait layanan](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html) (dokumentasi IAM).

Praktik terbaik lainnya adalah membatasi jumlah akses yang dimiliki individu ke Konsol Manajemen AWS. [Dengan membatasi akses ke konsol, Anda dapat meminta individu untuk menyediakan sumber daya dengan menggunakan teknologi infrastruktur sebagai kode (IAc), seperti, [HashiCorp Terraform [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)](https://www.terraform.io/), atau Pulumi.](https://www.pulumi.com/) Mengelola infrastruktur melalui IAc Anda untuk melacak perubahan sumber daya dari waktu ke waktu dan memperkenalkan mekanisme untuk menyetujui perubahan, seperti permintaan GitHub tarik.