아마존 클라우드

[AWS] Role Assumption Challenge

트리스탄1234 2025. 3. 23. 15:41
728x90
반응형

실습 개요

리소스를 안전하게 유지하려면 AWS Identity and Access Management(AWS IAM)를 이해하는 것이 매우 중요합니다. 이 실습에서는 사용자가 승격된 권한이 필요할 때 수임하는 정책을 생성하는 방법을 알아봅니다. 이 방법을 사용하면 사용자는 환경을 변경하는 작업을 수행하기 위해 승격된 권한을 명시적으로 요청해야 하므로 사용자가 실수로 이러한 작업을 수행할 위험이 줄어듭니다. 또한 사용자에게 승격된 권한이 부여된 시점을 보여 주는 감사 추적도 생성합니다. 사용자 액세스가 조직의 거버넌스 요구 사항을 충족하도록 세션 기간을 설정할 수 있습니다. 자세한 내용은 IAM 역할 사용을 참조하십시오.

목표

이 실습을 마치면 다음을 수행할 수 있습니다.

  • IAM 정책 생성
  • 기존 역할에 정책 연결
  • 역할 수임
  • 세션 취소

실습 환경

다음 다이어그램에서는 실습 환경의 기본 아키텍처를 보여줍니다.

 

태스크 1: 작업 중인 아키텍처 이해

이 실습에서는 환경에서 3계층 웹 애플리케이션이 실행되고 있습니다. 이 애플리케이션은 Application Load Balancer(ALB), Auto Scaling 그룹(ASG) 및 Amazon Relational Database Service(RDS)에서 실행되는 Amazon Aurora 데이터베이스 클러스터로 구성됩니다. 또한 두 개의 사용자 계정이 생성되었습니다. 하나는 관리자 액세스 권한이 있고 다른 하나는 describe 작업만 가능합니다.

이 태스크에서는 IAM 사용자의 현재 구성과 일반적인 3계층 웹 애플리케이션을 탐색합니다.

  1. 실습 페이지의 왼쪽에서 ConsoleLoginLink 값을 복사하여 새 브라우저 탭에 붙여 넣습니다.
  2. 다음 정보를 사용하여 AWS Management Console에 로그인합니다.
  • Account ID: 실습 페이지의 왼쪽에서 AccountID 값을 복사합니다.
  • IAM user name: 실습 페이지의 왼쪽에서 AdminUser 값을 복사합니다.
  • Password: 실습 페이지의 왼쪽에서 AdminUserPassword 값을 복사합니다.
  1. Sign in을 선택합니다.
  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 을 검색하여 선택합니다.
  2. IAM
  3. 왼쪽 탐색 메뉴에서 Users를 선택합니다.

 

 

 

여러 사용자가 생성되어 있습니다. 이 실습에서는 IAMUser 또는 IAMAdminUser로 시작하는 사용자 이름을 가진 두 개의 사용자를 사용합니다.

  1. IAMAdminUser 사용자를 선택합니다.
  2. Summary 페이지에서 AdministratorAccess 정책이 사용자에게 직접 연결되었음을 알 수 있습니다.

 

Users로 돌아갑니다. IAMUser1 사용자를 선택합니다.

이 사용자에게는 관리자 액세스 권한이 없고 제한된 권한만 있습니다. 이제 생성된 IAM 역할 및 정책을 살펴보겠습니다.

반응형
  1. 왼쪽 탐색 메뉴에서 Roles를 선택합니다.

 

다음과 같이 작업할 수 있는 4가지 역할이 생성되었습니다.

  • 사용자 읽기 전용 역할
  • 사용자 CRUD 역할
  • Amazon Elastic Compute Cloud(Amazon EC2) 읽기 전용 역할
  • Amazon EC2 CRUD 역할

 고려 사항: CRUD는 '생성, 읽기, 업데이트 및 삭제’를 의미합니다.

  1. 검색 필드에 UserReadOnlyRole을 입력하여 결과를 필터링합니다.

  1. 필터링된 결과의 이름을 선택하여 역할을 보고 연결된 정책을 검사합니다.

 

  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 EC2 를 검색하여 선택합니다.
  2. 왼쪽 탐색 영역에서 Instances를 선택합니다.

 

 

하나의 인스턴스가 나열됩니다. 이 인스턴스는 Application Load Balancer(ALB) 뒤에 배치된 Auto Scaling 그룹(ASG)의 멤버입니다.

 

  1. 왼쪽 탐색 창에서 Security Groups를 선택합니다.

여러 개의 보안 그룹이 있습니다. ALB, ASG, RDS 클러스터에 대해 각각 하나씩 있습니다.

  1. ASG-SG 보안 그룹에 대한 상자를 선택합니다.
  2. Inbound rules 탭을 선택합니다.

 

인바운드 규칙에는 HTTP와 HTTPS가 모두 포함됩니다. 소스는 ALB 보안 그룹에 대한 참조입니다.

 

  1. 왼쪽 탐색 창에서 Load Balancers를 선택합니다.
  2. 이름에 Prod가 포함된 로드 밸런서를 선택합니다.

 

Details 탭에는 로드 밸런서에 연결하는 데 사용하는 DNS 이름을 비롯하여 로드 밸런서에 대한 중요한 정보가 나열됩니다.

 

  1. Listeners and rules 탭을 선택합니다.

로드 밸런서에는 대상 그룹으로 전달하는 포트 80에 대해 구성된 리스너가 하나 있습니다.

 

  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 RDS 를 검색하여 선택합니다

  1. 왼쪽 탐색 창에서 Databases를 선택합니다.

  1. Amazon Aurora 클러스터의 이름을 선택합니다.

 

Amazon Aurora 클러스터에는 포트 3306에 대해 구성된 두 개의 엔드포인트가 있습니다. 방금 살펴본 리소스를 사용하여 실습 과정에서 여러 역할을 수임할 때 해당 리소스에 대한 액세스 권한이 어떻게 달라지는지 확인할 수 있습니다. 실습 환경을 검토했으므로 이제 역할을 수임하여 정책을 생성하고 액세스 권한을 테스트할 수 있습니다.

 

태스크 2: 다른 액세스 정책 생성 및 역할에 연결

이 태스크에서는 읽기 전용 정책과 CRUD 정책을 생성하고 해당 역할에 정책을 할당합니다.

 

태스크 2.1: 정책 생성

  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 IAM 을 검색하여 선택합니다.
  2. 왼쪽 탐색 창에서 Policies를 선택합니다.

 

  1. JSON을 선택합니다.

 

 

아래 내용을 복사해 붙입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DescribeProd",
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

 

이 정책은 Amazon EC2 서비스에 대한 모든 Describe 권한을 허용합니다.

  1. Next를 선택합니다.
  2. NameReadOnlyPolicy를 입력 합니다. 
  3. ReadOnlyPolicy
  4. Create policy를 선택합니다.

 

 

위의 절차에 따라 다음 정책 문서를 사용하고 정책 이름을 CRUDPolicy로 지정하여 CRUD 정책을 생성합니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ManageProd",
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupEgress",
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "ec2:RevokeSecurityGroupEgress",
                "ec2:RevokeSecurityGroupIngress",
                "ec2:StopInstances",
                "ec2:TerminateInstances",
                "ec2:UpdateSecurityGroupRuleDescriptionsEgress",
                "ec2:UpdateSecurityGroupRuleDescriptionsIngress",
                "rds:Describe*",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

 

이 정책은 기본 Amazon EC2 CRUD 및 Amazon RDS의 읽기 전용 작업을 허용합니다.

 

 

태스크 2.2: 역할에 정책 연결

정책을 생성했으면 역할에 정책을 연결해야 합니다.

  1. 왼쪽 탐색 창에서 Roles를 선택합니다.
  2. 검색 필드에을 UserReadOnlyRole를 입력 합니다.
  3. 필터링된 역할의 이름을 선택합니다.

  1. Permissions 탭에서 Add permissions를 선택한 다음, Attach policies 버튼을 선택합니다.

  1. ReadOnlyPolicy 찾아 선택 합니다. 

  1. Add permissions를 선택합니다.

이제 정책이 역할에 연결되었습니다.

위의 단계를 반복하여 CRUDPolicy UserCRUDRole에 연결합니다.

 

태스크 2.3: 역할 신뢰 관계 업데이트

신뢰 관계는 역할을 수임할 수 있는 엔터티를 정의합니다. UserReadOnlyRole  UserCRUDRole 역할 모두에 대한 신뢰 관계를 업데이트하여 액세스 권한을 단일 사용자로 제한합니다.

  1. 왼쪽 탐색 창에서 Roles를 선택합니다.
  2. 검색 필드에 UserReadOnlyRole를 입력 합니다. 

  1. 필터링된 역할의 이름을 선택합니다.
  2. Trust relationships 탭을 선택합니다.

  1. Edit trust policy를 선택합니다.
  2. Policy Document를 업데이트하려면 보안 주체 Amazon Resource Name(ARN)의 root user/<User1>로 바꿉니다.

  1. <User1> 을 이 지침의 왼쪽에 있는 User1의 값으로 바꿉니다.
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::015786694022:user/IAMUser1-6ysjcg"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

 

<AccountId> 는 실습 페이지 왼쪽에 있는 AWS AccountId 값의 자리 표시자입니다.

  1. Update policy를 선택합니다.

위의 단계를 반복하여 UserCRUDRole 역할에 대한 Trust relationship을 업데이트합니다.

 

 

태스크 3: 역할 수임

IAM 사용자가 로그인하면 사용자 계정에 직접 연결된 정책 또는 해당 사용자가 속한 그룹에 연결된 정책에 따라 권한이 부여됩니다. 보안을 강화하기 위해 사용자가 승격된 권한을 부여하는 단기 자격 증명을 요청할 수 있습니다. 이 태스크에서는 UserReadOnlyRole  UserCRUDRole 역할을 모두 수임하여 역할 수임을 통해 권한 상승을 관리하는 방법을 알아봅니다.

 참고: 사용자 액세스를 보다 쉽게 비교하려면 두 개의 브라우저 또는 프라이빗 브라우징 모드를 사용하여 AWS Management Console에 로그인할 수 있습니다.

  1. 실습 페이지의 왼쪽에서 ConsoleLoginLink 값을 복사하여 새 브라우저 탭에 붙여 넣습니다.
  2. 다음 정보를 사용하여 AWS Management Console에 로그인합니다.
  • Account ID: 실습 페이지의 왼쪽에서 AccountID 값을 복사합니다.
  • IAM user name: 실습 페이지의 왼쪽에서 User1 값을 복사합니다.
  • Password: 실습 페이지의 왼쪽에서 User1Password 값을 복사합니다.
  1. Sign in을 선택합니다.
  2. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 EC2 를 검색하여 선택합니다.
  3. 왼쪽 탐색 영역에서 Instances를 선택합니다.

 

AMUser1 사용자는 실행 중인 인스턴스를 볼 수 있는 액세스 권한이 없습니다.

  1. 콘솔의 오른쪽 상단에서 IAMUser1-xxxxxx @ 를 선택하고 Switch Role을 선택합니다.
  2. Switch Role을 선택합니다.

  1. 다음 정보를 입력합니다.
  • 계정 ID: 실습 페이지 왼쪽에서 AccountId 값을 복사하여 붙여넣습니다.
  • IAM 역할 이름: 실습 페이지 왼쪽에서 UserReadOnlyRole 값을 복사하여 붙여넣습니다.
  • 표시 이름 - 선택 사항: ReadOnlyAccess를 입력 합니다

  1. Switch Role 버튼을 선택합니다.

 

그러면 이전에 정책을 생성할 때 지정한 특정 서비스에 대한 읽기 전용 액세스를 허용하는 임시 자격 증명이 사용자에게 부여됩니다.

 

 

  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 EC2를 검색하여 선택합니다.
  2. 왼쪽 탐색 영역에서 Instances를 선택합니다.

이제 수임된 역할이 ec2:Describe* 권한을 허용하므로 Production web server 인스턴스를 볼 수 있습니다.

  1. 인스턴스 종료를 시도하여 인스턴스를 종료할 수 있는 권한이 없음을 확인합니다.

 

 

 

  1. 위 단계와 다음 정보를 사용하여 역할을 전환하고 Amazon EC2에 대한 기본 CRUD 권한을 수임합니다.
  • Account ID: 실습 페이지의 왼쪽에서 AccountID 값을 복사합니다.
  • IAM 역할 이름: 실습 페이지 왼쪽에서 UserCRUDRole 값을 복사합니다.
  • 표시 이름 - 선택 사항: CRUDAccess를 입력 합니다.
  1. 웹 서버 인스턴스를 종료하여 권한 상승을 확인합니다.

 태스크 완료: 성공적으로 정책을 생성하고, 역할에 할당하고, 권한을 상승시키기 위해 이러한 역할을 수임했습니다. 다음으로 정책에서 조건문을 사용하여 역할에 대한 액세스 권한을 취소하는 방법을 살펴봅니다.

 

 

 

태스크 4: 세션 취소

이 태스크에서는 수임된 역할에 대한 세션 액세스 권한을 취소하는 방법을 검토합니다. 이 작업은 자격 증명이 손상되었다고 우려되는 경우에 유용합니다.

  1. IAMUser1 계정에 로그인하고 CRUDAccess라는 역할을 수임했는지 확인합니다.
  1. AWS Management Console에 IAMAdminUser로 로그인한 브라우저 탭으로 돌아갑니다.

 참고: 관리자와 표준 사용자로 동시에 로그인한 경우 세션이 취소되는 것을 쉽게 확인할 수 있습니다.

  1. AWS Management Console 페이지 상단의 통합 검색 표시줄에서 IAM 을 검색하여 선택합니다.
  2. Roles를 선택합니다.
  3. UserCRUDRole 을 선택 합니다

  1. 취소 sessions 탭을 선택합니다.

 

 

잠시 시간을 내어 역할에 추가될 예제 정책을 검토하십시오. 이 정책은 조건문을 사용하여 엔터티가 역할에 대한 액세스 권한을 가져야 하는지 여부를 결정합니다.

 

  1. 대화 상자에서 모든 활성 세션을 취소함을 확인하는 상자를 선택한 다음, Revoke active sections를 선택합니다.

 

 

IAMUser1 세션을 포함하여 모든 활성 세션이 취소됩니다.

IAM은 즉시 AWSRevokeOlderSessions라는 정책을 역할에 연결합니다. 이 정책은 사용자가 활성 세션을 취소하는 순간 이전에 해당 역할을 수임한 엔터티의 모든 액세스 권한을 거부합니다.

 

  1. AWS Management Console에 IAMUser1로 로그인하고 CRUDAccess라는 역할을 수임한 브라우저로 돌아갑니다.
  2. 콘솔을 새로 고칩니다.

자격 증명이 취소되었으므로 더 이상 인스턴스가 나열되지 않습니다. AWS Management Console에 AdminUser로 로그인한 브라우저로 돌아가서 인스턴스가 계속 나열되는지 확인합니다.

 

 

728x90
반응형