IAM 정책 검색

Cloud Asset API에서는 커스텀 쿼리 언어를 사용하여 프로젝트, 폴더 또는 조직 내에서 ID 및 액세스 관리(IAM) 정책을 검색할 수 있습니다.

시작하기 전에

SearchAllIamPolicies 호출

gcloud

gcloud asset search-all-iam-policies 명령어를 사용하여 SearchAllIamPolicies를 호출할 수 있습니다. Cloud SDK 버전 302.0.0 이상을 실행해야 합니다. gcloud version 명령어를 사용하여 버전을 확인할 수 있습니다.

gcloud asset search-all-iam-policies \
  --scope=SCOPE \
  --query=QUERY \
  --page-size=PAGE_SIZE

각 항목의 의미는 다음과 같습니다.

  • (선택사항) SCOPE: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다. 이 범위 내의 IAM 정책으로 검색이 제한됩니다. 호출자는 원하는 범위에 대한 cloudasset.assets.searchAllIamPolicies 권한을 부여받아야 합니다. 지정하지 않으면 구성된 프로젝트 속성이 사용됩니다. 구성된 프로젝트를 찾으려면 gcloud config get-value project를 실행하세요. 설정을 변경하려면 gcloud config set project PROJECT_ID를 실행하세요.

    허용되는 값은 다음과 같습니다.

    • projects/PROJECT_ID(예: 'projects/foo-bar')
    • projects/PROJECT_NUMBER(예: 'projects/12345678')
    • folders/FOLDER_NUMBER(예: 'folders/1234567')
    • organizations/ORGANIZATION_NUMBER(예: 'organizations/123456')
  • (선택사항) QUERY: 쿼리 문입니다. 자세한 내용은 쿼리 구성 방법을 참조하세요. 지정하지 않거나 비어 있으면 지정된 scope 내의 모든 IAM 정책을 검색합니다. 쿼리 문자열은 구성원, 역할, IAM 조건을 포함하여 각 IAM 정책 바인딩과 비교됩니다. 반환된 IAM 정책에는 쿼리와 일치하는 바인딩만 포함됩니다. IAM 정책 구조에 대한 자세한 내용은 IAM 정책 문서를 참조하세요.

    예:

    • policy:amy@gmail.com: 'amy@gmail.com' 사용자를 지정하는 IAM 정책 바인딩을 찾습니다.
    • policy:roles/compute.admin: Compute Admin 역할을 지정하는 IAM 정책 바인딩을 찾습니다.
    • policy:comp*: 바인딩에서 'compt'가 모든 단어의 프리픽스로 포함된 IAM 정책 바인딩을 찾습니다.
    • policy.role.permissions:storage.buckets.update: 'storage.buckets.update' 권한이 포함된 역할을 지정하는 Cloud IAM 정책 바인딩을 찾습니다. 역할에 포함된 iam.roles.get 액세스 권한이 호출자에게 없으면 이 역할을 지정하는 정책 바인딩이 검색결과에서 삭제됩니다.
    • policy.role.permissions:upd*: 바인딩에서 'upd'가 단어의 프리픽스로 포함된 역할을 지정하는 IAM 정책 바인딩을 찾습니다. 역할에 포함된 iam.roles.get 액세스 권한이 호출자에게 없으면 이 역할을 지정하는 정책 바인딩이 검색결과에서 삭제됩니다.
    • resource:organizations/123456: 'organizations/123456'에 설정된 IAM 정책 바인딩을 찾습니다.
    • resource=//cloudresourcemanager.googleapis.com/projects/myproject: 'myproject'라는 프로젝트에 설정된 IAM 정책 binding을 찾습니다.
    • Important: 포함된 권한을 제외하고 검색 가능한 모든 필드에 'important'라는 단어가 포함된 IAM 정책 바인딩을 찾습니다.
    • resource:(instance1 OR instance2) policy:amy: 'instance1' 또는 'instance2' 리소스에 설정된 IAM 정책 바인딩을 찾고 사용자 'amy'도 지정합니다.
  • (선택사항) PAGE_SIZE: 검색결과 페이지로 나누기의 페이지 크기입니다. 최댓값은 500입니다. 값을 0으로 설정하면 적절한 기본값이 선택됩니다.

  • organizations/123456에서 mycompany.com 도메인이 포함된 모든 IAM 정책 바인딩을 찾습니다.

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='policy:"domain:mycompany.com"'
    
  • organizations/123456에서 소유자(roles/owner)의 기본 역할을 myuser@mycompany.com에 부여한 모든 IAM 정책 바인딩을 찾습니다.

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='policy:(roles/owner myuser@mycompany.com)'
    
  • projects/12345678에서 설정된 organizations/123456의 모든 IAM 정책 바인딩을 찾습니다.

    gcloud asset search-all-iam-policies \
      --scope='organizations/123456' \
      --query='resource:projects/12345678'
    

API

프로젝트에 유효한 OAuth 토큰을 사용하여 SearchAllIamPolicies를 호출할 수 있습니다. Cloud Shell 또는 gcloud 명령어를 사용할 수 있는 모든 콘솔에서 SearchAllIamPolicies 메서드를 호출하려면 다음 안내를 따르세요.

  1. 프로젝트의 OAuth 동의 화면을 구성하지 않은 경우 이를 구성해야 합니다. OAuth 동의 화면에는 이메일 주소와 제품 이름이 필요합니다.

    1. 프로젝트의 OAuth 동의 화면으로 이동합니다.
      동의 화면 구성
    2. 표시하려는 애플리케이션 이름을 입력합니다.
    3. 지원 이메일에서 공개 연락처로 표시할 이메일 주소를 선택합니다. 이 주소는 내 이메일 주소나 내가 소유한 Google 그룹이어야 합니다.
    4. 원하는 선택적인 세부정보를 추가합니다.
    5. 저장을 클릭합니다.
  2. 프로젝트의 OAuth 토큰을 만듭니다. 자세한 내용은 OAuth 2.0 설정을 참조하세요.

    1. OAuth 클라이언트 ID 만들기 페이지로 이동합니다.
      OAuth 클라이언트 만들기
    2. 애플리케이션 유형으로 데스크톱 앱을 선택합니다.
    3. 만들기를 클릭합니다.
  3. client_secret.json 파일을 다운로드합니다.

    1. 사용자 인증 정보 페이지로 이동합니다.
    2. 클라이언트 ID 오른쪽에 있는 JSON 다운로드를 클릭합니다.
    3. 이 앱만 액세스할 수 있는 위치에 안전하게 파일을 저장합니다.
  4. 다음 명령어로 JSON 파일을 사용하여 로그인합니다.

    gcloud auth application-default login --client-id-file=YOUR_JSON_FILE
    

    이 명령어를 실행하면 링크를 열라는 메시지가 표시됩니다. OAuth 동의 화면에서 설정한 애플리케이션 이름이 페이지에 표시되는지 확인합니다.

  5. 다음 명령어를 사용하여 계정의 인증 토큰을 생성합니다.

    TOKEN=$(gcloud auth application-default print-access-token)
    
  6. 이제 curl 명령어를 사용하여 IAM 정책을 쿼리할 수 있습니다.

    PAGE_SIZE=PAGE_SIZE
    PAGE_TOKEN="PAGE_TOKEN"
    SCOPE="SCOPE"
    QUERY="QUERY"
    curl -s -G \
        -H "Authorization: Bearer $TOKEN" \
        -d "page_size=$PAGE_SIZE" \
        -d "page_token=$PAGE_TOKEN" \
        --data-urlencode "query=$QUERY" \
        "https://cloudasset.googleapis.com/v1/$SCOPE:searchAllIamPolicies"
    
  • (선택사항) SCOPE: 범위는 프로젝트, 폴더 또는 조직이 될 수 있습니다. 이 범위 내의 IAM 정책으로 검색이 제한됩니다. 호출자는 원하는 범위에 대한 cloudasset.assets.searchAllIamPolicies 권한을 부여받아야 합니다.

    허용되는 값은 다음과 같습니다.

    • projects/PROJECT_ID(예: 'projects/foo-bar')
    • projects/PROJECT_NUMBER(예: 'projects/12345678')
    • folders/FOLDER_NUMBER(예: 'folders/1234567')
    • organizations/ORGANIZATION_NUMBER(예: 'organizations/123456')
  • (선택사항) QUERY: 쿼리 문입니다. 자세한 내용은 쿼리 구성 방법을 참조하세요. 지정하지 않거나 비어 있으면 지정된 scope 내의 모든 IAM 정책을 검색합니다. 쿼리 문자열은 구성원, 역할, IAM 조건을 포함하여 각 IAM 정책 바인딩과 비교됩니다. 반환된 IAM 정책에는 쿼리와 일치하는 바인딩만 포함됩니다. IAM 정책 구조에 대한 자세한 내용은 IAM 정책 문서를 참조하세요.

    예:

    • policy:amy@gmail.com: 'amy@gmail.com' 사용자를 지정하는 IAM 정책 바인딩을 찾습니다.
    • policy:roles/compute.admin: Compute Admin 역할을 지정하는 IAM 정책 바인딩을 찾습니다.
    • policy:comp*: 바인딩에서 'compt'가 모든 단어의 프리픽스로 포함된 IAM 정책 바인딩을 찾습니다.
    • policy.role.permissions:storage.buckets.update: 'storage.buckets.update' 권한이 포함된 역할을 지정하는 Cloud IAM 정책 바인딩을 찾습니다. 역할에 포함된 iam.roles.get 액세스 권한이 호출자에게 없으면 이 역할을 지정하는 정책 바인딩이 검색결과에서 삭제됩니다.
    • policy.role.permissions:upd*: 역할 권한에서 모든 단어의 프리픽스로 'upd'를 포함하는 역할을 지정하는 IAM 정책 바인딩을 찾습니다. 역할에 포함된 권한에 대한 iam.roles.get 액세스 권한이 호출자에게 없으면 이 역할을 지정하는 정책 바인딩이 검색결과에서 삭제됩니다.
    • resource:organizations/123456: 'organizations/123456'에 설정된 IAM 정책 바인딩을 찾습니다.
    • resource=//cloudresourcemanager.googleapis.com/projects/myproject: 'myproject'라는 프로젝트에 설정된 IAM 정책 binding을 찾습니다.
    • Important: 포함된 권한을 제외하고 검색 가능한 모든 필드에 'important'라는 단어가 포함된 IAM 정책 바인딩을 찾습니다.
    • resource:(instance1 OR instance2) policy:amy: 'instance1' 또는 'instance2' 리소스에 설정된 IAM 정책 바인딩을 찾고 사용자 'amy'도 지정합니다.
  • (선택사항) PAGE_SIZE: 검색결과 페이지로 나누기의 페이지 크기입니다. 최댓값은 2,000입니다. 값을 0으로 설정하면 적절한 기본값이 선택됩니다.

  • (선택사항) PAGE_TOKEN: 이 메서드에 대한 이전 호출의 다음 결과 배치를 나타내는 토큰입니다. page_token은 이전 호출 응답의 next_page_token 값과 같아야 합니다.

클라이언트 라이브러리 및 API 참조

쿼리 구성 방법

쿼리 언어에 대한 자세한 내용은 쿼리 구문을 참조하세요.

다양한 실제 사용 사례의 샘플 쿼리에 대한 자세한 내용은 iam 정책 샘플 검색을 참조하세요.

바인딩 정보를 사용하여 IAM 정책 쿼리

IAM 정책을 검색하려면 쿼리 표현식은 다음과 같은 형식이어야 합니다.

policy:QUERY

구성원

IAM 정책 바인딩은 5가지 유형의 구성원을 지원합니다.

  1. Google 계정(예: user:user@gmail.com)
  2. Google 그룹(예: group:devs@googlegroups.com)
  3. Cloud ID 및 G Suite 도메인(예: domain:google.com)
  4. 서비스 계정(예: serviceAccount:my-other-app@appspot.gserviceaccount.com)
  5. 특수 식별자(예: allUsersallAuthenticatedUsers)

다음 구문을 사용하여 특정 사용자와 관련된 정책으로 쿼리를 제한할 수 있습니다.

policy:"user:amy@mycompany.com"

user:amy@mycompany.com에는 특수 문자 :가 포함되어 있으므로 큰따옴표로 묶어야 합니다. 쿼리 값이 고유하거나 구성원 유형에 관계없이 이메일 주소를 검색하려는 경우 쿼리 문자열에서 user: 또는 group: 프리픽스를 생략할 수 있습니다. 예를 들어 다음 쿼리는 사용자와만 일치하게 됩니다.

policy:amy@mycompany.com
예: 구성원으로 쿼리
  • 사용자 Amy를 지정하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:amy
    
  • mydomain.com 도메인을 지정하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:mydomain.com
    
  • 사용자 AmyJohn을 지정하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(amy john)
    
  • 사용자 Amy 또는 John를 지정하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(amy OR john)
    
  • 조직에서 amy@mycompany.com이 모든 IAM 정책 바인딩을 찾습니다.

    policy:amy@mycompany.com
    
  • 조직에서 mycompany.com 도메인이 포함된 모든 IAM 정책 바인딩을 찾습니다.

    policy:"domain:mycompany.com"
    
  • mycompany.gserviceaccount.com 서비스 계정에 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:"serviceAccount:mycompany.gserviceaccount.com"
    
  • admins 그룹에 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:"group:admins"
    
  • 모든 사용자에게 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:allUsers
    
  • 인증된 모든 사용자에게 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:allAuthenticatedUsers
    
  • amy@mycompany.com 또는 mycompany.com 도메인에 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(amy@mycompany.com OR "domain:mycompany.com")
    

역할

IAM 정책 binding은 다양한 유형의 역할을 지원합니다. 모든 IAM 역할 이름은 roles/ 프리픽스로 시작합니다.

  1. 기본 역할: 소유자(roles/owner), 편집자(roles/editor), 뷰어(roles/viewer)는 IAM 도입 전에도 존재했던 세 가지 역할입니다.
  2. 사전 정의된 역할: IAM은 다양한 리소스에 대한 세분화된 액세스 권한을 부여하는 사전 정의된 역할을 추가로 제공합니다. 사전 정의된 역할을 모두 확인하세요.
  3. 커스텀 역할: 선별된 권한 목록이 포함된 사용자 정의 IAM 역할입니다.

다음 구문을 사용하면 특정 역할과 관련된 정책으로 쿼리를 제한할 수 있습니다.

policy:roles/role-name

쿼리 값이 고유한 경우 쿼리 문자열에서 roles/ 프리픽스를 생략할 수 있습니다. 예를 들어 다음 쿼리는 roles/cloudasset.owner 역할만 일치할 가능성이 높습니다.

policy:cloudasset.owner
예: 역할로 쿼리
  • owner 역할을 지정하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:roles/owner
    
  • amy@mycompany.com에 소유자 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(roles/owner amy@mycompany.com)
    
  • 이메일 주소에 john이라는 단어가 포함된 구성원에게 compute.admin 역할을 할당하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(roles/compute.admin john)
    
  • 'swe' 또는 'sde'가 프리픽스로 가지고 있는 사용자에게 viewer 역할을 부여하는 모든 IAM 정책 바인딩을 찾습니다.

    policy:(roles/viewer (swe* OR sde*))
    

포함된 권한으로 IAM 정책 쿼리

정책의 역할에는 권한 목록이 포함될 수 있습니다. 자세한 내용은 IAM 권한 참조를 확인하세요. 특정 권한을 포함하는 정책으로 쿼리를 제한할 수 있습니다. 쿼리 표현식의 형식은 다음과 같습니다.

  • 완전 일치: policy.role.permissions=QUERY
  • 부분 일치: policy.role.permissions:QUERY
예: 권한으로 쿼리
  • compute.instances.create 권한이 포함된 모든 IAM 정책 바인딩을 찾습니다.

    policy.role.permissions:compute.instances.create
    policy.role.permissions=compute.instances.create
    
  • compute.instances 관련 권한이 포함된 모든 IAM 정책 바인딩을 찾습니다.

    policy.role.permissions:compute.instances
    
  • cloudasset.assets.export... 권한이 포함된 모든 IAM 정책 바인딩을 찾습니다(예: cloudasset.assets.exportAssetscloudasset.assets.exportIamPolicyAnalysis).

    policy.role.permissions:cloudasset.assets.export*
    
  • 다른 사용자에게 IAM 정책을 변경할 수 있는 권한을 부여하는 모든 IAM 정책 바인딩을 찾습니다.

    policy.role.permissions:setIamPolicy
    
  • compute.instances.createcompute.disks.create 권한이 모두 포함된 역할이 있는 모든 IAM 정책 바인딩을 찾습니다.

    policy.role.permissions:(compute.instances.create compute.disks.create)
    
  • compute.instances.create 권한이 포함된 모든 IAM 정책 바인딩을 찾고 사용자 amy를 지정합니다.

    policy.role.permissions:compute.instances.create policy:amy
    policy.role.permissions=compute.instances.create policy:amy
    

리소스 이름으로 IAM 정책 쿼리

검색을 수행할 때 전체 리소스 이름을 지정하여 리소스에 직접 설정된 정책만 검색할 수 있습니다. 쿼리 표현식의 형식은 다음과 같습니다.

  • 완전 일치: resource=QUERY
  • 부분 일치: resource:QUERY

예: 리소스 이름으로 쿼리

  • 전체 리소스 이름이 정확하게 //cloudresourcemanager.googleapis.com/projects/myproject와 일치하는 리소스에 직접 설정된 모든 IAM 정책 바인딩을 찾습니다.

    resource=//cloudresourcemanager.googleapis.com/projects/myproject
    
  • 전체 리소스 이름myproject라는 단어가 포함된 리소스에 직접 설정된 모든 IAM 정책 바인딩을 찾습니다.

    resource:myproject
    
  • 전체 리소스 이름에 특정 프리픽스가 myproj인 단어가 포함된 리소스에 직접 설정된 모든 IAM 정책 바인딩을 찾습니다.

    resource:myproj*
    
  • 특정 서비스 유형의 리소스에 직접 설정된 모든 IAM 정책 바인딩을 찾습니다.

    resource:cloudresourcemanager
    
  • myproject 또는 myfolder에 설정된 모든 IAM 정책 바인딩을 찾습니다.

    resource:(myproject OR myfolder)
    
  • cloudresourcemanager 리소스에 설정된 모든 IAM 정책 바인딩을 찾아서 소유자 역할을 gmail.com 사용자에게 할당합니다.

    resource:cloudresourcemanager policy:(roles/owner gmail.com)
    

자유 텍스트로 IAM 정책 쿼리

필드를 지정하지 않고 자유 텍스트 쿼리를 사용할 수도 있습니다. 그러면 쿼리와 일치하는 검색 가능한 필드(예: 정책 바인딩 필드, 리소스 이름)가 있는 경우 정책을 반환합니다.

예: 자유 텍스트로 쿼리

  • scope에서 메타데이터 필드(예: 정책 바인딩, 리소스 이름)에 Important라는 단어가 포함된 모든 IAM 정책 바인딩을 찾습니다.

    Important
    
  • scope에서 메타데이터 필드(예: 정책 바인딩, 리소스 이름)에 모든 단어의 프리픽스로 import가 포함된 모든 IAM 정책 바인딩을 찾습니다.

    import*