Cloud IAM
- Identity and Access Management
- 구글 클라우드 서비스의 ID 및 액세스 관리를 할 수 있도록 제공해주는 서비스
- 누가(ID) 어떤 리소스(GCP Service)에 대한 어떤 액세스 권한(Role)을 갖는지 제어 할 수 있게 함
IAM ID
- Google 계정
- 서비스 계정
- G Suite 도메인
- Google Group
Access 관리와 관련 개념
- 리소스
- Project
- Compute
- Engine instance
- GCS Bucket
- 권한
- service.resouce.verb
- 역할
- 권한의 집합
IAM Policy Object
IAM_Policy.json
{
"bindings": [
{
"role": "roles/storage.objectAdmin",
"members": [
"user:user@example.org",
"serviceAccount:my-service@appspot.gserviceaccount.com",
"group:admins@example.com",
"domain:google.com"
]
},
{
"role": "roles/storage.objectViwer",
"members": ["user:asdf@example.com"]
}
]
}
- bindings : members의 목록을 role에 연결
- role : 구성원에 배정하려는 역할 (GCS의 객체 관리자, 객체 생성자, 객체 뷰어 등...)
- members : 해당 권한에 배정될 멤버 리스트
- 구글 계정 (user:)
- 서비스 어카운트 (serviceAccount:)
- 구글 그룹 (group:)
- G Suite or Cloud ID 도메인 (domain:)
Policy 계층 구조
- Organization > (Folders) > Project > etc. resources
Cloud IAM 역할
기본 역할
역할 이름 | 역할 칭호 | 권한 |
---|---|---|
roles/owner | 소유자 | 프로젝트 및 프로젝트 내의 모든 리소스에 대한 역할 및 관리 프로젝트에 대한 결제 설정 |
roles/editor | 편집자 | 뷰어 권한에 리소스 변경과 같이 상태 변경 작업까지 포함됨 |
roles/viewer | 뷰어 | 읽기 전용 작업에 대한 권한이 부여됨 기존 리소스 또는 데이터의 조회가 해당됨 |
사전 정의된 역할
- 구글에서 만들고 유지 및 관리 (eg. 앱 엔진 관리자, BigQuery 사용자 등...)
- GCP에 새로운 기능이나 서비스가 추가될 떄와 같이 필요한 경우 자동으로 업데이트 됨
- https://cloud.google.com/iam/docs/choose-predefined-roles
커스텀 역할
- 사용자가 직접 정의
- 생성하기 위해서는 iam.roles.create 권한이 할당 되어야 함
- roles/iam.organizationRoleAdmin
- roles/iam.roleAdmin
서비스 계정
- 사용자가 아닌 애플리케이션 또는 가상 머신에 속한 계정
- 리소스이자 ID로 사용 가능
- 애플리케이션은 사용자 계정이 아닌 서비스 계정을 이용하여 GCP API에 접근 (계정 고유의 이메일 주소로 식별)
- ID로 사용 : 서비스 계정에 역할을 부여하여 프로젝트와 같은 리소스에 액세스 되게 할 수 있음
- 리소스로 사용 : 사용자에게 해당 서비스 계정에 액세스할 권한을 부여 할 수 있음
- 서비스 계정은 서비스 계정 키 쌍과 연결이 되며, 이러한 서비스 계정 키에는 크게 2가지 유형이 있음
- GCP 관리 : 서비스간 인증에 사용 (키의 순환 주기는 약 일주일 정도)
- 사용자 관리 : 새로운 키를 만들면 비공개 키를 다운로드하게 됨, 서비스 계정 당 최대 10개의 서비스 계정 키를 만들 수 있으며, 10년이 지나면 자동으로 만료됨
기존 정책 가지고 오기
gcloud project get-iam-policy <project ID> --format json > iam.json
정책 적용하기
gcloud project set-iam-policy <project ID> iam.json