서비스 계정에 역할 부여

IAM 역할을 부여할 때 서비스 계정을 리소스로 취급할 수도 있고, ID로 취급할 수도 있습니다.

애플리케이션에서는 서비스 계정을 ID로 사용하여 Google Cloud Platform 서비스에 인증합니다. 예를 들어 특정 서비스 계정으로 Compute Engine 가상 머신(VM)을 실행하는 경우, 프로젝트(리소스)의 서비스 계정(ID)에 편집자 역할을 부여할 수 있습니다.

이와 동시에, 어떠한 사용자가 VM을 시작할 수 있는지를 제어할 수도 있습니다. 사용자(ID)에게 서비스 계정(리소스)에 대한 serviceAccountUser 역할을 부여하면 됩니다.

서비스 계정에 대한 자세한 내용 및 서비스 계정을 리소스와 ID로 사용하는 예를 보려면 서비스 계정을 참조하세요.

이 가이드의 선행 조건

  • 이 가이드의 명령줄 예를 사용하려면 gcloud 명령줄 도구를 설치합니다.

  • 역할 이해 문서를 참조하여 서비스 계정에 부여할 수 있는 사전 정의된 역할 목록을 확인합니다.

서비스 계정에 특정 리소스에 대한 역할 부여

서비스 계정에 역할을 부여하여 Cloud Platform 프로젝트에 속한 리소스에 대해 특정 작업을 완료할 권한을 줄 수 있습니다. 예를 들어 서비스 계정에 storage.admin 역할을 부여하여 Google Cloud Storage의 객체와 버킷을 제어하도록 허용할 수 있습니다.

서비스 계정에 역할을 부여하려면 아래 방법 중 하나를 사용합니다.

gcloud

단일 서비스 계정에 역할을 추가합니다.

gcloud projects add-iam-policy-binding my-project-123 \
    --member serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com --role roles/editor

명령을 실행하면 업데이트된 정책이 출력됩니다.

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com
      - user:email3@gmail.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
    role: roles/viewer
    etag: BwUm38GGAQk=
    version: 1

서비스 계정을 프로젝트의 ID로 취급하여 액세스 권한을 부여하는 방법은 프로젝트 구성원에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

API

다음 POST 요청에서는 projects.setIamPolicy() 메소드를 사용하여 my-project-123 프로젝트의 서비스 계정 my-sa-123에 편집자 액세스 권한을 부여합니다. 요청 본문은 서비스 계정에 권한을 부여하는 새 정책을 포함해야 합니다. 각 역할은 여러 구성원을 가질 수 있습니다.

POST https://cloudresourcemanager.googleapis.com/v1beta1/projects/my-project-123:setIamPolicy

{
    "policy":
    {
        "version": 1,
        "etag": "BwUqMvZQGfo=",
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
                "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
                "user:alice@gmail.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@gmail.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@gmail.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@gmail.com"
            ]
        },
        ]
    },
}

응답에는 새 정책이 포함됩니다.

{
    "version": 1,
    "etag": "BwUqMvZQGfo=",
    "bindings": [
    {
        "role": "roles/editor",
        "members": [
            "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
            "user:alice@gmail.com"
        ]
    },
    {
        "role":"roles/owner",
        "members":
        [
            "user:bob@gmail.com",
        ]
    },
    {
        "role":"roles/viewer",
        "members":
        [
            "user:john@gmail.com",
        ]
    },
    {
        "role":"roles/iam.serviceAccountUser",
        "members":
        [
            "user:alice@gmail.com"
        ]
    },
    ]
}

콘솔

프로젝트에서 사용자의 역할을 관리할 때와 같은 방법으로 서비스 계정의 역할을 관리할 수 있습니다.

  1. GCP 콘솔에서 IAM 및 관리자 페이지를 엽니다.

    IAM 및 관리자 페이지 열기

  2. 프로젝트를 선택한 다음 계속을 클릭합니다.

  3. 역할을 추가할 서비스 계정을 찾습니다.

    • 서비스 계정이 구성원 목록에 아직 없는 경우 어떠한 역할도 할당되지 않은 것입니다. 추가를 클릭하고 서비스 계정의 이메일 주소를 클릭합니다.
    • 서비스 계정이 구성원 목록에 이미 있는 경우 기존 역할이 있는 것입니다. 수정할 서비스 계정에서 역할 아래의 드롭다운 목록을 클릭합니다.
  4. 서비스 계정에 적용할 역할을 하나 이상 선택합니다.

  5. 추가 또는 저장을 클릭하여 서비스 계정에 역할을 적용합니다.

서비스 계정 소유권 및 액세스 구성

서비스 계정을 ID가 아닌 리소스로 취급하여 특정 사용자에게 서비스 계정에 대한 소유권과 액세스 권한을 부여할 수 있습니다. 이 섹션의 단계에서는 서비스 계정을 리소스로 취급합니다. 각 사용 유형의 차이점에 대한 자세한 내용은 서비스 계정 항목을 참조하세요.

기본 프로젝트 소유자 및 프로젝트 편집자 역할이 있는 사용자는 이미 서비스 계정을 수정할 수 있지만, 서비스 계정 리소스에 대한 특정 작업만 수행할 수 있도록 일부 사용자의 액세스 권한을 제한할 수도 있습니다.

사용자에게 서비스 계정에 대한 권한을 부여하려면 아래 방법 중 하나를 사용합니다.

gcloud

전체 정책 업데이트:

  1. 수정할 정책을 가져와서 JSON 파일에 기록합니다. --format 플래그를 사용하여 출력 형식을 선택할 수 있습니다. 사용 가능한 출력 형식은 JSON, YAML, 텍스트입니다. 이 페이지의 다른 예에서는 기본 텍스트 출력 형식을 사용하지만, 이 예에서는 출력을 JSON 파일(policy.json)에 기록하고 기존 정책을 수정한 후 설정합니다.

    gcloud iam service-accounts get-iam-policy \
        my-sa-123@my-project-123.iam.gserviceaccount.com \
        --format json > policy.json
    

    이 명령은 서비스 계정 자체에 설정된 정책만 반환합니다. 서비스 계정에 설정된 기존 정책이 없는 경우 JSON 파일의 내용은 다음과 유사합니다.

    {
      "etag": "ACAB"
    }
    

    기존 정책이 없는 경우 아래 단계에 따라 단일 바인딩으로 새 정책을 설정할 수도 있고, 다음 단계의 JSON을 템플릿으로 사용하여 정책을 직접 만들 수도 있습니다.

    이미 적용 중인 정책이 있는 경우 출력된 policy.json 파일의 내용은 다음과 유사합니다.

    {
      "bindings": [
        {
          "members": [
            "user:bob@gmail.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8="
    }
    
  2. 텍스트 편집기에서 policy.json 파일을 수정합니다. bindings 배열에 그룹 구성원과 해당 역할을 정의하는 새 객체를 추가하면 됩니다. bindings 배열이 아직 없으면 새로 만듭니다. alice@gmail.comserviceAccountUser 역할을 부여하려면 위의 예시를 아래와 같이 변경해야 합니다.

    {
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        }
        ],
        "etag": "BwUqLaVeua8=",
    }
    
  3. 다음 명령을 실행하여 정책을 업데이트합니다.

    gcloud iam service-accounts set-iam-policy \
        my-sa-123@my-project-123.iam.gserviceaccount.com policy.json
    


    명령을 실행하면 업데이트된 정책이 출력됩니다.

    bindings:
    - members:
      - user:alice1@gmail.com
        role: roles/iam.serviceAccountUser
      - members:
    - bob@gmail.com
      role: roles/owner
      etag: BwUjMhXbSPU=
      version: 1
      


단일 바인딩 추가:

다음 명령을 실행하여 새 정책이나 기존 정책에 단일 바인딩을 추가할 수 있습니다.

gcloud iam service-accounts add-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

명령을 실행하면 업데이트된 정책이 출력됩니다.

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner - members: - user:jane@gmail.com role: roles/editor etag: BwUqKjVeua8= version: 1


단일 바인딩 삭제:

다음 명령을 실행하여 기존 정책에서 단일 바인딩을 삭제할 수 있습니다.

gcloud iam service-accounts remove-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

명령을 실행하면 업데이트된 정책이 출력됩니다.

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner etag: BwUqNkVeua8= version: 1

API

요청:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:setIamPolicy

요청 본문은 부여할 정책을 포함해야 합니다.

{
    "policy":
    {
        "etag": "BwUqLaVeua8=",
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        },
        ]
    },
}

응답에는 업데이트된 정책이 포함됩니다.

{
    "etag": "BwUqMqbViM8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
        "user:bob@gmail.com"
        ]
    }
    ]
}

콘솔

  1. GCP 콘솔에서 IAM 및 관리자 페이지를 엽니다.

    IAM 및 관리자 페이지 열기

  2. 프로젝트를 선택한 다음 계속을 클릭합니다.

  3. 왼쪽 탐색 메뉴에서 서비스 계정을 클릭합니다.

  4. 서비스 계정을 선택하고 권한을 클릭합니다. 해당 서비스 계정에 액세스할 수 있는 모든 사용자가 표시됩니다.

  5. 프로젝트 구성원의 이메일 주소를 추가합니다.

  6. 구성원의 역할을 선택하여 해당 구성원이 서비스 계정에 대해 수행할 수 있는 작업을 정의합니다.

  7. 추가를 클릭하여 프로젝트 구성원에게 역할을 적용합니다.

서비스 계정의 기존 역할 보기

serviceAccounts.getIamPolicy() 메소드, GCP 콘솔, gcloud 도구를 사용하여 서비스 계정의 IAM 정책을 가져올 수 있습니다.

gcloud

서비스 계정의 정책을 가져오려면 다음 명령을 실행합니다.

gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com

다음과 유사한 정책이 출력됩니다.

bindings:
- members:
  - user:bob@gmail.com
    role: roles/owner
- members:
  - user:alice@gmail.com
    role: roles/iam.serviceAccountUser
etag: BwUqLaVeua8=
version: 1

서비스 계정에 역할을 할당하지 않은 경우 다음과 같이 출력에 etag 값만 표시됩니다.

etag: ACAB

API

다음 코드는 서비스 계정 my-sa-123@my-project-123.iam.gserviceaccount.com의 IAM 정책을 가져옵니다.

요청:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:getIamPolicy

응답:

{
    "etag": "BwUqLaVeua8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    }
    ]
}

서비스 계정에 역할을 할당하지 않은 경우 다음과 같이 응답에 etag 값만 포함됩니다.

{
  "etag": "ACAB"
}

콘솔

  1. GCP 콘솔에서 IAM 및 관리자 페이지를 엽니다.

    IAM 및 관리자 페이지 열기

  2. 프로젝트를 선택한 다음 계속을 클릭합니다. 이 페이지에 해당 프로젝트의 모든 사용자와 해당 역할이 나열됩니다.

  3. 왼쪽 탐색 메뉴에서 서비스 계정을 클릭합니다.

  4. 서비스 계정을 선택하고 권한을 클릭합니다. 서비스 계정의 모든 역할이 표시됩니다.

IAM 정책에 대한 자세한 내용은 정책을 참조하세요.

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Cloud ID 및 액세스 관리 문서