자격증명 기반 정책(Identity-based policies)
자격증명 기반 정책 (Identity-based policies)
자격증명 기반 정책은 보안주체(IAM User, Group, Role)이 수행할 수 있는 작업,리소스 및 조건을 제어하는 JSON 권한 정책 문서입니다. 자격증명 기반 정책은 크게 3가지로 분류할 수 있습니다.
1. AWS 관리형 정책 (AWS Managed policies)
AWS 관리형 정책은 AWS에서 생성 및 관리하는 독립적인 정책입니다. 여기에서 독립적인 정책이란 정책 스스로 정책 이름이 포함된 Amazon 리소스 이름(ARN)을 갖고 있다는 것을 의미합니다. AWS 에서 대부분 제공되는 정책입니다. AWS에서 제공되는 정책이므로 글로벌하게 적용됩니다.
예를 들어 arn:aws:iam::aws:policy/IAMReadOnlyAccess
는 AWS 관리형 정책입니다.

2. 고객 관리형 정책 (Customer Managed policies)
독립적인 정책은 사용자 자신의 AWS 계정에서 관리하도록 생성할 수도 있습니다. 이러한 정책을 고객 관리형 정책이라고 합니다. 이렇게 생성된 정책은 AWS 계정에 속한 다수의 보안 주체 엔터티에 추가할 수 있습니다. 정책을 보안 주체 엔터티에 추가할 경우 정책에서 정의한 권한까지 엔터티에게 부여하게 됩니다.
고객이 관리하는 정책을 생성하는 좋은 방법은 AWS에서 관리하는 기존의 정책을 복사하여 시작하는 것입니다. 이렇게 하면 시작 시 올바른 정책으로 시작하므로 해당 환경에 맞게 사용자 지정만 하면 됩니다. 고객 관리형 정책은 만들어진 Account에서만 사용할 수 있습니다.

정책 리스트에서, AWS 관리형 정책은 정책 이름 앞에 AWS 아이콘이 표시되어져 있습니다. 그렇지 않은 것은 고객 관리형 정책입니다.

3. 인라인 정책 (In-line 정책)
인라인 정책은 IAM 자격 증명(사용자, 그룹 또는 역할)에 포함되는 정책입니다. 즉, 정책은 자격 증명의 고유한 부분입니다. 자격 증명을 생성하거나 이후에 생성할 때 정책을 생성하여 자격 증명에 삽입할 수 있습니다.

사용자 권한 추가 (AWS 관리형 정책)
아래와 같이 Super-Pro에 AmazonEC2ReadOnlyAccess 정책을 추가합니다.

1. 사용자 선택
IAM 좌측에서 사용자 선택 후, 권한을 추가할 사용자 이름(Super-Pro)을 클릭합니다.

2. 권한 추가
Super-Pro는 [Super]사용자 그룹에 속해있기 때문에 [Super]사용자 그룹에 부여된 [AdministratorAccess]권한을 상속받은 상태입니다. 이 상태에서 권한을 추가로 부여하기 위해, 권한 추가 버튼을 클릭합니다.

3. 권한 부여
AWS 관리형 정책인 AmazonEC2ReadOnlyAccess를 부여할 것이므로 상단의 기존 정책 직접 연결을 선택하고 AmaEC2ReadOnlyAccess 검색 후, 선택 후 다음: 검토 버튼을 클릭합니다.

4. 권한 요약
화면과 같이 권한이 추가된 것을 확인하고, 권한 추가 버튼을 클릭하여 권한을 추가합니다.

5. 결과 확인
아래 화면과 같이 [Super]사용자 그룹에서 상속받은 AdministratorAccess 권한과, 지금 방금 연결한 AmazonEC2ReadOnlyAccess 권한이 정상적으로 추가되었는지 확인합니다.

6. 사용자 권한 확인
Super-Pro는 AdministratorAccess (모든 권한) 정책과 AmazonEC2ReadOnlyAccess (EC2 읽기) 정책을 둘다 적용받았습니다. 명시적 Deny가 없는 상황에서는 2개 이상의 자격증명정책이 적용될시에는 OR로 적용됩니다. 실제로 EC2를 생성할 수 있는지 확인해 보겠습니다.
Super-Pro로 로그인을 한 후, EC2를 생성(Create)해보겠습니다.

서비스에서 EC2 선택, 좌측의 인스턴스 선택 후 인스턴스 시작 버튼을 클릭합니다. (리전이 서울인지 꼭 확인해주세요.)

가장 상단의 프리 티어 사용 가능 인스턴스를 선택합니다.

기본으로 선택되어 있는 인스턴스 타입을 확인 (프리 티어 사용 가능 인지 확인) 후, 검토 및 시작 버튼을 클릭합니다.

테스트를 위함이므로 별 다른 설정 없이 시작하기 버튼을 클릭합니다.

키 페어 없이 계속 을 선택, 바로 아래 문구에 체크하고 인스턴스 시작 버튼을 클릭합니다.

EC2 인스턴스가 정상적으로 생성된 것을 확인하실 수 있습니다.

Super-Pro에 적용된 AdministratorAccess정책과 AmazonEC2ReadOnlyAccess정책은 합집합 형태로 정책평가가 이루어져 EC2를 정상적으로 생성할 수 있음을 확인하였습니다.
인라인 정책 (In-line policies)
Dev(개발팀)에 속한 Dev-Intern은 개발을 위해 S3를 사용하고자 합니다. 하지만 Dev-Intern은 로그인 후, S3 서비스를 들어가보고는 권한이 없다는 것을 깨달았습니다.
Dev-Intern으로 로그인 후, 서비스에서 S3를 선택하시면 아래와 같이 권한이 없다는 것을 알 수 있습니다.

그래서 Dev-Intern은 운영팀에 S3에 대한 전체권한을 요청하였습니다. 이번에는 인라인정책을 이용하여, 아래와 같이 Dev-Intern에게 S3에 대해 목록,읽기 권한만을 추가해보겠습니다.

1. 사용자 선택
IAM 권한을 추가할수 있는, Super-Pro로 로그인 후 아래와 같이 인라인 정책을 추가하겠습니다.
IAM 좌측에서 사용자 선택 후, Dev-Intern 클릭합니다.

2. 인라인 정책 추가
권한탭을 선택하고, 우측의 인라인 정책 추가 를 클릭합니다.

3. 인라인 정책 생성
서비스: S3, 작업: 목록, 읽기 선택합니다.

밑으로 내려 리소스 부분을 클릭하면, 모든 리소스를 대상으로 할것인지, 특정 리소스를 대상으로 할것인지 선택하는 라디오버튼이 나타납니다. 모든 리소스를 선택하고 정책 검토 버튼을 클릭합니다.

혹은, 위의 JSON탭을 선택 후 아래의 JSON을 복사하여 붙여넣고 정책 검토 버튼을 클릭합니다. (JSON 에디터에서 일부러 틀린 문법을 만들어서, IAM Analyzer 정책 검증기의 기능을 확인해 보실수도 있습니다.)

{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:ListAccessPointsForObjectLambda",
"s3:GetObjectVersionTagging",
"s3:GetStorageLensConfigurationTagging",
"s3:GetObjectAcl",
"s3:GetBucketObjectLockConfiguration",
"s3:GetIntelligentTieringConfiguration",
"s3:GetObjectVersionAcl",
"s3:GetBucketPolicyStatus",
"s3:GetObjectRetention",
"s3:GetBucketWebsite",
"s3:GetJobTagging",
"s3:ListJobs",
"s3:GetMultiRegionAccessPoint",
"s3:GetObjectAttributes",
"s3:GetObjectLegalHold",
"s3:GetBucketNotification",
"s3:DescribeMultiRegionAccessPointOperation",
"s3:GetReplicationConfiguration",
"s3:ListMultipartUploadParts",
"s3:GetObject",
"s3:DescribeJob",
"s3:GetAnalyticsConfiguration",
"s3:GetObjectVersionForReplication",
"s3:GetAccessPointForObjectLambda",
"s3:GetStorageLensDashboard",
"s3:GetLifecycleConfiguration",
"s3:GetAccessPoint",
"s3:GetInventoryConfiguration",
"s3:GetBucketTagging",
"s3:GetAccessPointPolicyForObjectLambda",
"s3:GetBucketLogging",
"s3:ListBucketVersions",
"s3:ListBucket",
"s3:GetAccelerateConfiguration",
"s3:GetObjectVersionAttributes",
"s3:GetBucketPolicy",
"s3:GetEncryptionConfiguration",
"s3:GetObjectVersionTorrent",
"s3:GetBucketRequestPayment",
"s3:GetAccessPointPolicyStatus",
"s3:GetObjectTagging",
"s3:GetMetricsConfiguration",
"s3:GetBucketOwnershipControls",
"s3:GetBucketPublicAccessBlock",
"s3:GetMultiRegionAccessPointPolicyStatus",
"s3:ListBucketMultipartUploads",
"s3:GetMultiRegionAccessPointPolicy",
"s3:GetAccessPointPolicyStatusForObjectLambda",
"s3:ListAccessPoints",
"s3:GetBucketVersioning",
"s3:ListMultiRegionAccessPoints",
"s3:GetBucketAcl",
"s3:GetAccessPointConfigurationForObjectLambda",
"s3:ListStorageLensConfigurations",
"s3:GetObjectTorrent",
"s3:GetStorageLensConfiguration",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:GetBucketCORS",
"s3:GetBucketLocation",
"s3:GetAccessPointPolicy",
"s3:GetObjectVersion"
],
"Resource": "*"
}
]
}
정책 이름에 builders-inline 을 입력하고, 정책 생성 버튼을 클릭합니다.

권한 탭에서 아래와 같이 인라인 정책이 보이면 정상적으로 생성된 것입니다.

4. 사용자 권한 확인
이제 Dev-Intern으로 접속하여 S3 서비스로 가보면, 아까와는 달리 권한이 없다는 경고가 없어진 것을 보실 수 있습니다.

Last updated
Was this helpful?