

• AWS Systems Manager CloudWatch 대시보드는 2026년 4월 30일 이후에는 더 이상 사용할 수 없습니다. 고객은 Amazon CloudWatch 콘솔을 계속 사용하여 현재와 마찬가지로 Amazon CloudWatch 대시보드를 보고, 생성하고, 관리할 수 있습니다. 자세한 내용은 [Amazon CloudWatch 대시보드 설명서](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)를 참조하세요.

# AWS CLI를 사용한 유지 관리 기간에 대한 액세스 제어
<a name="configuring-maintenance-window-permissions-cli"></a>

다음 절차에서는 AWS Command Line Interface(AWS CLI)를 사용하여 AWS Systems Manager의 도구인 Maintenance Windows에 대한 필수 권한 및 역할을 생성하는 방법을 설명합니다.

**Topics**
+ [작업 1: 신뢰 정책 및 고객 관리형 정책 파일을 JSON 형식으로 생성](#create-custom-policy-json-files-cli)
+ [태스크 2: AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성 및 확인](#create-custom-role-cli)
+ [태스크 3: AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 있는 권한을 지정된 사용자에게 부여](#allow-maintenance-window-access-cli)
+ [태스크 4: 지정된 사용자가 AWS CLI를 사용하여 유지 관리 기간 태스크를 등록하지 못하도록 방지](#deny-maintenance-window-access-cli)

## 작업 1: 신뢰 정책 및 고객 관리형 정책 파일을 JSON 형식으로 생성
<a name="create-custom-policy-json-files-cli"></a>

유지 관리 기간 작업에는 대상 리소스에서 실행하는 데 필요한 권한을 제공하기 위해 IAM 역할이 필요합니다. 권한은 역할에 연결된 IAM 정책을 통해 제공됩니다. 실행하는 작업 유형 및 기타 운영 요구 사항에 따라 이 정책의 내용이 결정됩니다. 필요에 따라 조정할 수 있는 기본 정책을 제공합니다. 유지 관리 기간이 실행되는 작업 및 작업 유형에 따라 이 정책의 일부 권한이 필요하지 않을 수 있으며, 추가 사용 권한을 포함해야 할 수도 있습니다.

이 태스크에서는 사용자 지정 유지 관리 기간 역할에 필요한 권한을 JSON 파일 페어에 지정합니다. 이후 [태스크 2: AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성 및 확인](#create-custom-role-cli)에서 이 정책을 해당 역할에 연결합니다.

**신뢰 정책 및 고객 관리형 정책 파일을 JSON 형식으로 생성하려면**

1. 다음 신뢰 정책을 복사하여 텍스트 파일에 붙여 넣습니다. 파일을 **mw-role-trust-policy.json**이라는 이름 및 파일 확장자로 저장합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 다음 JSON 정책을 복사하여 다른 텍스트 파일에 붙여 넣습니다. 첫 번째 파일을 만든 디렉터리에 이 파일을 **mw-role-custom-policy.json**이라는 이름과 파일 확장자로 저장합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "ssm:SendCommand",
                   "ssm:CancelCommand",
                   "ssm:ListCommands",
                   "ssm:ListCommandInvocations",
                   "ssm:GetCommandInvocation",
                   "ssm:GetAutomationExecution",
                   "ssm:StartAutomationExecution",
                   "ssm:ListTagsForResource",
                   "ssm:GetParameters"
               ],
               "Resource": "*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "states:DescribeExecution",
                   "states:StartExecution"
               ],
               "Resource": [
                   "arn:aws:states:*:*:execution:*:*",
                   "arn:aws:states:*:*:stateMachine:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "lambda:InvokeFunction"
               ],
               "Resource": [
                   "arn:aws:lambda:*:*:function:*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "resource-groups:ListGroups",
                   "resource-groups:ListGroupResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": [
                   "tag:GetResources"
               ],
               "Resource": [
                   "*"
               ]
           },
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::{{111122223333}}:role/{{maintenance-window-role-name}}",
               "Condition": {
                   "StringEquals": {
                       "iam:PassedToService": [
                           "ssm.amazonaws.com"
                       ]
                   }
               }
           }
       ]
   }
   ```

------

1. 계정에서 실행하는 유지 관리 태스크에 필요한 경우 `mw-role-custom-policy.json`의 콘텐츠를 수정합니다. 변경 사항은 계획된 작업에 따라 다릅니다.

   예:
   + 와일드카드(\*) 한정자를 사용하는 대신 특정 함수 및 상태 머신에 Amazon 리소스 이름(ARN)을 제공할 수 있습니다.
   + AWS Step Functions 작업을 실행할 계획이 없는 경우 `states` 권한 및 ARN을 제거할 수 있습니다.
   + AWS Lambda 작업을 실행할 계획이 없는 경우 `lambda` 권한 및 ARN을 제거할 수 있습니다.
   + Automation 작업을 실행할 계획이 없는 경우 `ssm:GetAutomationExecution` 및 `ssm:StartAutomationExecution` 권한을 제거할 수 있습니다.
   + 작업을 실행하는 데 필요할 수 있는 권한을 추가합니다. 예를 들어 일부 자동화 작업은 AWS CloudFormation 스택과 함께 작동합니다. 따라서 `cloudformation:CreateStack`, `cloudformation:DescribeStacks` 및 `cloudformation:DeleteStack` 권한이 필요합니다.

     다른 예를 들어 Automation 실행서 `AWS-CopySnapshot`의 경우 Amazon Elastic Block Store(Amazon EBS) 스냅샷을 생성할 수 있는 권한이 필요합니다. 따라서 서비스 역할에 `ec2:CreateSnapshot` 권한이 필요합니다.

     Automation 런북에 필요한 역할 권한에 대한 자세한 내용은 [AWS Systems Manager Automation 런북 참조](https://docs.aws.amazon.com/systems-manager-automation-runbooks/latest/userguide/automation-runbook-reference.html)의 런북 설명을 참조하세요.

   필요한 사항을 변경한 후 파일을 다시 저장합니다.

## 태스크 2: AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성 및 확인
<a name="create-custom-role-cli"></a>

이전 태스크에서 만든 정책이 이 태스크에서 만드는 유지 관리 기간 서비스 역할에 첨부됩니다. 사용자가 유지 관리 기간 태스크를 등록할 때 해당 IAM 역할을 작업 구성의 일부로 지정합니다. 이 역할의 권한을 통해 Systems Manager가 사용자 대신 유지 관리 기간에서 작업을 실행할 수 있습니다.

**중요**  
이전에는 Systems Manager 콘솔에서 작업에 대한 유지 관리 역할로 사용하도록 AWS에서 관리하는 IAM 서비스 연결 역할인 `AWSServiceRoleForAmazonSSM`을 선택할 수 있었습니다. 유지 관리 기간에 이 역할 및 관련 정책인 `AmazonSSMServiceRolePolicy`를 사용하는 것은 더 이상 권장되지 않습니다. 현재 유지 관리 기간 작업에 이 역할을 사용하는 경우 사용을 중지하는 것이 좋습니다. 대신, 유지 관리 기간 작업 실행 시 Systems Manager와 다른 AWS 서비스 간에 통신을 가능하게 하는 IAM 역할을 생성하세요.

이 태스크에서는 CLI 명령을 실행하여 유지 관리 기간 서비스 역할을 생성하고 생성한 JSON 파일에서 정책 콘텐츠를 추가합니다.

**AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성**

1. AWS CLI를 열고 `mw-role-custom-policy.json` 및 `mw-role-trust-policy.json`을 배치한 디렉터리에서 다음 명령을 실행합니다. 이 명령은 `my-maintenance-window-role`이라는 유지 관리 기간 서비스 역할을 생성하고 여기에 **신뢰 정책을 연결합니다.

------
#### [ Linux & macOS ]

   ```
   aws iam create-role \
       --role-name "my-maintenance-window-role" \
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------
#### [ Windows ]

   ```
   aws iam create-role ^
       --role-name "my-maintenance-window-role" ^
       --assume-role-policy-document file://mw-role-trust-policy.json
   ```

------

   시스템은 다음과 유사한 정보를 반환합니다.

   ```
   {
       "Role": {
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Action": "sts:AssumeRole",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       }
                   }
               ]
           },
           "RoleId": "AROAIIZKPBKS2LEXAMPLE",
           "CreateDate": "2024-08-19T03:40:17.373Z",
           "RoleName": "my-maintenance-window-role",
           "Path": "/",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role"
       }
   }
   ```
**참고**  
`RoleName` 및 `Arn` 값을 적어둡니다. 이를 다음 명령에 포함합니다.

1. 다음 명령을 실행하여 **고객 관리형 정책을 역할에 연결합니다. {{account-id}} 자리 표시자를 자신의 AWS 계정 ID로 바꾸기

------
#### [ Linux & macOS ]

   ```
   aws iam attach-role-policy \
       --role-name "my-maintenance-window-role" \
       --policy-arn "arn:aws:iam::{{account-id}}:policy/mw-role-custom-policy.json"
   ```

------
#### [ Windows ]

   ```
   aws iam attach-role-policy ^
       --role-name "my-maintenance-window-role" ^
       --policy-arn "arn:aws:iam::{{account-id}}:policy/mw-role-custom-policy.json"
   ```

------

1. 다음 명령을 실행하여 역할이 생성되었는지와 신뢰 정책이 연결되었는지 확인합니다.

   ```
   aws iam get-role --role-name my-maintenance-window-role
   ```

   이 명령은 다음과 유사한 정보를 반환합니다.

   ```
   {
       "Role": {
           "Path": "/",
           "RoleName": "my-maintenance-window-role",
           "RoleId": "AROA123456789EXAMPLE",
           "Arn": "arn:aws:iam::123456789012:role/my-maintenance-window-role",
           "CreateDate": "2024-08-19T14:13:32+00:00",
           "AssumeRolePolicyDocument": {
               "Version": "2012-10-17", 		 	 	 		 	 	 
               "Statement": [
                   {
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           },
           "MaxSessionDuration": 3600,
           "RoleLastUsed": {
               "LastUsedDate": "2024-08-19T14:30:44+00:00",
               "Region": "us-east-2"
           }
       }
   }
   ```

1. 다음 명령을 실행하여 고객 관리형 정책이 역할에 연결되었는지 확인합니다.

   ```
   aws iam list-attached-role-policies --role-name my-maintenance-window-role
   ```

   이 명령은 다음과 유사한 정보를 반환합니다.

   ```
   {
       "AttachedPolicies": [
           {
               "PolicyName": "mw-role-custom-policy",
               "PolicyArn": "arn:aws:iam::123456789012:policy/mw-role-custom-policy"
           }
       ]
   }
   ```

## 태스크 3: AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 있는 권한을 지정된 사용자에게 부여
<a name="allow-maintenance-window-access-cli"></a>

유지 관리 기간에 대한 사용자 지정 서비스 역할에 액세스할 수 있는 권한을 사용자에게 제공하면 유지 관리 기간 태스크에서 해당 역할을 사용할 수 있습니다. 이는 Maintenance Windows 도구에 대한 Systems Manager API 명령에 사용할 수 있도록 이미 부여한 권한에 추가됩니다. IAM 역할은 유지 관리 기간 태스크를 실행하는 데 필요한 권한을 전달합니다. 따라서 사용자에게 이러한 IAM 권한을 전달할 수 있는 기능이 없으면 사용자 지정 서비스 역할을 사용하여 유지 관리 기간에 태스크를 등록할 수 없습니다.

유지 관리 기간에 태스크를 등록할 때 실제 태스크 운영을 실행할 서비스 역할을 지정합니다. 이것은 서비스가 사용자를 대신하여 태스크를 실행할 때 수임하는 역할입니다. 그 전에 태스크 자체를 등록하려면 IAM 엔터티(예: 사용자 또는 그룹)에 IAM `PassRole` 정책을 할당하세요. 이를 통해 IAM 엔터티는 유지 관리 기간에 해당 태스크를 등록하는 과정에서 태스크를 실행할 때 사용해야 하는 역할을 지정할 수 있습니다. 자세한 내용은 **IAM 사용 설명서에서 [AWS 서비스에 역할을 전달할 사용자 권한 부여](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)를 참조하세요.

**AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 있는 사용자의 권한을 구성하려면**

1. 다음 AWS Identity and Access Management(IAM) 정책을 복사하여 텍스트 편집기에 붙여 넣은 후 `mw-passrole-policy.json`이라는 이름 및 파일 확장명으로 파일을 저장합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": "iam:PassRole",
               "Resource": "arn:aws:iam::{{111122223333}}:role/{{my-maintenance-window-role}}"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::{{111122223333}}:role/"
           },
           {
               "Effect": "Allow",
               "Action": "iam:ListRoles",
               "Resource": "arn:aws:iam::{{111122223333}}:role/aws-service-role/ssm.amazonaws.com/"
           }
       ]
   }
   ```

------

   {{my-maintenance-window-role}}을 앞에서 생성한 사용자 지정 유지 관리 기간 역할의 이름으로 바꿉니다.

   {{account-id}}를 AWS 계정의 ID로 바꿉니다. 리소스 `arn:aws:iam::{{account-id}}:role/`에 대해 이 권한을 추가하면 그룹의 사용자가 유지 관리 기간 작업을 생성할 때 콘솔에서 고객 역할을 보고 선택할 수 있습니다. `arn:aws:iam::{{account-id}}:role/aws-service-role/ssm.amazonaws.com/`에 대해 이 권한을 추가하면 그룹의 사용자가 유지 관리 기간 태스크를 생성할 때 콘솔에서 Systems Manager 서비스 연결 역할을 선택할 수 있습니다.

1. AWS CLI을 엽니다.

1. IAM 엔터티(사용자 또는 그룹)에 권한을 할당할지 여부에 따라 다음 명령 중 하나를 실행합니다.
   + **IAM 엔터티의 경우:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "{{user-name}}" \
         --policy-name "{{policy-name}}" \
         --policy-document file://{{path-to-document}}
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "{{user-name}}" ^
         --policy-name "{{policy-name}}" ^
         --policy-document file://{{path-to-document}}
     ```

------

     {{user-name}}에 유지 관리 창에 태스크를 할당할 사용자를 지정합니다. {{policy-name}}에는 정책 식별에 사용할 이름을 지정합니다(예: **my-iam-passrole-policy**). {{path-to-document}}에는 1단계에서 저장한 파일의 경로를 지정합니다. 예: `file://C:\Temp\mw-passrole-policy.json`
**참고**  
사용자가 Systems Manager 콘솔을 사용하여 유지 관리 기간에 대한 태스크를 등록할 수 있도록 액세스 권한을 부여하려면 사용자에게 `AmazonSSMFullAccess` 정책(또는 유지 관리 기간 태스크를 다루는 Systems Manager에 대한 더 작은 액세스 권한 집합을 제공하는 IAM 정책)도 할당해야 합니다. 다음 명령을 실행하여 사용자에게 `AmazonSSMFullAccess` 정책을 할당합니다.  

     ```
     aws iam attach-user-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --user-name "{{user-name}}"
     ```

     ```
     aws iam attach-user-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --user-name "{{user-name}}"
     ```
   + **IAM 그룹의 경우**:

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "{{group-name}}" \
         --policy-name "{{policy-name}}" \
         --policy-document file://{{path-to-document}}
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "{{group-name}}" ^
         --policy-name "{{policy-name}}" ^
         --policy-document file://{{path-to-document}}
     ```

------

     {{group-name}}에 유지 관리 기간에 태스크를 할당할 멤버가 있는 그룹을 지정합니다. {{policy-name}}에는 정책 식별에 사용할 이름을 지정합니다(예: **my-iam-passrole-policy**). {{path-to-document}}에는 1단계에서 저장한 파일의 경로를 지정합니다. 예: `file://C:\Temp\mw-passrole-policy.json`
**참고**  
Systems Manager 콘솔을 사용하여 유지 관리 기간에 대한 태스크를 등록하기 위해 그룹 멤버에게 액세스 권한을 부여하려면 해당 그룹에 `AmazonSSMFullAccess` 정책도 할당해야 합니다. 다음 명령을 실행하여 이 정책을 그룹에 할당합니다.  

     ```
     aws iam attach-group-policy \
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \
         --group-name "{{group-name}}"
     ```

     ```
     aws iam attach-group-policy ^
         --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^
         --group-name "{{group-name}}"
     ```

1. 다음 명령을 실행하여 그룹에 정책이 할당되었는지 확인합니다.

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "{{group-name}}"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "{{group-name}}"
   ```

------

## 태스크 4: 지정된 사용자가 AWS CLI를 사용하여 유지 관리 기간 태스크를 등록하지 못하도록 방지
<a name="deny-maintenance-window-access-cli"></a>

유지 관리 기간에 작업을 등록하지 않으려는 AWS 계정의 사용자에 대한 `ssm:RegisterTaskWithMaintenanceWindow` 권한을 거부할 수 있습니다. 이렇게 하면 유지 관리 기간 작업을 등록하지 않아야 하는 사용자에게 추가적인 예방 계층이 제공됩니다.

`ssm:RegisterTaskWithMaintenanceWindow` 권한을 개별 사용자에 대해 거부할 것인지 아니면 그룹에 대해 거부할 것인지에 따라 다음 절차 중 하나를 사용하여 사용자가 유지 관리 기간에 태스크를 등록하지 못하게 합니다.

**AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 없는 사용자의 권한을 구성하려면**

1. 다음 IAM 정책을 복사하여 텍스트 편집기에 붙여 넣은 후 **deny-mw-tasks-policy.json**이라는 이름 및 파일 확장명으로 파일을 저장합니다.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Deny",
               "Action": "ssm:RegisterTaskWithMaintenanceWindow",
               "Resource": "*"
           }
       ]
   }
   ```

------

1. AWS CLI을 엽니다.

1. IAM 엔터티(사용자 또는 그룹)에 권한을 할당할지 여부에 따라 다음 명령 중 하나를 실행합니다.
   + **사용자의 경우:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-user-policy \
         --user-name "{{user-name}}" \
         --policy-name "{{policy-name}}" \
         --policy-document file://{{path-to-document}}
     ```

------
#### [ Windows ]

     ```
     aws iam put-user-policy ^
         --user-name "{{user-name}}" ^
         --policy-name "{{policy-name}}" ^
         --policy-document file://{{path-to-document}}
     ```

------

     {{user-name}}에는 유지 관리 기간에 태스크를 할당하지 못하도록 할 사용자를 지정합니다. {{policy-name}}에는 정책 식별에 사용할 이름을 지정합니다(예: **my-deny-mw-tasks-policy**). {{path-to-document}}에는 1단계에서 저장한 파일의 경로를 지정합니다. 예: `file://C:\Temp\deny-mw-tasks-policy.json`
   + **그룹의 경우:**

------
#### [ Linux & macOS ]

     ```
     aws iam put-group-policy \
         --group-name "{{group-name}}" \
         --policy-name "{{policy-name}}" \
         --policy-document file://{{path-to-document}}
     ```

------
#### [ Windows ]

     ```
     aws iam put-group-policy ^
         --group-name "{{group-name}}" ^
         --policy-name "{{policy-name}}" ^
         --policy-document file://{{path-to-document}}
     ```

------

     {{group-name}}에는 유지 관리 기간에 태스크를 할당하지 못하도록 할 그룹을 지정합니다. {{policy-name}}에는 정책 식별에 사용할 이름을 지정합니다(예: **my-deny-mw-tasks-policy**). {{path-to-document}}에는 1단계에서 저장한 파일의 경로를 지정합니다. 예: `file://C:\Temp\deny-mw-tasks-policy.json`

1. 다음 명령을 실행하여 그룹에 정책이 할당되었는지 확인합니다.

------
#### [ Linux & macOS ]

   ```
   aws iam list-group-policies \
       --group-name "{{group-name}}"
   ```

------
#### [ Windows ]

   ```
   aws iam list-group-policies ^
       --group-name "{{group-name}}"
   ```

------