서비스 계정의 조직 정책 오류 문제 해결

조직 정책 서비스에는 조직의 서비스 계정에 영향을 줄 수 있는 사전 정의되고 관리되는 여러 제약조건이 있습니다. 이 페이지에서는 조직 정책에서 발생하는 오류와 이러한 오류를 해결하기 위해 취할 수 있는 단계를 이해하는 데 도움이 됩니다.

사용 중지된 서비스 계정 키 생성 문제 해결

조직에 iam.disableServiceAccountKeyCreation 제약 조건이 적용되면 조직의 서비스 계정에 키를 만들 수 없습니다. 이 제약 조건에 관한 자세한 내용은 서비스 계정 키 생성 사용 중지를 참고하세요.

키 생성 오류

서비스 계정 키를 만들려고 했지만 iam.disableServiceAccountKeyCreation 제약 조건으로 인해 작업이 차단되면 다음과 같은 오류 메시지가 표시됩니다.

콘솔

Google Cloud 콘솔에 서비스 계정 키 생성이 사용 중지됨이라는 제목의 대화상자가 표시됩니다. 대화상자에 조직에 iam.disableServiceAccountKeyCreation 제약조건이 적용되었다고 표시됩니다.

gcloud

ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Key creation is not allowed on this service account.
    subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
    type: constraints/iam.disableServiceAccountKeyCreation

REST

{
  "error": {
    "code": 400,
    "message": "Key creation is not allowed on this service account.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountKeyCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

서비스 계정 키 생성 오류에 대한 권장 해결 방법

조직 정책으로 인해 서비스 계정 키를 만들 수 없는 경우 다음을 수행하는 것이 좋습니다.

  1. 서비스 계정 키가 필요한지 평가합니다.

    인증에 서비스 계정 키를 사용하지 않는 것이 좋습니다. 서비스 계정 키를 올바르게 관리하지 않으면 보안 위험이 되어 사용자 인증 정보 유출, 권한 에스컬레이션, 정보 공개, 부인 방지와 같은 위협에 대한 취약점이 증가할 수 있기 때문입니다.

    대부분의 경우 서비스 계정 키를 사용하는 대신 더 안전한 대안을 사용하여 인증해야 합니다.

  2. 사용 사례에 서비스 계정 키가 필요한 경우 프로젝트의 iam.disableServiceAccountKeyCreation 제약조건을 사용 중지합니다.

조직 정책 제약조건을 사용 중지하려면 제약조건의 시행을 사용 중지하거나 프로젝트를 시행에서 제외합니다.

  • 전체 조직의 제약조건 시행을 사용 중지하려면 다음 단계를 따르세요.

    1. 조직 수준에서 조직 정책 관리자 역할(roles/orgpolicy.policyAdmin)이 있어야 합니다. 이 역할은 조직에만 부여할 수 있으며 프로젝트의 역할 목록에는 표시되지 않습니다.

      조직 수준에서 역할을 부여하는 방법을 알아보려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.

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

      조직 정책으로 이동

    3. 프로젝트 선택기에서 iam.disableServiceAccountKeyCreation 제약조건을 사용 중지할 조직을 선택합니다.

    4. 필터 필드에 iam.disableServiceAccountKeyCreation를 입력합니다. 그런 다음 정책 목록에서 서비스 계정 키 생성 사용 중지를 클릭합니다.

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

    6. 정책 소스 섹션에서 상위 정책 재정의가 선택되어 있는지 확인합니다.

    7. 시행에서 이 조직 정책 제약 조건의 시행을 사용 중지합니다.

    8. 정책 설정을 클릭합니다.

  • 프로젝트를 시정 조치 대상에서 제외하려면 다음 단계를 따르세요.

    1. 조직 수준에서 태그 관리자 역할 (roles/resourcemanager.tagAdmin) 및 조직 정책 관리자 역할 (roles/orgpolicy.policyAdmin)이 있는지 확인합니다. 조직 수준에서 역할을 부여하는 방법을 알아보려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.
    2. 조직 수준에서 리소스를 조직 정책에서 제외할지 여부를 정의하는 데 사용할 태그 키와 태그 값을 만듭니다. disableServiceAccountKeyCreation 키와 enforcednot_enforced 값으로 태그를 만드는 것이 좋습니다.

      태그 키와 태그 값을 만드는 방법은 새 태그 만들기 및 정의를 참조하세요.

    3. disableServiceAccountKeyCreation 태그를 조직에 연결하고 값을 enforced로 설정합니다. 다른 태그 값으로 덮어쓰지 않는 한 조직의 모든 리소스에서 이 태그 값을 상속합니다.

      태그를 리소스에 연결하는 방법은 리소스에 태그 연결을 참조하세요.

    4. 조직 정책에서 제외하려는 서비스 계정마다 disableServiceAccountKeyCreation 태그를 연결하고 값을 not_enforced로 설정합니다. 이러한 방식으로 서비스 계정의 태그 값을 설정하면 조직에서 상속된 태그 값이 재정의됩니다.
    5. 예외 리소스에 대한 제약 조건을 적용하지 않도록 서비스 계정 키 생성을 방지하는 조직 정책을 만들거나 업데이트합니다. 이 정책에는 다음 규칙이 있어야 합니다.

      • disableServiceAccountKeyCreation: not_enforced 태그가 있는 리소스에 적용되지 않도록 iam.disableServiceAccountKeyCreation 제약 조건을 구성합니다. 이 규칙의 조건은 다음과 같이 표시됩니다.

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • 다른 모든 리소스에 적용되도록 iam.disableServiceAccountKeyCreation 제약 조건을 구성합니다.

사용 중지된 서비스 계정 생성 문제 해결

조직에 iam.disableServiceAccountCreation 제약 조건이 적용되면 조직의 프로젝트에서 서비스 계정을 만들 수 없습니다. 이 제약 조건에 관한 자세한 내용은 서비스 계정 생성 사용 중지를 참고하세요.

서비스 계정 생성 오류

서비스 계정을 만들려고 했지만 iam.disableServiceAccountCreation 제약 조건으로 인해 작업이 차단되면 다음과 같은 오류 메시지가 표시됩니다.

콘솔

Google Cloud 콘솔에 서비스 계정 생성 실패라는 제목의 대화상자가 표시됩니다. 대화상자에 시도한 작업에 실패했습니다. 다시 시도해 주세요라는 메시지가 표시됩니다.

gcloud

ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Service account creation is not allowed on this project.
    subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
    type: constraints/iam.disableServiceAccountCreation

REST

{
  "error": {
    "code": 400,
    "message": "Service account creation is not allowed on this project.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
            "description": "Service account creation is not allowed on this project."
          }
        ]
      }
    ]
  }
}

서비스 계정 생성 오류에 대한 권장 해결 방법

조직 정책으로 인해 서비스 계정을 만들 수 없는 경우 다음을 수행하는 것이 좋습니다.

  1. 서비스 계정이 필요한지 평가합니다.

    언제 서비스 계정 사용할지 선택을 검토하여 사용 사례에 서비스 계정이 필요한지 확인합니다.

  2. 사용 사례에 서비스 계정이 필요한 경우 프로젝트의 iam.disableServiceAccountCreation 제약 조건을 사용 중지합니다.

조직 정책 제약조건을 사용 중지하려면 제약조건의 시행을 사용 중지하거나 프로젝트를 시행에서 제외합니다.

  • 전체 조직의 제약조건 시행을 사용 중지하려면 다음 단계를 따르세요.

    1. 조직 수준에서 조직 정책 관리자 역할(roles/orgpolicy.policyAdmin)이 있어야 합니다. 이 역할은 조직에만 부여할 수 있으며 프로젝트의 역할 목록에는 표시되지 않습니다.

      조직 수준에서 역할을 부여하는 방법을 알아보려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.

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

      조직 정책으로 이동

    3. 프로젝트 선택기에서 iam.disableServiceAccountCreation 제약조건을 사용 중지할 조직을 선택합니다.

    4. 필터 필드에 iam.disableServiceAccountCreation를 입력합니다. 그런 다음 정책 목록에서 서비스 계정 생성 사용 중지를 클릭합니다.

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

    6. 정책 소스 섹션에서 상위 정책 재정의가 선택되어 있는지 확인합니다.

    7. 시행에서 이 조직 정책 제약 조건의 시행을 사용 중지합니다.

    8. 정책 설정을 클릭합니다.

  • 프로젝트를 시정 조치 대상에서 제외하려면 다음 단계를 따르세요.

    1. 조직 수준에서 태그 관리자 역할 (roles/resourcemanager.tagAdmin) 및 조직 정책 관리자 역할 (roles/orgpolicy.policyAdmin)이 있는지 확인합니다. 조직 수준에서 역할을 부여하는 방법을 알아보려면 프로젝트, 폴더, 조직에 대한 액세스 관리를 참고하세요.
    2. 조직 수준에서 리소스를 조직 정책에서 제외할지 여부를 정의하는 데 사용할 태그 키와 태그 값을 만듭니다. disableServiceAccountCreation 키와 enforcednot_enforced 값으로 태그를 만드는 것이 좋습니다.

      태그 키와 태그 값을 만드는 방법은 새 태그 만들기 및 정의를 참조하세요.

    3. disableServiceAccountCreation 태그를 조직에 연결하고 값을 enforced로 설정합니다. 다른 태그 값으로 덮어쓰지 않는 한 조직의 모든 리소스에서 이 태그 값을 상속합니다.

      태그를 리소스에 연결하는 방법은 리소스에 태그 연결을 참조하세요.

    4. 조직 정책에서 제외하려는 프로젝트나 폴더마다 disableServiceAccountCreation 태그를 연결하고 값을 not_enforced로 설정합니다. 이러한 방식으로 프로젝트나 폴더의 태그 값을 설정하면 조직에서 상속된 태그 값이 재정의됩니다.
    5. 예외 리소스에 대한 제약 조건을 적용하지 않도록 서비스 계정 생성을 방지하는 조직 정책을 만들거나 업데이트합니다. 이 정책에는 다음 규칙이 있어야 합니다.

      • disableServiceAccountCreation: not_enforced 태그가 있는 리소스에 적용되지 않도록 iam.disableServiceAccountCreation 제약 조건을 구성합니다. 이 규칙의 조건은 다음과 같이 표시됩니다.

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • 다른 모든 리소스에 적용되도록 iam.disableServiceAccountCreation 제약 조건을 구성합니다.

기본 서비스 계정에 역할 부여 문제 해결

기본 서비스 계정은 특정 Google Cloud 서비스를 사용할 때 자동으로 생성됩니다. 다음과 같은 식별자가 있습니다.

  • App Engine 서비스 기본 서비스 계정: PROJECT_ID@appspot.gserviceaccount.com
  • Compute Engine 기본 서비스 계정: PROJECT_NUMBER-compute@developer.gserviceaccount.com

모든 기본 서비스 계정은 생성 시 편집자 역할(roles/editor)이 자동으로 부여됩니다. 단, 조직 정책에서 이 동작을 사용 중지한 경우에는 예외입니다. 편집자 역할이 기본 서비스 계정에 부여되지 않도록 하는 두 가지 조직 정책 제약조건이 있습니다.

  • iam.automaticIamGrantsForDefaultServiceAccounts: 기본 서비스 계정에 역할이 자동으로 부여되지 않도록 하는 사전 정의된 제약조건입니다. 이 제약조건은 나중에 기본 서비스 계정에 편집자 역할을 부여하는 것을 방해하지 않습니다.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: 편집자 및 소유자 (roles/owner) 역할이 기본 서비스 계정에 부여되지 않도록 하는 관리형 제약조건입니다.

서비스 계정에 기본 역할 부여 오류

프로젝트에 iam.automaticIamGrantsForDefaultServiceAccounts 제약조건 또는 constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts 제약조건이 적용되면 기본 서비스 계정을 사용하는 프로젝트의 워크로드에 권한이 충분하지 않은 오류가 발생할 수 있습니다. 기본 서비스 계정에 부여할 역할을 알아보려면 기본 서비스 계정에 역할 부여를 위한 권장 해결 방법을 참고하세요.

iam.automaticIamGrantsForDefaultServiceAccounts 제약조건 자체는 오류를 일으키지 않습니다. 그러나 이 제약조건으로 인해 기본 서비스 계정을 사용하는 워크로드에 필요한 권한이 없을 수 있습니다.

또한 프로젝트에 constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts 제약 조건이 적용된 경우 기본 서비스 계정에 소유자 또는 편집자 역할을 부여하려고 하면 다음과 같은 오류 메시지가 표시됩니다.

콘솔

Google Cloud 콘솔에 IAM 정책 업데이트 실패라는 제목의 대화상자가 표시됩니다. 대화상자에 시도 중인 IAM 정책 변경은 조직 정책 관리자가 제한했다고 표시된 후 업데이트를 차단하는 제약 조건이 나열됩니다. 나열된 제약조건에는 customConstraints/custom.cantGrantProjectIamAdmin 제약조건이 포함됩니다.

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].

REST

{
  "error": {
    "code": 400,
    "message": "Operation denied by org policy on resource
    'RESOURCE_ID':
    [\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
    \"When this constraint is enforced, it prevents anyone from granting the
    Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
    Engine and App Engine default service accounts, at any time. To learn more
    about default service accounts, see
    https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
    constraint prevents the default service accounts from automatically being
    granted the Editor role (roles/editor). This might cause permission issues
    for services that use these service accounts. To learn which roles to grant
    to each service account, see
    https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CUSTOM_ORG_POLICY_VIOLATION",
        "domain": "googleapis.com",
        "metadata": {
          "customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
          "resource": "projects/PROJECT_ID"
        }
      }
    ]
  }
}

기본 서비스 계정에 역할 부여를 위한 권장 해결 방법

조직 정책으로 인해 기본 서비스 계정에 편집자 또는 소유자 역할을 부여할 수 없는 경우 서비스 계정에 부여할 수 있는 권한이 더 적은 역할을 찾아야 합니다. 서비스 계정에 필요한 역할은 사용 중인 서비스와 수행하려는 작업에 따라 다릅니다.

사용 중인 서비스에 따라 기본 서비스 계정에 부여할 역할을 결정하려면 다음 표를 검토하세요.

서비스 기본 서비스 계정 부여할 역할
App Engine App Engine 기본 서비스 계정 (PROJECT_ID@appspot.gserviceaccount.com) Cloud Build 계정 역할 (roles/cloudbuild.builds.builder)
Compute Engine Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)

기본 서비스 계정에 필요한 역할은 수행하려는 작업에 따라 다릅니다. 필요한 역할을 확인하려면 수행하려는 작업에 관한 문서를 검토하거나 사전 정의된 역할 선택을 검토하세요.

부여할 역할을 결정할 때는 Compute Engine 문서의 서비스 계정 페이지에 설명된 권장사항을 따르세요.

Cloud Build Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com) Cloud Build 서비스 계정 역할 (roles/cloudbuild.builds.builder)
Cloud Deploy Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com) 이 서비스 계정에 부여할 역할을 확인하려면 사용 사례에 해당하는 Cloud Deploy 빠른 시작을 찾은 다음 빠른 시작에 설명된 역할을 부여합니다. Cloud Deploy 빠른 시작 목록은 Cloud Deploy 문서의 빠른 시작을 참고하세요.
Cloud Run Functions 및 Cloud Functions Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)

함수 배포: Cloud Build 계정 역할 (roles/cloudbuild.builds.builder)

자세한 내용은 Cloud Build용 맞춤 서비스 계정을 참고하세요.

Cloud Run Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)

기본 서비스 계정에 필요한 역할은 수행하려는 작업에 따라 다릅니다. 필요한 역할을 확인하려면 수행하려는 작업에 관한 문서를 검토하거나 사전 정의된 역할 선택을 검토하세요.

Cloud Run 역할에 관한 자세한 내용은 Cloud Run 문서의 IAM으로 액세스 제어를 참고하세요.

Google Kubernetes Engine Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Kubernetes Engine 기본 노드 서비스 계정 역할 (roles/container.defaultNodeServiceAccount)

자세한 내용은 최소 권한 IAM 서비스 계정 사용을 참고하세요.

워크플로 Compute Engine 기본 서비스 계정(PROJECT_NUMBER-compute@developer.gserviceaccount.com)

기본 서비스 계정에 필요한 역할은 수행하려는 작업에 따라 다릅니다. 필요한 역할을 확인하려면 수행하려는 작업에 관한 문서를 검토하거나 사전 정의된 역할 선택을 검토하세요.

워크플로 문서의 워크플로에 Google Cloud 리소스에 대한 액세스 권한 부여 페이지에 설명된 권장사항을 따르세요.