구글 클라우드 플랫폼(GCP) Cloud IAM
Cloud IAM은 Identity and Access Management의 약자로 구글 클라우드 서비스의 ID및 엑세스 관리를 제공해 주는 서비스로 누가 어떤 리소스에 대해 어떠한 엑세스 권한을 갖는지 제어 할 수 있게 합니다. 구글의 Cloud IAM을 사용하면 어드민은 누가, 언제, 어떤 리소스에 접근해서 이용하는지에 대한 제어를 할 수 있어서 클라우드 리소스를 중앙에서 쉽게 관리 할 수 있습니다. 또한 큰 규모의 조직에서도 조직 전체에 적용하는 기능들 역시 내제되어 있습니다. Cloud IAM에서 정책을 만들면 IAM에서 사용하는 ID별로 역할을 줄 수 있으며, 이는 구글 클라우드 플랫폼 내에서 각 리로스 별로도 설정할 수 있습니다. 구글 클라우드 플랫폼내 ID는 다음과 같이 이루어집니다.
- 구글 계정 : 개별 사용자 계정으로 이와 관련된 모든 이메일 주소는 ID가 될 수 있습니다.
- 서비스 계정 : 어플리케이션에 속한 계정으로 구글 클라우드 플랫폼에서 호스팅되는 코드를 실행할때는 코드를 실행하는 계정을 지정하게 됩니다.
- 구글 그룹 : 여러 구글 계정과 서비스를 모은 구릅으로 모든 그룹에는 고유한 이메일 주소가 있습니다.
- G-Suite : G-Suite 도메인은 조직의 지 수트 계정에서 생성된 모든 구글 계정으로 구성된 가상 그룹을 의미합니다.
IAM 정책
IAM 정책은 사용자에게 부여되는 권한의 유형을 가지고 있는 리스트입니다. 또한 역학별로 각 역할에 대한 권한을 가진 맴버들의 리스트로 구성되며 사용자가 리소스에 엑세스 할 떄 IAM 정책을 통해서 엑세스를 제어합니다. IAM 정책은 IAM Policy로 나타내며 다음과 같은 json형태의 목록으로 구성됩니다.
binding | 맴버의 목록을 role에 연결합니다 |
role | 구성원에게 배정하려는 역할을 의미합니다 |
members | 해당 권한에 배정될 맴버리스트로 이곳에 들어갈 수 있는 구성원 유형은 구글 계정, 서비스 계정, 구글 그룹, G-Suit의 키를 사용하여 설정 할 수 있습니다 |
{
"bindings": [
{
"role": "roles/resourcemanager.organizationAdmin",
"members": [
"user:mike@example.com",
"group:admins@example.com",
"domain:google.com",
"serviceAccount:my-project-id@appspot.gserviceaccount.com"
]
},
{
"role": "roles/resourcemanager.organizationViewer",
"members": [
"user:eve@example.com"
],
"condition": {
"title": "expirable access",
"description": "Does not grant access after Sep 2020",
"expression": "request.time < timestamp('2020-10-01T00:00:00.000Z')",
}
}
],
"etag": "BwWWja0YfJA=",
"version": 3
}
IAM의 역할
먼저 기본역할로는 소유자(Owner), 편집자(Editor), 뷰어(Viewer)로 나누어져있습니다.
Owner | 소유자 | 모든 리소스에 대한 역할 및 관리 |
Editor | 편집자 | 뷰어의 권한 + 상태 변경 작업 |
Viewer | 뷰어 | 읽기 전용 작업(read-only) |
이외에도, 사전 정의된 역할로 BigQuery 사용자와 같은 기본역할 보다 더욱 세부적인 엑세스를 부여하는 역할이 존재하며, 사전 정의된 역할 이상의 세부적인 관리가 필요 할 떄에는 커스텀 역할을 할당할 수 있습니다. 커스텀 역할의 경우 생성하기 위해서 "iam.role.crerate" 권한이 필요하기 때문에 커스텀 역할을 만들기 위해서는 role/iam.organizationRoleAdmin 또는 role/iam.role.Admin이 주어저야합니다.