AWS 조직은 글로벌 서비스로, 여러 AWS 계정을 동시에 관리할 수 있도록 지원한다. 이를 위해 조직을 생성하게 되며, 조직 내 주요 계정은 관리 계정이라 불린다. 반면, 조직에 가입하거나 조직에서 생성된 다른 계정들은 멤버 계정이라 한다.
조직에서 관리하는 계정들은 IAM user가 아닌 하나하나의 Root user를 가진 계정이다.
SCP는 "조직 내 계정"의 IAM 사용자와 역할(Role)이 수행할 수 있는 작업을 제한하는 역할을 한다. 하지만 각 계정의 루트 사용자(root user)는 SCP의 영향을 받지 않으며, 모든 작업을 수행할 수 있다.
IAM 사용자(User)는 한 개의 AWS 계정에 속하지만, 조직은 여러 AWS 계정을 통합 관리할 수 있음.
멤버 계정은 단 하나의 조직에만 속할 수 있다. AWS 조직의 중요한 특징 중 하나는 모든 계정의 청구가 통합된다는 점이다. 따라서 관리 계정에서 단일 결제 방법을 설정하면 조직의 모든 비용을 한 번에 지불할 수 있다.
또한 조직 내 모든 계정의 사용량이 집계되므로 EC2나 S3 같은 서비스의 대량 사용 시 추가적인 가격 혜택을 받을 수 있다. 더불어, 예약 인스턴스와 절약 계획 할인도 계정 간에 공유 가능하다. 즉, 한 계정에서 사용되지 않은 예약 인스턴스가 있다면, 다른 계정이 그 혜택을 받을 수 있으며, 이를 통해 전체 조직의 비용을 절감할 수 있다.
AWS 조직에서는 계정을 자동으로 생성할 수 있는 API도 제공하므로, 계정 생성을 간편하게 할 수 있다.
조직의 구조는 조직 단위(OU, Organizational Unit) 개념을 기반으로 구성된다.
예를 들어,
조직 구조는 비즈니스 단위별(판매/소매/재무)로 나눌 수도 있고, 환경(개발/테스트/프로덕션)별로 구분할 수도 있다. 이를 통해 계정 및 리소스를 보다 체계적으로 관리할 수 있다.
일반적으로 회사의 대표 AWS 계정(관리 계정)에서 조직(Organizations)을 생성한 후, 개발 계정과 운영 계정을 조직 내 멤버 계정으로 추가하여 통합 관리한다.
1️⃣ 회사 계정 (조직의 관리 계정)
2️⃣ 개발 계정
3️⃣ 운영 계정
4️⃣ (옵션) 보안/로그 계정
🛑 주의점:
SCP는 특정 OU 또는 계정에서 실행할 수 있는 작업을 제한하는 정책이다.
다만, SCP는 관리 계정에는 적용되지 않는다. 이는 관리 계정이 실수로 스스로를 차단하여 복구가 불가능한 상황을 방지하기 위함이다. SCP를 올바르게 활용하면 조직 내 모든 계정의 보안을 강화하고, 서비스 사용을 체계적으로 관리할 수 있다.
예를 들어,
바로 조직이 생성된다.
루트 조직 단위가 생긴다. 조직을 만든 계정이 관리 계정이 된다.
Add an AWS account를 클릭한다.
초대를 받은 계정은 AWS Organizations > Invitations에서 초대장을 볼 수 있고 수락, 거절할 수 있다. Dashboard에서 조직 ID와 특성 세트를 볼 수 있다. 또는 Leave this organization으로 조직을 떠날 수도 있다.
Root로 가서 Children > Action > Create new를 선택해 새 unit 이름을 입력하고 생성해준다.
같은 방식으로 생성한 OU를 눌러 Children > Action > Create new로 하위 OU를 만들 수 있다.
AWS Organizations 콘솔 > AWS accounts 에서 옮기고자 하는 계정을 체크 > Actions > Move로 이동
관리 계정은 루트 아래에 두는 것이 일반적이지만 원한다면 다른 OU로 이동시킬 수 있다.
Policies에서 활성화할 수 있는 다른 정책
- 백업 정책은 조직 전체의 백업 계획을 배포하여 모든 계정이 규정을 준수하고 백업이 활성화되도록 할 수 있다.
- 태그 정책은 조직의 모든 계정 내에서 태그를 사용하는 방법을 표준화할 수 있다.
정책명, 설명, Json문서를 편집해 정책을 정의한다.
Policies UI에서 연결된 정책이 상위 OU에서 상속받은 것인지 확인할 수 있다.
그럼 IAM Root 계정이 User에게 준 IAM Policy와 OU에서 부여한 SCP가 충돌할 경우 무엇이 더 우선일까?
✅ SCP 허용(O) + IAM 허용(O) → 사용 가능
❌ SCP 허용(O) + IAM 거부(X) → 사용 불가능
❌ SCP 거부(X) + IAM 허용(O) → 사용 불가능
IAM 조건(Condition)은 IAM 내부의 정책(사용자 정책, 리소스 정책, 엔드포인트 정책 등)이 언제, 어떻게 적용될지를 제어하는 요소이다.
aws:SourceIp → 클라이언트 IP 제한 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": "s3:*",
"Resource": "arn:aws:s3:::your-bucket-name/*",
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "192.168.0.0/24"
}
}
}
]
}
aws:RequestedRegion → API 호출 리전 제한 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"Action": ["ec2:*","rds:*","dynamodb:*"],
"Resource": "*",
"Condition": {
"StringNotEquals": {
"aws:RequestedRegion": ["eu-central-1","eu-west-1"]
}
}
}
]
}
ec2:ResourceTag → EC2 인스턴스 태그 기반 제한
Project=DataAnalytics 태그가 있는 EC2 인스턴스만 시작(Start) 및 종료(Stop) 허용. aws:PrincipalTag → 사용자(User) 태그 기반 제한
Department=Data 태그가 있는 사용자만 EC2 관련 작업 수행 가능. 3,4의 예시코드
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ec2:StartInstances","ec2:StopInstances"],
"Resource": "*",
"Condition": {
"StringEquals": {
"ec2:ResourceTag/Project": "DataAnalytics",
"aws:PrincipalTag/Department": "Data"
}
}
}
aws:MultiFactorAuthPresent → MFA(다중 인증) 강제 적용 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:*",
"Resource": "*"
},
{
"Effect": "Deny",
"Action": ["ec2:StopInstances","ec2:TerminateInstances"],
"Resource": "*",
"Condition": {
"BoolIfExists":{
"aws:MultiFactorAuthPresent": false
}
}
}
aws:PrincipalOrgID → 조직 멤버 계정만 리소스 접근 가능 {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:PutObject","s3:GetObject"],
"Resource": "arn:aws:s3:::my-bucket/*",
"Condition": {
"StringNotEquals": {
"aws:PrincipalOrgID": "org-id-12345"
}
}
}
}
s3:::버킷이름 형태의 ARN을 사용. s3:::버킷이름/* 형태의 ARN을 사용. {
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}→ my-bucket 내의 객체수준에서는 버킷명의 / 뒤에 객체명을 표시하여 객체수준의 IAM 정책을 설정해준다.IAM 역할과 리소스 기반 정책은 AWS에서 계정 간 작업을 수행할 때 중요한 두 가지 옵션이다. 특히, S3 버킷에 대한 API 호출을 수행할 때 사용자는 user에 부여된 IAM 정책이나 경유할 AWS 서비스의 Role을 통해 호출하는 방법, 사용자를 허용하는 S3의 버킷정책을 통해 호출하는 방법이 있다. 두 방식은 비슷해 보일 수 있지만, 근본적으로 차이가 있다.
IAM 역할을 사용하면, 사용자는 역할을 맡을 때 자신이 가진 원래의 권한을 포기하고, 그 역할에 할당된 권한만을 가지게 된다.
리소스 기반 정책을 사용하면, 주체는 역할을 맡지 않고 자신의 원래 권한을 유지하면서도 다른 계정의 리소스를 접근할 수 있다.
리소스 기반 정책을 지원하는 서비스에는 Amazon S3 버킷, SNS 주제, SQS 큐, Lambda 함수 등이 있다.
리소스 기반 정책을 지원하지 않는 경우에는 IAM 역할을 사용해야 한다. 예를 들어 Kinesis Data Streams, EC2 Auto Scaling, System Manager Run Command, ECS 작업 등에서는 IAM 역할을 사용해야 한다.
IAM 권한 경계(Permissions Boundary)는 사용자와 역할의 최대 권한을 정의하는 고급 기능이다. 이 기능은 특정 IAM 사용자나 역할이 수행할 수 있는 작업을 정밀하게 제한하는 데 사용된다. 권한 경계는 그룹에는 적용되지 않는다.
s3, cloudwatch, ec2만 허용하는 권한 경계 예시
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*",
"cloudwatch:*",
"ec2:*"
],
"Resource": "*"
}
]
}
iam:CreateUser 같은 정책을 통해 사용자가 특정 리소스에 접근할 수 있게 된다.iam:CreateUser를 허용하는 IAM 정책을 가졌다고 하더라도, 권한 경계에서 그 액션을 허용하지 않으면, 사용자는 그 액션을 수행할 수 없다.AdministratorAccess 권한이 있다면, 원칙적으로 모든 작업을 할 수 있다. 그러나 권한 경계로 AmazonS3FullAccess를 설정하면, John은 S3 서비스에서만 작업할 수 있고, 다른 서비스에는 접근할 수 없다.IAM 콘솔 > Users > Permissions > Permissions boundary > Set boundary로 부여
IAM에서 액션을 수행할 때 권한을 평가하는 흐름은 여러 단계로 이루어진다:
1. 외부에서 명시적 거부가 있으면 자동으로 거부된다.
2. Organizations SCP, 리소스 기반 정책(예: S3 버킷 정책), 자격 증명 기반 정책(IAM 정책), 권한 경계 순으로 평가가 이루어진다.
3. 세션 정책도 존재하며, 이는 주로 STS(Security Token Service)와 관련된 것이다.
4. 모든 평가 단계에서 거부가 없고, 허용만 있을 때 최종적으로 액션이 허용된다.
sqs:*에 대해 Deny가 명시된 경우, sqs:CreateQueue나 sqs:DeleteQueue 같은 다른 SQS 관련 작업은 모두 거부된다.sqs:DeleteQueue에도 Allow가 있지만, Deny가 명시적 거부이므로 실행되지 않는다.ec2:DescribeInstances 같은 작업은 IAM 정책 내에 명시적으로 허용이 없으면 허용되지 않는다. 이 경우에는 명시적 거부도 없지만 허용이 없기 때문에 실행되지 않는다.이 서비스는 기존 AWS 싱글 사인온 서비스의 후속 제품으로, 이름만 변경된 동일한 서비스이다. 기존 AWS 콘솔이 아닌 IAM 자격 증명 센터에서 한 번만 로그인하면 나의 AWS 조직 내의 여러 AWS 계정 및 비즈니스 클라우드 애플리케이션(Salesforce, Box, Microsoft 365, slack, Dropbox 등)에 접근할 수 있는 싱글 사인온(SSO) 기능을 제공한다. SAML2.0 통합이 가능한 애플리케이션에 연결할 수 있다. 또한 EC2 Windows 인스턴스에도 싱글 로그인을 지원한다.
한 번의 로그인으로 모든 리소스 접근 가능
로그인 후에는 추가 비밀번호 입력 없이 바로 원하는 계정에 액세스할 수 있다.
aws 계정에 로그인하고 AWS IAM Identity Center로 들어가면 활성화된 서비스(Microsoft365, slack등)나 다른 aws계정들이 있을 것이다. 그것을 클릭하면 해당 계정으로 새로 로그인하지 않아도 로그인 된 상태로 그 계정에 접속된 AWS 콘솔을 열 수 있다.
두 가지 ID 저장소 옵션
사용자는 SSO를 위해 두 위치에 저장될 수 있다.
로그인 했다고 해서 모든 항목에 액세스할 수 있는 것은 아니다. 자격 증명 센터에서 권한 셋을 정의해서 어떤 사용자가 무엇에 액세스할 수 있는지 정의해야 한다.
사용자와 그룹 관리
권한 설정
AWS의 루트 계정은 IAM 자격 증명 센터의 전체 설정을 관리할 수 있는 권한을 가진다. 루트 계정에서 IAM 자격 증명 센터를 설정하고, 사용자, 그룹, 권한 세트를 관리하며, 외부 ID 공급자와의 통합도 설정할 수 있다.
예를 들어, 관리팀에서 조직을 만들어 내부에 개발OU, 프로덕션OU가 있고 그 하위에 각 계정들이 있다.
예를 들어, 데이터베이스 관리자 그룹에 속한 사용자를 위한 권한 셋을 정의해 Dev 계정, Prod 계정의 RDS 또는 Aurora에 액세스할 수 있게 설정하고 데이터베이스 관리자 그룹에 권한 셋을 할당하면, 사용자에 대해 IAM 역할이 자동으로 생성된다.
즉 사용자가 IAM 자격 증명 센터를 통해 로그인해서 Dev 계정 또는 Prod 계정의 콘솔에 액세스할 때 해당 계정에서 IAM 역할을 자동으로 위임한다.
AWS에서는 Microsoft Active Directory를 클라우드에서 사용할 수 있도록 여러 서비스를 제공한다. 이 서비스들은 각각 다르게 동작하며, 온프레미스 AD와의 통합 방식도 차이가 있다.
AWS 관리형 Microsoft AD와 통합
온프레미스 자체 관리형 디렉터리와 통합
온프레미스에 자체 관리형 디렉터리가 있는 경우, 연결 방법은 두 가지가 있다:
방법 1: AWS 관리형 Microsoft AD 사용
방법 2: AD 커넥터 사용
4가지 옵션이 있다.
설정에는 두 가지 버전이 있는데 Standard Edition은 최대 30,000 객체이고 Enterprise Edition은 최대 500,000 객체로 훨씬 더 많다.
AWS Control Tower 서비스를 사용하면 모범 사례를 기반으로 안전하고 규정을 준수하는 다중 계정 AWS 환경을 손쉽게 설정하고 관리할 수 있다. Control Tower는 AWS Organization 서비스를 활용해 계정을 자동으로 생성한다.
가드레일은 다중 계정 환경에서 특정 항목에 대해 한 번에 제한하거나 규정 준수를 모니터링할 때 사용된다. Control Tower 환경 내 모든 계정에 대한 거버넌스를 제공한다.
예방(Preventive) 가드레일
탐지(Detective) 가드레일