서비스 계정 사용 제한

Resource Manager는 조직 정책에서 Identity and Access Management(IAM) 서비스 계정의 사용을 제한하는 데 사용할 수 있는 제약조건을 제공합니다.

이러한 제약조건 중 다수는 서비스 계정 및 기타 리소스를 특정 방식으로 만들거나 구성할 수 있는지 여부를 결정합니다. 이러한 제약조건은 소급 적용되지 않으며 이전에 만들어 구성한 서비스 계정에는 영향을 주지 않습니다.

시작하기 전에

제약조건을 설정하려면 조직 정책을 수정할 권한이 있어야 합니다. 예를 들어 orgpolicy.policyAdmin 역할은 조직 정책 제약조건을 설정할 권한이 있습니다. 조직 수준에서 정책을 관리하는 방법에 대해서는 제약조건 사용 페이지에서 자세히 알아보세요.

불리언 제약조건

다음 제약조건은 불리언 제약조건의 유형이며 true 또는 false로 설정됩니다.

기본 서비스 계정에 대한 자동 역할 부여 사용 중지

일부 Google Cloud 서비스는 자동으로 기본 서비스 계정을 만듭니다. 기본 서비스 계정이 생성되면 프로젝트에 대한 편집자 역할(roles/editor)이 자동으로 부여됩니다.

보안을 강화하려면 자동 역할 부여를 사용 중지하는 것이 좋습니다. iam.automaticIamGrantsForDefaultServiceAccounts 불리언 제약조건을 사용하여 자동 역할 부여를 사용 중지합니다.

서비스 계정 생성 사용 중지

iam.disableServiceAccountCreation 불리언 제약조건을 사용하여 새로운 서비스 계정 생성을 사용 중지할 수 있습니다. 이렇게 하면 개발자가 프로젝트에 대해 갖는 다른 권한을 제한하지 않으면서 서비스 계정을 중앙에서 관리할 수 있습니다.

프로젝트에 이 제약조건을 적용하면 일부 Google Cloud 서비스는 기본 서비스 계정을 자동으로 만들 수 없습니다. 따라서 프로젝트가 서비스 계정을 가장해야 하는 워크로드를 실행하면 프로젝트에는 워크로드가 사용할 수 있는 서비스 계정이 포함되지 않을 수 있습니다. 이 문제를 해결하려면 프로젝트 간 서비스 계정 명의 도용을 사용 설정하면 됩니다. 이 기능을 사용 설정하면 중앙 집중식 프로젝트에서 서비스 계정을 만든 다음 다른 프로젝트의 리소스에 서비스 계정을 연결할 수 있습니다.

서비스 계정 구성에 대한 자세한 내용은 서비스 계정 생성 위치를 참조하세요.

서비스 계정 키 생성 사용 중지

iam.disableServiceAccountKeyCreation 불리언 제약조건을 사용하여 새로운 외부 서비스 계정 키 생성을 사용 중지할 수 있습니다. 이렇게 하면 서비스 계정에 대한 장기 비관리 사용자 인증 정보의 사용을 제어할 수 있습니다. 이 제약조건이 설정되면 제약조건의 영향을 받는 프로젝트에서 서비스 계정에 대해 사용자 관리 사용자 인증 정보를 만들 수 없습니다.

서비스 계정 키 업로드 사용 중지

iam.disableServiceAccountKeyUpload 불리언 제약조건을 사용하여 서비스 계정에 외부 공개 키 업로드를 사용 중지할 수 있습니다. 이 제약조건이 설정되면 사용자는 제약 조건의 영향을 받는 프로젝트의 서비스 계정에 공개 키를 업로드할 수 없습니다.

다른 프로젝트의 리소스에 서비스 계정 연결 사용 중지

각 서비스 계정은 프로젝트에 위치합니다. iam.disableCrossProjectServiceAccountUsage 불리언 제약조건을 사용하여 프로젝트의 서비스 계정이 다른 프로젝트의 리소스에 연결되지 않도록 할 수 있습니다.

여러 프로젝트에서 서비스 계정을 사용하도록 허용하려면 프로젝트 간 서비스 계정 명의 도용 사용 설정을 참조하세요.

여러 프로젝트에서 서비스 계정이 사용되는 경우 프로젝트 선취권 제거 제한

프로젝트의 서비스 계정을 다른 프로젝트의 리소스에 연결할 수 있도록 허용하면 IAM은 프로젝트 삭제를 방지하는 프로젝트 선취권을 추가합니다. 기본적으로 프로젝트에 대한 resourcemanager.projects.updateLiens 권한이 있는 사용자는 선취권을 삭제할 수 있습니다.

iam.restrictCrossProjectServiceAccountLienRemoval 불리언 제약조건을 적용하면 주 구성원이 조직에 resourcemanager.projects.updateLiens 권한이 있는 경우에만 선취권을 삭제할 수 있습니다.

프로젝트에 프로젝트 간 서비스 계정 명의 도용이 허용되는 프로젝트가 있으면 이 제약조건을 적용하는 것이 좋습니다.

워크로드 아이덴티티 클러스터 생성 사용 중지

iam.disableWorkloadIdentityClusterCreation 불리언 제약조건을 사용하여 새 Google Kubernetes Engine 클러스터가 생성될 때 워크로드 아이덴티티 기능의 사용 중지를 요청할 수 있습니다. 조직에서 서비스 계정 액세스를 엄격하게 제어하려면 서비스 계정 생성 및 서비스 계정 키 생성 외에도 워크로드 아이덴티티를 사용 중지할 수 있습니다.

워크로드 아이덴티티가 사용 설정된 기존 GKE는 영향을 받지 않으며 계속 정상적으로 작동합니다.

불리언 제약조건 적용

콘솔

제약조건을 시행하여 서비스 계정 사용을 제한하는 조직 정책을 설정하는 방법은 다음과 같습니다.

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 프로젝트 선택 도구에서 서비스 계정 사용을 제한할 조직을 선택합니다.

  3. 이 페이지에 나열된 서비스 계정 사용 불리언 제약조건 중 하나를 클릭합니다.

  4. 정책 관리를 클릭합니다.

  5. 적용 대상에서 상위 정책 재정의를 선택합니다.

  6. 규칙 추가를 클릭합니다.

  7. 시행에서 사용을 선택합니다.

  8. 정책을 시행하려면 정책 설정을 클릭합니다.

gcloud

Google Cloud CLI를 통해 정책을 설정할 수 있습니다.

서비스 계정 사용을 제한하려면 다음 명령어를 실행합니다.

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    BOOLEAN_CONSTRAINT

여기서 BOOLEAN_CONSTRAINT는 시행할 불리언 제약조건입니다.

시행을 중지하려면 동일한 명령어를

disable-enforce
명령어.

조직 정책의 제약조건을 사용하는 방법은 제약조건 사용을 참조하세요.

불리언 제약조건이 있는 정책 예시

다음 코드 스니펫은 iam.disableServiceAccountCreation 불리언 제약조건을 적용하는 조직 정책을 보여줍니다. 이러한 정책은 서비스 계정이 생성되지 않도록 합니다.

name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
  rules:
  - enforce: true

목록 제약조건

다음 제약조건은 값 목록으로 설정되는 목록 제약조건의 유형입니다.

OAuth 2.0 액세스 토큰의 수명 연장

서비스 계정에 단기 사용자 인증 정보를 제공하는 OAuth 2.0 액세스 토큰을 만들 수 있습니다. 기본적으로 액세스 토큰의 최대 수명은 1시간(3,600초)입니다. 그러나 최대 수명을 12시간으로 연장할 수 있습니다. 이렇게 하려면 토큰의 수명을 연장해야 할 서비스 계정을 식별한 다음 constraints/iam.allowServiceAccountCredentialLifetimeExtension 목록 제약조건을 포함하는 조직 정책에 이러한 서비스 계정을 추가합니다.

서비스 계정 키 수명 제한

서비스 계정 키를 사용하면 요청을 서비스 계정으로 인증할 수 있습니다. 기본적으로 서비스 계정 키는 만료되지 않습니다. 이 기본값은 프로젝트, 폴더 또는 조직에서 새로 생성되는 모든 키에 만료 시간을 설정하여 변경할 수 있습니다.

만료 시간을 설정하려면 constraints/iam.serviceAccountKeyExpiryHours 목록 제약조건을 사용하여 새로 만든 키가 유효한 시간을 지정합니다. 이 기간이 지나면 서비스 계정 키가 만료되어 더 이상 사용할 수 없습니다.

이 목록 제약조건은 다음과 같은 ALLOW 값을 허용합니다. DENY 값은 허용하지 않습니다. 요구사항에 맞는 가장 짧은 만료 시간을 사용하는 것이 좋습니다.

  • 1h: 1시간
  • 8h: 8시간
  • 24h: 24시간(1일)
  • 168h: 168시간(7일)
  • 336h: 336시간(14일)
  • 720h: 720시간(30일)
  • 1440h: 1,440시간(60일)
  • 2160h: 2,160시간(90일)

constraints/iam.serviceAccountKeyExpiryHours 제약조건은 상위 정책과 병합할 수 없습니다. 이 제약조건을 적용하려면 상위 정책을 바꾸거나 상속해야 합니다.

허용되는 외부 ID 공급업체 지정

외부 ID가 Google Cloud 리소스에 액세스할 수 있도록 하는 워크로드 아이덴티티 제휴를 사용하면 허용되는 외부 ID 공급업체를 지정할 수 있습니다. 기본적으로 모든 제공업체가 허용됩니다. 제한을 설정하려면 constraints/iam.workloadIdentityPoolProviders 목록 제약조건을 사용하여 다음 형식을 사용하여 허용되는 제공업체의 URI를 지정합니다.

  • Amazon Web Services(AWS): https://sts.amazonaws.com

    허용되는 AWS 계정을 제한하려면 이 페이지에 설명된 대로 constraints/iam.workloadIdentityPoolAwsAccounts 목록 제약조건을 사용하세요.

  • Microsoft Azure: https://sts.windows.net/azure-tenant-id

  • OpenID Connect(OIDC)를 지원하는 다른 ID 공급업체: ID 공급업체의 발급기관 URI를 사용합니다.

허용되는 AWS 계정 지정

외부 ID가 Google Cloud 리소스에 액세스할 수 있도록 하는 워크로드 아이덴티티 제휴를 사용하면 리소스에 액세스할 수 있는 AWS 계정을 지정할 수 있습니다. 기본적으로 모든 AWS 계정의 워크로드는 Google Cloud 리소스에 액세스할 수 있습니다. 허용되는 AWS 계정을 제한하려면 constraints/iam.workloadIdentityPoolAwsAccounts 목록 제약조건을 사용하여 허용되는 계정 ID 목록을 지정하세요.

노출된 서비스 계정 키 자동 사용 중지

Google Cloud는 가끔 특정 서비스 계정 키가 노출된 것을 감지하며, 일례로 공개 저장소에서 키를 감지할 수 있습니다. Google Cloud가 이러한 키로 수행하는 작업을 지정하려면 iam.serviceAccountKeyExposureResponse 목록 제약조건을 사용하세요.

이 목록 제약조건은 다음과 같은 ALLOW 값을 허용합니다. DENY 값은 허용하지 않습니다.

  • DISABLE_KEY: Google Cloud에서 노출된 키를 감지하면 자동으로 키를 사용 중지합니다. 또한 Cloud 감사 로그 이벤트를 만들고 노출된 키에 대한 알림을 프로젝트 소유자 및 보안 연락처에 보냅니다.

  • WAIT_FOR_ABUSE: Google Cloud는 노출된 키를 사전에 사용 중지하지 않습니다. 그러나 Google Cloud는 노출된 키가 플랫폼에 부정적인 영향을 미치는 방식으로 사용되는 경우 계속 사용 중지할 수 있습니다. 노출된 키가 사용 중지되었는지 여부와 관계없이 Google Cloud는 Cloud 감사 로그 이벤트를 만들고 노출된 키에 대한 알림을 프로젝트 소유자 및 보안 연락처에 보냅니다.

Google Cloud는 노출된 키를 감지하거나 노출된 키를 사용 중지할 때 다음을 수행합니다.

  • Cloud 감사 로그 이벤트를 생성합니다.

    • Google Cloud에서 키 노출이 감지되면 악용 이벤트 로그에 악용 이벤트가 만들어집니다.

    • Google Cloud에서 키를 사용 중지하면 감사 로그에는 주 구성원 gcp-compromised-key-response@system.gserviceaccount.com의 사용 중지 작업이 포함됩니다.

  • 노출되었거나 사용 중지된 키의 extendedStatus.value 필드를 설정합니다. 확장된 상태 필드에는 유출이 감지된 위치가 포함됩니다.

이 제약조건을 DISABLE_KEY로 설정하는 것이 적극 권장됩니다. 이 제약조건을 WAIT_FOR_ABUSE로 설정하면 노출된 키가 오용될 위험이 증가합니다.

제약조건을 WAIT_FOR_ABUSE로 설정하기로 결정한 경우 Cloud 감사 로그 이벤트를 구독하고 필수 연락처에서 보안 연락처 정보를 검토하고 해당 보안 연락처에서 적시에 알림에 응답할 수 있게 하는 것이 좋습니다.

iam.serviceAccountKeyExposureResponse 제약조건은 상위 정책과 병합할 수 없습니다. 이 제약조건을 적용하려면 상위 정책을 교체해야 합니다.

목록 제약조건 설정

콘솔

목록 제약조건이 포함된 조직 정책을 설정하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 조직 정책 페이지로 이동합니다.

    조직 정책으로 이동

  2. 프로젝트 선택 도구에서 조직 정책을 설정할 리소스를 선택합니다.

  3. 조직 정책 페이지의 목록에서 제약조건을 선택합니다. 해당 제약조건의 정책 세부정보 페이지가 표시되어야 합니다.

  4. 이 리소스의 조직 정책을 업데이트하려면 정책 관리를 클릭합니다.

  5. 정책 시행에서 시행 옵션을 선택합니다.

    • 조직 정책을 병합하고 평가하려면 상위 요소와 병합을 선택합니다. 상속과 리소스 계층 구조에 대한 자세한 내용은 계층 구조 평가 이해를 참조하세요.
    • 상위 리소스에서 상속된 정책을 재정의하려면 바꾸기를 선택합니다.
  6. 규칙 추가를 클릭합니다.

  7. 정책 값에서 커스텀을 선택합니다.

  8. 정책 유형에서 허용을 선택합니다.

  9. 커스텀 값에 목록 제약조건의 첫 번째 값을 입력합니다.

    1. 값을 더 추가하려면 값 추가를 클릭하여 추가 행을 만들고 각 행에 하나의 값을 추가합니다.
  10. 값 추가를 마치면 완료를 클릭합니다.

  11. 정책을 시행하려면 정책 설정을 클릭합니다.

gcloud

Google Cloud CLI를 통해 정책을 설정할 수 있습니다.

gcloud resource-manager org-policies allow \
    CONSTRAINT_NAME \
    VALUE_1 [VALUE_N ...] \
    --organization=ORGANIZATION_ID \

다음 값을 바꿉니다.

  • CONSTRAINT_NAME: 목록 제약조건의 이름입니다. 예를 들면 constraints/iam.allowServiceAccountCredentialLifetimeExtension입니다.
  • VALUE_1, VALUE_N...: 목록 제약조건의 값입니다.

조직 정책의 제약조건을 사용하는 방법은 제약조건 사용을 참조하세요.

목록 제약조건이 있는 정책 예시

다음 코드 스니펫은 iam.allowServiceAccountCredentialLifetimeExtension 목록 제약조건을 시행하여 나열된 서비스 계정용 OAuth 2.0 액세스 토큰의 최대 수명을 연장하는 조직 정책을 보여줍니다.

name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
  rules:
  - values:
      allowedValues:
      - SERVICE_ACCOUNT_ADDRESS

오류 메시지

서비스 계정 생성 사용 중지

iam.disableServiceAccountCreation이 시행되면 서비스 계정 생성은 다음 오류가 표시되며 실패합니다.

FAILED_PRECONDITION: Service account creation is not allowed on this project.

서비스 계정 키 생성 사용 중지

iam.disableServiceAccountKeyCreation이 시행되면 서비스 계정 생성은 다음 오류가 표시되며 실패합니다.

FAILED_PRECONDITION: Key creation is not allowed on this service account.

워크로드 아이덴티티 클러스터 생성 사용 중지

iam.disableWorkloadIdentityClusterCreation이 시행되면 워크로드 아이덴티티가 사용 설정된 GKE 클러스터의 생성이 다음 오류와 함께 실패합니다.

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

알려진 문제 해결

기본 서비스 계정

iam.disableServiceAccountCreation 제약조건을 적용하면 해당 프로젝트에서 서비스 계정을 만들 수 없습니다. 이 제한사항은 사용 설정 시 프로젝트에서 자동으로 기본 서비스 계정을 생성하는 다음과 같은 Google Cloud 서비스에도 영향을 줍니다.

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

iam.disableServiceAccountCreation 제약조건이 적용되면 기본 서비스 계정을 생성할 수 없으므로 이러한 서비스를 사용 설정할 수 없습니다.

이 문제를 해결하려면 다음 단계를 따르세요.

  1. iam.disableServiceAccountCreation 제약조건을 삭제합니다.
  2. 원하는 서비스를 사용 설정합니다.
  3. 원하는 서비스 계정을 만듭니다.
  4. 마지막으로 제약조건을 다시 적용합니다.