참고 자료
1. IAM
🧑💻 Users & Groups
IAM: Identify and Access Management, Global service
- 사용자를 생성하고 그룹에 배치하기 때문에 글로벌 서비스에 해당된다.
- Root account: 기본적으로 생성되며, 생성 후에는 루트 계정을 더이상 사용해서도, 공유해서도 안 됨. 대신 사용자를 생성해야 함.
- Users: 하나의 사용자는 조직 내의 한 사람에 해당됨. 필요하다면 사용자들을 그룹으로 묶을 수도 있음.
- Groups: 그룹에는 사용자만 배치할 수 있음. 다른 그룹은 포함할 수 없음.
사용자와 그룹을 생성하는 이유? 이들이 AWS 계정을 사용하도록 허용하기 위해서!
✅ Permissions
- 사용자 또는 그룹에게 policy, 또는 IAM policy라고 불리는 JSON 문서를 지정할 수 있음. (특정 사용자, 혹은 특정 그룹에 속한 모든 사용자들이 어떤 작업에 권한을 가지고 있는지 설명해놓은 것)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "ec2:Describe*",
"Resource": "*",
},
{
"Effect": "Allow",
"Action": "elasticloadbalancing:Describe*",
"Resource": "*",
},
{
"Effect": "Allow",
"Action": [
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:Describe*"
],
"Resource": "*",
},
]
}
- 이 정책들을 사용해 사용자들의 권한을 정의 할 수 있음.
- AWS에서는 least privilege principle(최소 권한의 원칙)을 사용.
- 사용자가 꼭 필요로 하는 것 이상의 권한을 주지 않는 것을 의미
🏛️ Policies Structure
Consists of
- Version: 정책 언어 버전(보통은 "2012-10-17")
- Id: 정책을 식별하는 ID (optional)
- Statement: 한 개 이상의 statements (required)
Statements consist of
- Sid(시드): Statement ID, Statement의 식별자 (optional)
- Effect(효과): Statement가 특정 API에 접근하는 걸 허용할지, 거부할지에 대한 내용 (Allow / Deny)
- Principal(원칙): 특정 정책이 적용될 사용자, 계정, 혹은 역할
- Action(조치): effect에 기반해 허용 및 거부되는 API 호출의 목록
- Resource(리소스): 적용될 action의 리소스 목록
- Condition(조건): Statement가 언제 적용될지 결정 (optional)
🔐 Password Policy
- Strong password = higher security for your account
- AWS에는 다양한 옵션을 이용하여 비밀번호 정책의 생성이 가능
- 비밀번호 최소 길이 설정
- 특정 유형의 글자 사용 요구(대문자, 소문자, 숫자, 특수문자 등)
- IAM 사용자들의 비밀번호 변경을 허용 또는 금지
- 일정기간이 지난 후 비밀번호 만료, 새 비밀번호 설정 요구
- 비밀번호의 재사용 금지
🔐🔐🔐 Multi Factor Authentication - MFA
- 사용자들은 계정에 접근 권한이 있고, 많은 작업을 할 수 있음. 특히 관리자인 경우 구성을 변경하거나 리소스를 삭제하는 등의 작업을 할 수 있음.
- 따라서 적어도 루트 계정은 무슨 일이 있어도 반드시 보호해야 하고, 또한 전체 IAM 사용자들도 보호를 해야 함.
- 따라서 비밀번호 이외에 사용할 수 있는 수단으로서 MFA가 있음.
MFA: password you know + security device you own
if a password is stolen or hacked, the account is not compromised!
MFA devices opitons in AWS
- Virtual MFA device: 하나의 장치에서도 토큰을 여러개 지원함. 즉, 루트 계정, IAM 사용자, 또 다른 계정 등 원하는 수 만큼의 계정 및 사용자 등록이 가능함.
- Google Authenticator (phone only)
- Authy (multi-device)
- Universal 2nd Factor (U2F) Security Key: 하나의 보안 키에서 여러 루트 계정과 IAM 사용자를 지원함.
- Yubikey by Yubico (3rd party)
- Hardware Key Fob MFA Device
- Provided by Gemalto (3rd party)
- Hardware Key Fob MFA Device for AWS GovCloud (US)
- Proviced by SurePassID (3rd party)
2. AWS CLI
🖱️ How can users access AWS?
- To Access AWS,
- AWS Management Console (protected by password + MFA)
- AWS Command Line Interface (CLI): protected by access keys
- AWS Software Developer Kit (SDK) - for code: protected by access keys
- Access Keys는 AWS 콘솔을 통해 생성.
- 사용자들이 자신들의 액세스 키를 직접 관리.
- Access Keys are secret, just like a password. Don't share them
- Access Key ID ~= username
- Secret Access Key ~= password
📋 AWS CLI (Command Line Interface)
- AWS CLI: Command-line shell에서 명령어를 사용하여 AWS 서비스들과 상호작용할 수 있도록 하는 도구.
- AWS CLI를 사용하면 AWS의 공용 API로 직접 액세스 가능.
- AWS CLI를 통해 리소스를 관리하는 스크립트를 개발해 일부 작업을 자동화할 수 있음.
- AWS Management Console 대신 사용되기도 함.
📦 AWS SDK (Software Development Kit)
- 특정 언어로 된 라이브러리의 집합. 따라서 프로그래밍 언어에 따라 개별 SDK가 있음.
- AWS SDK를 사용하면 AWS의 서비스나 API에 프로그래밍을 위한 액세스 가능.
- SDK는 터미널 내에서 사용하는 것이 아닌 코딩을 통해 애플리케이션 내에 심어두는 것. 즉, 애플리케이션 내에 자체적으로 AWS SDK가 있는 것.
- Supports:
- SDKs (JavaScript, Python, PHP, NET, Ruby, Java, Go, Node.js, C++)
- Mobile SDKs
- IoT Device SDKs
- 예: AWS CLI는 사실상 Boto라는 Python용 AWS SDK에 구축되어 있음.
3. IAM Role
💡 IAM Roles for Services
- 몇몇 AWS는 본인 계정에서 실행해야 함. 이를 위해서는 사용자와 마찬가지로 어떤 권한이 필요. 따라서 AWS 서비스에 권한을 부여해야 함.
- To do so, we will assign permission to AWS services with IAM Roles.
- IAM Role은 사용자와 비슷하지만 실제 사람이 사용하도록 만들어진 것이 아니고, AWS 서비스에 의해 사용되도록 만들어짐.
- Command roles:
- EC2 Instance Roles
- Lambda Function Roles
- Roles for CloudFOrmaiton
- IAM Credentials Report (account-level)
- 계정에 있는 사용자와 다양한 자격 증명의 상태 포함
- IAM Access Advisor (user-level)
- 사용자에게 부여된 서비스의 권한과 해당 서비스에 마지막으로 액세스한 시간을 볼 수 있음.
- 해당 도구를 사용하여 어떤 권한이 사용되지 않는지 볼 수 있고, 이를 통해 사용자의 권한을 줄여 최소 권한의 원칙을 지킬 수 있음.
🧾 IAM Guidlines & Best Practices
- 루트 계정은 AWS 계정을 설정할 때를 제외하고 사용 ❌
- One physical user = One AWS user
- 사용자를 그룹에 넣어 해당 그룹에 권한을 부여할 수 있음 → 그룹 수준에서 보안 관리 가능.
- 비밀번호 정책을 강력하게 할 것.
- MFA를 사용할 수 있다면 꼭 사용할 것.
- AWS 서비스에서 권한을 부여할 때마다 Role를 만들고 사용해야 함.
- CLI 혹은 SDK를 사용할 경우 Access Key를 만들고 사용할 것. Access Key는 비밀번호와 같음.
- 계정의 권한을 감사할 때에는 IAM Credential Report를 사용할 수 있음.
- Never share IAM users & Access Keys
4. IAM - Summary
- Users: mapped to a physical user, has a password for AWS Console
- Groups: contains users only
- Policies: JSON document that outlines permissions for users or groups
- Roles: for EC2 instances or AWS services
- Security: MFA + Password Policy
- AWS CLI: manage your AWS services using the command-line
- AWS SDK: manage your AWS services using a programming language
- Access Keys: access AWS using the CLI or SDK
- Audit: IAM Credential Reports & IAM Access Advisor