IAM에 정책을 부여하기 위해, JSON 방식의 정의서를 작성해야 한다고 이전시간에 설명했다.
AWS에서 기초적인 정책 정의서를 제공하고 있지만, 우리가 실제로 업무를 할때 어떤 그룹에 어떤 정책을 정확하게 넣기 위해서는,
세부적인 사용법을 알아야 정확하게 정책을 넣었다 뺄 수 있고, 불필요한 권한을 주는것을 막을 수 있다.
적절한 예시로 aws에서 만든 AmazonAppFlowFullAccess 권한을 가지고 살펴보도록 하겠다.
예시를 읽기전에 아래의 내용을 3번 읽고 JSON을 읽으면 잘 이해가 될 것이다.
1.Version - 이 정책을 만든 버전의 날짜이다. 최초로 만들때 작성한다. 아래에서는 2012년인데, 이때 정책만들고 안바꾼것 같다.
2.Statement - 하나 또는 여러개의 서술문이 들어간다. 그래서, [ ] 안에 [ {1번 서술}, {2번서술}, {3번서술} ] 이렇게 등등 들어갈 수 있다. 아래에서는 무려 10개의 세부정책이 들어가있다.
3.sid - 이제 statement가 여러개기 때문에, sid를 읽고 아 이게 어떤 statement구나를 알기 위함이다. 숫자로 1,2,3,4 를 써도 되고 영문으로 서술해도 된다. 아래에서는 ListRolesForRedshift라고 Sid를 서술하였는데, 아 레드쉬프트를 위한 ListRole을 할당하는 statement구나? 라고 요약해서 써놓은것이다.
4.Effect - 허용할지 거부할지 서술하는 곳이다. allow 또는 Deny를 적게 된다.
5.principal - account나 user나 role을 적어서 정책을 적용한다. 특정 사용자에게만 정책을 적용할때 하는것인데.. 보통은 IAM그룹을 만들고 그안에 우리가만든 JSON서술된 정책을 넣고, 그안에 사용자를 넣기 때문에 여기에 직접 명시할 일이 있을까?? 뭐 그럴일이 있을 경우 적으면 되긴한다.
6. Action - 이제 세부적으로 어떤 행위를 4번 effect에서 설정한 allow 또는 deny시킬건지 정하는 곳이다. 위에 allow로 해놓고 아래에 iam:ListRoles 라고 하면, iam에 있는 ListRoles라는 행동이 허용이 되는것이다.
7.Resource - 리소스 즉 특정 경로상에 해당하는 부분의 영역에만 위 정책을 적용하겠다는 것이다. 우리가 s3 버킷 주소를 알고 있고, 특정 버킷주소에서 모든 파일 말고, 특정 경로의 파일들만 권한을 주고 싶을때에 경로를 지정해주면 된다.
그 외에 condition이 있는데, 어쩔때만 이 정책이 적용될지 서술하는것인데, 선택사항이란다. 따로 설명은 안하도록 하겠다.
이제 아래 내용을 읽고 이해해 보는 시간을 가지도록 하자.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "appflow:*",
"Resource": "*"
},
{
"Sid": "ListRolesForRedshift",
"Effect": "Allow",
"Action": "iam:ListRoles",
"Resource": "*"
},
{
"Sid": "KMSListAccess",
"Effect": "Allow",
"Action": [
"kms:ListKeys",
"kms:DescribeKey",
"kms:ListAliases"
],
"Resource": "*"
},
{
"Sid": "KMSGrantAccess",
"Effect": "Allow",
"Action": [
"kms:CreateGrant"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService": "appflow.*.amazonaws.com"
},
"Bool": {
"kms:GrantIsForAWSResource": "true"
}
}
},
{
"Sid": "KMSListGrantAccess",
"Effect": "Allow",
"Action": [
"kms:ListGrants"
],
"Resource": "*",
"Condition": {
"StringLike": {
"kms:ViaService": "appflow.*.amazonaws.com"
}
}
},
{
"Sid": "S3ReadAccess",
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetBucketPolicy"
],
"Resource": "*"
},
{
"Sid": "S3PutBucketPolicyAccess",
"Effect": "Allow",
"Action": [
"s3:PutBucketPolicy"
],
"Resource": "arn:aws:s3:::appflow-*"
},
{
"Sid": "SecretsManagerCreateSecretAccess",
"Effect": "Allow",
"Action": "secretsmanager:CreateSecret",
"Resource": "*",
"Condition": {
"StringLike": {
"secretsmanager:Name": "appflow!*"
},
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"appflow.amazonaws.com"
]
}
}
},
{
"Sid": "SecretsManagerPutResourcePolicyAccess",
"Effect": "Allow",
"Action": [
"secretsmanager:PutResourcePolicy"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"aws:CalledVia": [
"appflow.amazonaws.com"
]
},
"StringEqualsIgnoreCase": {
"secretsmanager:ResourceTag/aws:secretsmanager:owningService": "appflow"
}
}
},
{
"Sid": "LambdaListFunctions",
"Effect": "Allow",
"Action": [
"lambda:ListFunctions"
],
"Resource": "*"
}
]
}
이제 이해할 수 있게 되었으니, 언제든지 커스터마이징을 하여 작성할 수 있을 것이다. Action 안에 들어있는 세부 기능은, 아래와 같이 찾아볼 수 있다. lambda:ListFunctions 기능을 allow 해준건 알겠어. 근데 ListFunctions가 무슨 기능인데??? 라고 생각 할 것이다.
권한만들기를 눌러서, 권한을 만드는 화면에서 lambda를 선택하고, 필터에 listfunctions를 쳐보았다
정보를 클릭하면 위와 같이 설명이 나온다.
각 함수의 버전별 구성과 함께 AWS Lambda 함수 목록을 검색할 수 있는 권한을 부여합니다.
아 각 람다의 버전별 구성하고 목록을 볼 수 있는 권한이구나. 그냥 어떤게 있는지 조회만 할 수 있게 하는 것이구나 라는걸 알 수 있다.
실제 권한도 부여해보고 내가 그권한으로 접속해서 직접 어디까지 기능이 되는지를 살펴보면 더 좋은 실습이 될 수 있다.
우선은 SAA 나 SAP 에서 요구하는 것은 적절한 권한을 셋팅하는 것이므로, 내가 JSON 을 읽고 적절하게 권한을 부여해줄 수 있으면 될 것 같다.
한번 아래처럼 developers 권한을 만들어서 사용자에게 2개의 정책그룹과 1개의 직접 권한추가를 해보도록하자.
IAM Policy 정책을 만들때에는 사실 visual editor 로 만들게 된다.
기능을 찾아서 추가하고 추가하고, 하다보면 나중에 JSON 에디터에 마지막으로 저장된걸 확인할 수 있을것이다.
다음시간에는 IAM 사용자라 로그인할 때, 다인증방식 MFA 을 사용하는 방법과 비밀번호 정책에 대해서 알아보도록 하자.
'ETC > AWS- Amazon Web Service' 카테고리의 다른 글
AWS IAM 정리3- MFA와 계정암호 정책 설정(Google Authenticator 설정법) (1) | 2024.01.13 |
---|---|
AWS IAM 정리1 -IAM정의와 계정과 그룹 만들기 (1) | 2024.01.13 |
AWS EC2(Elastic Compute Cloud)종류와 활용 범위 (0) | 2022.10.19 |
클라우드 컴퓨팅과 AWS 핵심서비스 5분만에 알아보기 (0) | 2022.10.18 |
[AWS Developer Associate] AWS 정책의 종류 (0) | 2022.01.15 |