AWS CLI를 사용한 유지 관리 기간에 대한 액세스 제어 - AWS Systems Manager

AWS CLI를 사용한 유지 관리 기간에 대한 액세스 제어

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

작업 1: 신뢰 정책 및 고객 관리형 정책 파일을 JSON 형식으로 생성

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

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

신뢰 정책 및 고객 관리형 정책 파일을 JSON 형식으로 생성하려면
  1. 다음 신뢰 정책을 복사하여 텍스트 파일에 붙여 넣습니다. 파일을 mw-role-trust-policy.json이라는 이름 및 파일 확장자로 저장합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 다음 JSON 정책을 복사하여 다른 텍스트 파일에 붙여 넣습니다. 첫 번째 파일을 만든 디렉터리에 이 파일을 mw-role-custom-policy.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": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "ssm.amazonaws.com" ] } } } ] }
  3. 계정에서 실행하는 유지 관리 태스크에 필요한 경우 mw-role-custom-policy.json의 콘텐츠를 수정합니다. 변경 사항은 계획된 작업에 따라 다릅니다.

    예:

    • 와일드카드(*) 한정자를 사용하는 대신 특정 함수 및 상태 머신에 Amazon 리소스 이름(ARN)을 제공할 수 있습니다.

    • AWS Step Functions 작업을 실행할 계획이 없는 경우 states 권한 및 ARN을 제거할 수 있습니다.

    • AWS Lambda 작업을 실행할 계획이 없는 경우 lambda 권한 및 ARN을 제거할 수 있습니다.

    • Automation 작업을 실행할 계획이 없는 경우 ssm:GetAutomationExecutionssm:StartAutomationExecution 권한을 제거할 수 있습니다.

    • 작업을 실행하는 데 필요할 수 있는 권한을 추가합니다. 예를 들어 일부 자동화 작업은 AWS CloudFormation 스택과 함께 작동합니다. 따라서 cloudformation:CreateStack, cloudformation:DescribeStackscloudformation:DeleteStack 권한이 필요합니다.

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

      Automation 실행서에 필요한 역할 권한에 대한 자세한 내용은 AWS Systems Manager Automation 실행서 참조의 실행서 설명을 참조하세요.

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

태스크 2: AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성 및 확인

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

중요

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

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

AWS CLI를 사용하여 유지 관리 기간에 대한 사용자 지정 서비스 역할 생성
  1. AWS CLI를 열고 mw-role-custom-policy.jsonmw-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"
        }
    }
    참고

    RoleNameArn 값을 적어둡니다. 이를 다음 명령에 포함합니다.

  2. 다음 명령을 실행하여 고객 관리형 정책을 역할에 연결합니다. 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"
  3. 다음 명령을 실행하여 역할이 생성되었는지와 신뢰 정책이 연결되었는지 확인합니다.

    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"
            }
        }
    }
  4. 다음 명령을 실행하여 고객 관리형 정책이 역할에 연결되었는지 확인합니다.

    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를 사용하여 유지 관리 기간 태스크를 등록할 수 있는 권한을 지정된 사용자에게 부여

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

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

AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 있는 사용자의 권한을 구성하려면
  1. 다음 AWS Identity and Access Management(IAM) 정책을 복사하여 텍스트 편집기에 붙여 넣은 후 mw-passrole-policy.json이라는 이름 및 파일 확장명으로 파일을 저장합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::account-id:role/my-maintenance-window-role" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id:role/" }, { "Effect": "Allow", "Action": "iam:ListRoles", "Resource": "arn:aws:iam::account-id: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 서비스 연결 역할을 선택할 수 있습니다.

  2. AWS CLI을 엽니다.

  3. 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 정책을 할당합니다.

      Linux & macOS
      aws iam attach-user-policy \ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \ --user-name "user-name"
      Windows
      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 정책도 할당해야 합니다. 다음 명령을 실행하여 이 정책을 그룹에 할당합니다.

      Linux & macOS
      aws iam attach-group-policy \ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" \ --group-name "group-name"
      Windows
      aws iam attach-group-policy ^ --policy-arn "arn:aws:iam::aws:policy/AmazonSSMFullAccess" ^ --group-name "group-name"
  4. 다음 명령을 실행하여 그룹에 정책이 할당되었는지 확인합니다.

    Linux & macOS
    aws iam list-group-policies \ --group-name "group-name"
    Windows
    aws iam list-group-policies ^ --group-name "group-name"

태스크 4: 지정된 사용자가 AWS CLI를 사용하여 유지 관리 기간 태스크를 등록하지 못하도록 방지

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

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

AWS CLI를 사용하여 유지 관리 기간 태스크를 등록할 수 없는 사용자의 권한을 구성하려면
  1. 다음 IAM 정책을 복사하여 텍스트 편집기에 붙여 넣은 후 deny-mw-tasks-policy.json이라는 이름 및 파일 확장명으로 파일을 저장합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "ssm:RegisterTaskWithMaintenanceWindow", "Resource": "*" } ] }
  2. AWS CLI을 엽니다.

  3. 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

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

    Linux & macOS
    aws iam list-group-policies \ --group-name "group-name"
    Windows
    aws iam list-group-policies ^ --group-name "group-name"