AWS

Security Token Service(STS)

S_N_Y 2024. 5. 29. 16:06

 

#0 STS에 대해 알아보자

STS를 이용하면 동일한 계정에서 다수의 계정들에 걸쳐 역할을 맡을 수 있고 자격 증명 페더레이션을 사용할 수 있게 된다.

먼저 우리의 계정이나 다수의 계정에 걸쳐서 우리가 맡으려는 IAM Roles(역할)을 정의하고 Principal이 이 IAM 역할에 액세스할 수 있는지 정의하고 Security Token Service(STS) 서비스를 이용해서 자격 증명을 받는다(이건 일시적인 자격 증명) 그러면 AssumeRole API를 이용해서 우리가 액세스할 수 있는 IAM 역할을 맡을 수 있게 된다. 말한대로 자격 증명은 일시적인 것이고 기간은 15분~12시간 사이이다.

다이어그램을 보면 가령 우리의 사용자가 같은 계정 또는 다른 계정 안에 있는 어떤 역할에 액세스하려고 할 때, 그렇게 하기 위해 AssumeRole API나 STS를 사용하게 된다. STS는 권한을 체크하고 설정이 올바른지 확인할 것이다.

어쨌거나 우리는 그 보안 자격 증명을 이용해서 목표로 하는 역할에 액세스할 수 있게 되는데

그럼 어떤 상황에서 STS를 이용해 역할을 받으려고 할까?

...

먼저 우리가 보유한 AWS 계정에 있는 사용자에게 우리가 보유한 다른 계정에 있는 리소스에 대한 액세스 권한을 제공하려고 하는 경우가 있다. 또는 제 3자가 보유한 AWS 계정에 있는 사용자에게 액세스 권한을 부여하려 할 수도 있다.

또는 AWS가 제공하는 서비스에게 서비스 역할을 이용해 AWS 리소스에 대한 액세스 권한을 줄 수도 있다. 

 

+)

STS에는 살아 있는 세션과 역할에 대한 자격 증명을 취소하도록 해주는 기능이 있다.

=> 간단하게 정책을 변경하고 time statement를 추가하거나 AWSRevokeOrderSessions를 사용해서 정책을 관리하면 된다.

여기서 STS를 사용해서 어떤 사용자, 애플리케이션, 또는 서비스를 위해 역할을 담당하면 우린 원래 가졌던 권한을 포기하게 되고 그 역하에 할당된 권한을 갖게 된다는 점을 기억해야 한다.

 

#1 보유한 AWS 계정에 있는 IAM 사용자에게 액세스 권한을 제공하는 것에 대해

이건 우리가 신뢰 구역 안에 있는 경우이고 이 경우에 예를 들어 Account A 또는 A*에서 역할을 생성할 수 있고 여기서 A*는 보유 중인 다른 계정일 수 있다. 그렇게 해서 EC2 인스턴스를 종료할 수 있다.

여기서 이게 모두 우리가 보유한 계정이라는 사실이 중요하다.

바로 이 다음에는 우리가 보유하고 있지 않은 제 3자 계정에 대해 알아보려고 한다.

 

#2 보유하지 않은 제 3자의 계정에 대해

이 경우에는 사용자는 역할을 맡게 되고, 그 역할을 통해 EC2 인스턴스를 종료할 수 있게 된다. 그리고 이렇게 할 때는 사용자가 역할을 맡도록 명시적으로 권한을 부여해야 하고 그렇게 해서 EC2 인스턴스 종료 액션을 수행한다는 이점이 있다 또 관리 콘솔이나 CLI 또는 AssumeRoleAPI를 이용해서 사용자가 그 역할로 전환하도록 강제할 수도 있다.

여기서는 추가적인 수준의 보안을 갖게 된다는 이점이 있다.

또 멀티팩터 인증 보호를 역할에 추가해서 MFA를 이용하도록 지정된 사용자만 그 역할을 맡도록 할 수도 있다. 그러면 최소 권한과 CloudTrail을 이용한 감사라는 이점도 갖게 된다.

이렇게 중간 단계를 거쳐 EC2 인스턴스를 종료함으로써 우리는 많은 보안상의 이점을 추가할 수 있다.

 

#3 STS 교차 계정 액세스(Cross account access with STS)의 실제 사용 예시

여기 프로덕션 계정과 S3 버킷이 있고 두 그룹의 사용자가 있는 개발 계정이 있다고 가정해보자. 예를 들면 테스터 그룹과 개발자 그룹이 있을 수 있는 것이다. 그리고 개발자들에게 S3 버킷인 productionapp에 대한 액세스를 제공하려고 한다. 그럼 먼저 우리는 프로덕션 계정에서 관리자는 개발 계정에게 productionapp 버킷에 대한 읽기, 쓰기 권한을 부여하는 역할을 생성하게 된다. 즉, 이 역할을 이용해서 우리 S3 버킥에 액세스할 수 있게 된다.

그 다음엔 개발 계정에서 우리는 개발자 그룹의 구성원들에게 이 UpdateApp이라는 역할을 맡도록 액세스 권한을 부여한다.

...

그러면 어떻게 될까?

그러면 개발자 그룹의 사용자들만 STS API를 이용해서 그 역할에 액세스하거나 액세스 권한을 요청할 수 있다, 그러면 STS는 역할 임시 자격 증명을 리턴하게 된다.

그러면 그 역할 자격 증명을 이용해서 사용자들은 S3 버킷에 액세스할 수 있는 것이다..!