업무/AWS기초

AWS 권한에 대해서 1.3 (JSON 기본 구조)

종금 2021. 4. 16. 16:17
반응형

이어서 계속 해보자
1.1 글 및 1.2글에서 누가 할수있냐 없냐까지 정했으니 이제 무엇을의 차례이다. 
이는 Action으로 정의할수있다.

8. Action(필수)
Action 및 NotAction 특정 작업의에 대한 내용을 적습니다. 이부분은 예시로 적용 시켜 설명하는 것이 이해하기 쉬울 것 같으니 바로 예시로 넘어가겠습니다
ex)
"Action": "ec2:*"   -> ec2의 모든 기능에 대해서
"Action": "ec2:StartInstances"   -> ec2에서 인스턴스 시작만 된다.
"NotAction": "s3:DeleteBucket",     -> s3에서 DeleteBucket(버켓 삭제)를 제외하고

다음과 같이 여러개도 한번에 지정이 가능하다
"Action": [ "sqs:SendMessage", "sqs:ReceiveMessage", "ec2:StartInstances", "iam:ChangePassword", "s3:GetObject"]

다음과 같이 작성시 기본적으로 Deny를 하고있으나 iam에 대한 작업만 허용한다라고 볼 수 있다 
즉 해당 정책을 적용한 계정 혹은 그룹은 IAM 작업만 가능하며 나머지 작업은 불가능하다

{ "Version": "2012-10-17",
   "Statement": [{
       "Sid": "DenyAllUsersNotUsingMFA",
       "Effect": "Deny",
       "NotAction": "iam:*",
       "Resource": "*",
       "Condition": {"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}}
    }]
}

 

9. Resource(필수)
AWS에서 리소스란 객체로 이를 통해 각 계정의 객체 접근을 제어할 수 있습니다.
리소스의 구조는 principal 요소처럼 arn구조로 이루어져있습니다(arn구조는 1.4에서 다루어보자)
("Resource": "arn:aws:sqs:us-east-2:account-ID-without-hyphens:queue1")

예시를 들어보면 다음과 같습니다.

1. IAM BOB 이용자를 나타내는 리소스 구조
"Resource"
: "arn:aws:iam::account-ID-without-hyphens:user/Bob"
2. 특정 S3 버켓(my_coperate_bucket)에 대한 리소스
"Resource": "arn:aws:s3:::my_corporate_bucket/*"
3. 다수의 리소스를 한번에 표현
"Resource": [
      "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/books_table",
      "arn:aws:dynamodb:us-east-2:account-ID-without-hyphens:table/magazines_table"
]
4. NotResource로 사용하면 반대로 가능(HRBucket 그룹 멤버는 Payroll 폴더만 접근 불가능)
"NotResource": [
        "arn:aws:s3:::HRBucket/Payroll",     -> Payroll 접근 불가
        "arn:aws:s3:::HRBucket/Payroll/*"   -> Payroll 하위 접근 불가
       ]
5. 특정 사용자(aws:username)가 dynamodb 사용 가능하게 하는 방법
"Resource": "arn:aws:dynamodb:us-east-2:ACCOUNT-ID-WITHOUT-HYPHENS:table/${aws:username}"

 

10. Condition
연산식으로 나타낸 정책의 효력 발생요건으로 말로 설명보다 예시가 빠를거같다 다음과 같은 문법 구조를 갖는다.
"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}
여기서 operator로 정의를 나타내고 key로 value의 종류 value로 기준을 잡습니다. 좀더 깊은 예시로

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }} 
-> StringEquals는 문자가 일치해야한다는 연산 정의
-> aws:username은 value의 기준이 username이며
-> johndoe는 username이 johndoe인 사람에게 정책을 적용한다 보면됩니다
(만약 johndoe에게 허락한다일때 username이 JohnDoe라면 대문자로 정책의 적용을 받지 않습니다)

이부분에 권한을 잘사용하기 위해선 operator종류가 핵심이다 다만 구성이 촘촘해질 수 있으며
다른 예시로는 다음 같이 구성도 가능하다.
(로그인 후 IAM에서(리소스) MFA를 3600(컨디션)초간 비활성화(Action)시킨다)

{
   "Version": "2012-10-17",                                                                           버전
       "Statement": {
           "Sid": "AllowRemoveMfaOnlyIfRecentMfa",                                     정책 statement 구별 id
           "Effect": "Allow",                                                                        허용한다
           "Action": [
                    "iam:DeactivateMFADevice",                                            MFA(멀티팩터)디바이스를 비활성화합니다.
                     "iam:DeleteVirtualMFADevice"                                        가상 MFA를 제거합니다.
                       ],
           "Resource": "arn:aws:iam::*:user/${aws:username}",                           iam에서 username 리소스를 대상
           "Condition": {
               "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} }       3600초(1시간)동안 MFA 인증 시간을 준다
         } 
 }




Action: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_action.html
NotAction: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_notaction.html
Resource: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_resource.html
NotResouce: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_notresource.html
Condition: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_condition.html
변수와 태그: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_variables.html
지원되는 데이터 형식: docs.aws.amazon.com/ko_kr/IAM/latest/UserGuide/reference_policies_elements_datatypes.html

 

반응형