1.1. IAM(AWS Identity and Access Management)
AWS에서 리소스에 대한 액세스를 관리하는 서비스. IAM을 사용하면 사용자, 그룹 및 역할과 같은 엔터티를 생성하고, 각 엔터티에 리소스 액세스 권한을 부여하고, 액세스 권한을 모니터링하고 감사할 수 있음.
IAM은 AWS의 보안 핵심임. IAM을 사용하면 AWS 리소스에 액세스할 수 있는 사용자와 그룹을 제어하고, 각 사용자와 그룹에 액세스할 수 있는 리소스를 제어할 수 있음. IAM을 사용하면 액세스 권한을 모니터링하고 감사할 수 있으므로 AWS 리소스에 대한 무단 액세스를 방지할 수 있음.
IAM은 AWS의 모든 서비스를 지원. IAM을 사용하면 AWS EC2, AWS S3, AWS RDS 등 모든 AWS 서비스를 안전하게 사용할 수 있음.
IAM은 AWS의 중요한 보안 기능. IAM을 사용하면 AWS 리소스에 대한 액세스를 안전하게 관리할 수 있음.
1) 사용자(Users): AWS 리소스에 액세스할 수 있는 AWS 계정에 할당된 사람이나 애플리케이션. AWS 서비스에 액세스할 수 있는 권한을 부여하는 정책과 연결됨. 지속.
2) 그룹(Groups): IAM 사용자의 집합. 그룹을 사용하면 여러 사용자의 권한을 한 번에 지정할 수 있으므로 권한을 더 쉽게 관리할 수 있음. 조직에서 직원의 업무가 바뀌면 해당 사용자의 권한을 편집하는 대신 이전 사용자 그룹에서 해당 사용자를 제거한 후 적절한 새 사용자 그룹에 추가하면 됨.
3) 역할(Roles): AWS 리소스에 대한 액세스 권한을 부여하는 가상의 개체. 사용자, 애플리케이션 또는 기타 엔터티에 할당할 수 음. 자격 증명을 생성할 필요 없이 AWS 리소스에 액세스할 수 있음. 임시.
-EC2 인스턴스를 위한 역할
-서비스(API Gateway, CodeDeploy 등)를 위한 역할
-교차 계정 접근 역할
4) 정책(Policies): AWS 리소스에 대한 액세스 권한을 부여하는 문서. IAM 정책은 사용자, 그룹 또는 역할에 할당할 수 있음. IAM 정책은 자격 증명을 생성할 필요 없이 AWS 리소스에 액세스할 수 있음. WS 리소스에 액세스할 수 있는 사람을 제어하고 AWS 리소스에 대한 액세스를 제한할 수 있음.
-AWS 관리형 정책: AWS에서 생성 및 관리하는 관리형 정책. 초심자용.
-고객 관리형 정책: 사용자가 자신의 AWS 계정에서 생성 및 관리하는 관리형 정책. 고객 관리형 정책은 AWS 관리형 정책보다 정책에 대해 더욱 정밀하게 제어할 수 있음. 시각적 편집기에서 또는 JSON 정책 문서를 직접 생성하여 IAM 정책을 생성, 편집 및 검증할 수 있음.
-인라인 정책: 자신이 생성 및 관리하며, 단일 사용자, 그룹 또는 역할에 직접 포함되는 정책. 대부분의 경우 인라인 정책을 사용하지 않는 것이 좋음.
-리소스 기반 정책(Resource Based Policies): 리소스에 연결하는 JSON 정책 문서. 지정된 보안 주체에 해당 리소스에 대한 특정 작업을 수행할 수 있는 권한을 부여하고 이러한 권한이 적용되는 조건을 정의. 리소스에 대한 액세스를 더 세분화하고 제어할 수 있음.
1.2. IAM 정책 깊게 들여다보기
1) 정책 : JSON 문서 형태. Effect, Action, Resource, Condition, Policy Variables 등을 정의
2) 명시적 DENY가 ALLOW보다 우선함.
3) 최대한의 보안을 위해 최소한의 권한을 사용
4) IAM JSON 정책 요소
-Version: 사용하고자 하는 정책 언어의 버전을 지정.
-Statement: 이 주요 정책 요소를 다음 요소의 컨테이너로 사용. 정책에 설명문 둘 이상을 포함할 수 있음
-Sid(선택 사항): 선택 설명문 ID를 포함하여 설명문들을 구분.
-Effect: Allow 또는 Deny를 사용하여 정책에서 액세스를 허용하는지 또는 거부하는지 여부를 설명.
-Principal(일부 상황에서만 필요): 리소스 기반 정책을 생성하는 경우 액세스를 허용하거나 거부할 계정, 사용자, 역할 또는 페더레이션 사용자를 표시해야 함. 사용자 또는 역할에 연결할 IAM 권한 정책을 생성하면 이 요소를 포함할 수 없음. 보안 주체는 사용자 또는 역할을 의미.
-Action: 정책이 허용하거나 거부하는 작업 목록을 포함.
-Resource(일부 상황에서만 필요): IAM 권한 정책을 생성하는 경우 작업이 적용되는 리소스 목록을 지정해야 함. 리소스 기반 정책을 생성하는 경우 이 요소는 선택 사항. 이 요소를 포함하지 않으면 작업이 적용되는 리소스는 정책이 연결된 리소스.
-Condition(선택 사항): 정책에서 권한을 부여하는 상황을 지정.
1.3. IAM AWS 관리형 정책 샘플
1) 관리자 접근: 모든 작업에 대해 모든 리소스에 대한 액세스 허용
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
]
}
2) 운영자 접근: AWS 서비스 및 리소스에 대한 전체 액세스 권한을 제공하지만 사용자 및 그룹 관리는 허용하지 않음
{
"Version" : "2012-10-17",
"Statement" : [
{
"Effect" : "Allow",
"NotAction" : [
"iam:*",
"organizations:*",
"account:*"
],
"Resource" : "*"
},
{
"Effect" : "Allow",
"Action" : [
"iam:CreateServiceLinkedRole",
"iam:DeleteServiceLinkedRole",
"iam:ListRoles",
"organizations:DescribeOrganization",
"account:ListRegions"
],
"Resource" : "*"
}
]
}
1.4. IAM 역할 vs 리소스 기반 정책
모두 AWS 리소스에 대한 액세스를 제어하는 데 사용되지만, 몇 가지 중요한 차이점이 있음.
역할은 일반적으로 다른 서비스에서 사용되는 액세스 권한을 제공하는 데 사용되는 반면, 리소스 기반 정책은 일반적으로 리소스의 특정 작업을 제어하는 데 사용됨.
역할은 일반적으로 다른 서비스에서 사용되는 액세스 권한을 제공하는 데 사용됨. 예를 들어, Amazon EC2 인스턴스는 Amazon S3 버킷에 액세스할 수 있는 역할을 맡을 수 있음.
리소스 기반 정책은 일반적으로 리소스의 특정 작업을 제어하는 데 사용. 예를 들어, Amazon S3 버킷은 객체를 생성하거나 삭제할 수 있는 리소스 기반 정책을 가질 수 있음.
1.5. IAM Access Analyzer
AWS 계정의 권한을 감사하는 데 도움이 되는 서비스. AWS 리소스에 대한 액세스 권한을 부여하는 정책을 분석하고 권한 오용 또는 불필요한 액세스를 식별.
1) 어떤 리소스가 외부에 공유되는지 확인
-S3 버킷
-IAM 역할
-KMS 키
-Lambda 함수 및 계층
-SQS 대기열
-비밀 관리자 비밀
2) 신뢰 영역 정의 = AWS 계정 또는 AWS 조직
3) 신뢰 영역 외부 액세스 => 결과
4) 정책 검증
-IAM 정책 문법 및 모범 사례
-일반 경고, 보안 경고, 오류, 제안
-실행 가능한 권장 사항 제공
5) 정책 생성
-액세스 활동을 기반으로 IAM 정책 생성
-CloudTrail 로그를 검토하여 세분화된 권한과 적절한 작업 및 서비스로 정책을 생성.
-최대 90일 동안 CloudTrail 로그를 검토.
1.6. STS를 사용하여 역할 인수
1) 정의
AWS에서 제공하는 보안 토큰 서비스. AWS 리소스에 액세스하기 위한 임시 보안 자격 증명을 생성할 수 있음. 임시 보안 자격 증명은 다른 사용자, 애플리케이션 또는 서비스에 AWS 리소스에 대한 액세스 권한을 부여하는 데 사용. 계정 또는 교차 계정 내에서 IAM 역할 정의
-IAM 역할에 액세스할 수 있는 주체 정의
-AWS STS(보안 토큰 서비스)를 사용하여 자격 증명을 검색하고 액세스할 수 있는 IAM 역할(역할 API 가정)을 가장
-임시 자격 증명은 15분에서 12시간 사이에 유효
2) 액세스 제공 범위
-사용자가 소유한 한 AWS 계정의 IAM 사용자에게 사용자가 소유한 다른 계정의 리소스에 액세스할 수 있는 액세스 제공
-타사가 소유한 AWS 계정의 IAM 사용자에게 액세스 제공
-AWS에서 AWS 리소스에 제공하는 서비스에 대한 액세스 제공
-외부에서 인증된 사용자에 대한 액세스 제공(ID 연합)
-역할에 대한 활성 세션 및 자격 증명을 해지하는 기능(시간 문을 사용하여 정책 추가 – AWSRevokeOlderSessions)
** 역할(사용자, 애플리케이션 또는 서비스)을 맡은 경우 원래 권한을 포기하고 해당 역할에 할당된 권한을 취함
3) STS를 통한 교차 계정 액세스 절차 예제
3-1) 관리자는 개발 계정에 프로덕션 앱 버킷에 대한 읽기/쓰기 액세스 권한을 부여하는 역할을 생성.
3-2) 관리자는 그룹의 구성원에게 UpdateApp 역할을 맡을 수 있는 권한을 부여.
3-3) 사용자가 역할에 대한 액세스를 요청.
3-4) STS는 역할 자격 증명을 반환.
3-5) 사용자는 역할 자격 증명을 사용하여 S3 버킷에 액세스.
4) STS를 이용하여 타사가 소유한 계정에 대한 액세스 제공
-제3자에게 액세스 권한을 부여하는 경우: 타사 AWS 계정 ID, 외부 ID(사용자와 제3자 간의 비밀)
-사용자와 제3자 사이의 역할과 고유하게 연결
-트러스트를 정의할 때와 역할을 인수할 때 제공.
-IAM 정책에서 사용 권한 정의
5) STS 세션 태그
-AWS 서비스에서 세션을 식별하고 제어하는 데 사용되는 이름-값 쌍. 세션 태그는 IAM 사용자, 그룹 또는 역할에 임시 보안 자격 증명을 생성할 때 지정할 수 있음.
-세션을 식별하고 제어
-세션에 대한 액세스 제어 정책을 생성
-세션에 대한 감사 추적을 수행
-조건에서 aws:Principal 사용하여 요청하는 주체에 부착된 태그를 정책에서 지정한 태그와 비교함
6) STS 중요 API
-AssumeRole(역할 가정): 계정 또는 교차 계정 내의 역할에 액세스
-AssumeRoleWithSAML(SAML을 사용한 역할 가정): SAML로 기록된 사용자의 자격 증명 반환
-AssumeRoleWithWebIdentity(WebIdentity를 사용한 역할 가정): IdP로 기록된 사용자의 자격 증명 반환
-GetSessionToken(세션 가져오기토큰): MFA의 경우 사용자 또는 AWS 계정 루트 사용자로부터 가져옴
-GetFederationToken(페더레이션토큰): 연합 사용자에 대한 임시 자격 증명 획득(일반적으로 회사 네트워크 내의 분산 앱에 자격 증명을 제공하는 프록시 앱)
1.7. AWS Identity Federation
AWS와 타사 ID 제공자 간의 SSO를 제공하는 서비스. 이를 통해 AWS 사용자는 타사 ID 제공자에서 생성한 단일 ID를 사용하여 AWS 리소스에 액세스. 사용자는 여러 AWS 리소스에 액세스할 때마다 로그인할 필요가 없음. 사용자 ID를 한 곳에서 관리할 수 있으므로 보안을 강화할 수 있음. 타사 ID 제공자를 사용하여 AWS에 액세스하는 사용자를 관리할 수 있음.
1) 이점
-AWS 외부 사용자에게 계정의 AWS 리소스에 액세스할 수 있는 권한 부여
-IAM 사용자를 생성할 필요가 없음(사용자 관리는 AWS 외부에 있음)
2) 종류
-SAML 2.0
-사용자 지정 ID 브로커
-Custom Identity Broker
-Web Identity Federation With(out) Amazon Cognito
-Single Sign-On (SSO)