이어서 계속 해보자
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
'업무 > AWS기초' 카테고리의 다른 글
EC2 보안설정 종료에 대하여 (인스턴스 설정) (0) | 2021.04.27 |
---|---|
AWS Cli 사용하기 (0) | 2021.04.27 |
AWS 권한에 대해서 1.4 (arn에 대해서) (0) | 2021.04.19 |
AWS 권한에 대해서 1.2 (JSON 기본 구조) (0) | 2021.04.16 |
AWS 권한에 대해서 1.1 (JSON 기본 구조) (0) | 2021.04.16 |