IAM(Identity and Access Management)

 

IAM(Identity and Access Management)
AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스


IAM

  1. AWS 사용자 및 그룹과 AWS 서비스에 대한 사용자 권한을 생성하고 관리
  2. AWS 외부의 사용자도 지원 (Microsoft Active Directory, Facebook, Google 등에서 인증된 사용자에게 IAM 역할을 부여)
  3. AWS 서비스 접근을 위한 2단계 인증
    1. IAM 사용자 인증
    2. AWS 서비스 권한(정책) 인증
  4. IAM Policy
     "Sid": "Stmt1505076701000",             # who/what is authorized
     "Effect": "Allow",
     "Action": [
         "s3:DeleteObject",
         "s3:GetObject"
     ],
     "Condition": {
         "IpAddress": {
             "aws:SourceIP": "10.14.8.0/24
         }
     },
     "Resource": [
         "arn:aws:s3:::billing-marketing",
         "arn:aws:s3:::billing-sales"
     ]
    
  5. 그룹을 통해 사용자를 관리하는 것을 적극적으로 권장
  6. Usecase
    Alt text1
    1. 각 부서에 해당하는 IAM 그룹을 생성
    2. 정책을 생성하여 그룹에 할당
    3. 각 개인과 각 부서별로 IAM 사용자를 생성하여 해당 그룹에 추가
  7. 공식적으로 일상적인 태스크에 루트 사용자를 사용하지 않는 것을 권장

IAM Role

IAM Role
AWS에서 수행할 수 있는 작업과 수행할 수 없는 작업을 결정하는 권한이 부여된 AWS 자격 증명

  1. 일반적으로 AWS 리소스에 대한 액세스 권한이 없는 사용자, 애플리케이션, 서비스에 액세스 권한을 위임하는 데 사용
  2. Role이 임시로 부여된 사용자는 원래 자신의 권한을 포기하는 대신, Role의 사용 권한을 부여받음
  3. Usecase1 (EC2 application)
    Alt text
    1. IAM Role을 사용하여 임시 보안 자격 증명을 인스턴스 프로파일의 일부로 전달
    2. 이를 사용하여 인스턴스가 S3에 액세스
  4. Usecase2
    1. 일반적으로 할당되지 않는 권한을 임시로 제공

CLI

Create Policy

aws iam create-policy --policy-name LambdaS3Policy --policy-document file://policy.json
  • policy.json
      {
         "Version": "2012-10-17",
         "Statement": [
             {
                 "Effect": "Allow",
                 "Action": [
                     "logs:PutLogEvents",
                     "logs:CreateLogGroup",
                     "logs:CreateLogStream"
                ],
                "Resource": "arn:aws:logs:*:*:*"
              },
              {
                "Effect": "Allow",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::*/*"
            },
            {
                "Effect": "Allow",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::*/*"
            }
          ]
      }
    

Create Role

aws iam create-role --role-name LambdaS3Role --assume-role-policy-document file://trust-policy.json
  • trust-policy.json
      {
          "Version": "2012-10-17",
          "Statement": [
              {
              "Effect": "Allow",
              "Principal": {
                  "Service": "lambda.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
              }
          ]
      }
    

Attach Policy

aws iam attach-role-policy --role-name LambdaS3Role --policy-arn arn:aws:iam::AWS-ACCOUNT-NUMBER:policy/LambdaS3Policy

References

  1. Introduction to AWS Identity and Access Management (IAM)
  2. AWS IAM 서비스