권장사항 검토 및 적용

이 페이지에서는 Cloud IAM 추천자가 제안한 권장사항을 보고 이해하고 적용하는 방법을 설명합니다. Cloud IAM 추천자는 구성원에게 실제로 필요한 권한만 부여하여 최소 권한 원칙을 적용하도록 도와줍니다.

이 페이지를 읽기 전에 Cloud IAM 추천자의 개요에 익숙해야 합니다. 또한 Cloud IAM 추천자를 사용하려면 필요한 Cloud IAM 권한이 있어야 합니다.

권장사항 검토 및 적용

권장사항을 검토하고 적용하는 가장 쉬운 방법은 Google Cloud Console을 사용하는 것입니다. 권장사항을 받은 이유에 대한 세부 정보를 얻고 권장사항을 닫으려면 Cloud Console을 사용해야 합니다.

gcloud 명령줄 도구 및 Recommender API를 사용하여 권장사항을 검토하고 적용할 수도 있습니다.

콘솔

  1. Cloud Console에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 프로젝트 구성원 목록에서 과도하게 부여된 권한 열을 찾습니다.

    구성원에 부여된 각 역할에 대해 이 열은 지난 90일 동안 역할에서 사용되지 않은 권한 수를 표시하고 그 뒤에 역할의 총 권한 수를 표시합니다.

    권장사항 사용 가능 아이콘은 역할을 취소하거나 더 적은 권한을 포함하는 역할로 대체할 역할에 대한 권장사항을 나타냅니다.

    권장사항을 사용할 수 없음 아이콘은 역할에 대한 권장 변경사항이 없음을 나타냅니다. 이유를 알아보려면 아이콘 위에 마우스 포인터를 올려 놓습니다.

  3. 검토할 권장사항이 있는 경우 권장사항 사용 가능 아이콘을 클릭하여 권장사항에 대한 세부정보를 확인합니다.

  4. 권장사항을 신중하게 검토하고 구성원의 Google Cloud 리소스 액세스 권한을 변경하는 방법을 고려합니다.

    권장사항을 적용하려면 적용을 클릭한 다음 적용을 다시 클릭하여 선택사항을 적용합니다.

    권장사항을 취소하려면 닫기를 클릭한 다음 다시 닫기를 클릭하여 선택사항을 확인하세요.

    다음 90일 내에 마음이 바뀌면 Cloud IAM 추천자 로그를 사용하여 선택을 취소하세요.

  5. 모든 권장사항을 검토할 때까지 이전 단계를 반복합니다.

gcloud 명령

권장사항을 표시하려면 gcloud recommender recommendations list 명령어를 실행합니다.

gcloud recommender recommendations list \
        --location=global \
        --recommender=google.iam.policy.Recommender \
        --project=[PROJECT_ID] \
        --format=[FORMAT]
    

다음 값을 대체합니다.

  • [PROJECT_ID]: 프로젝트 식별자입니다. 예: project-123.
  • [FORMAT]: 응답의 형식입니다. json 또는 yaml을 사용합니다.

응답은 다음 예시와 유사합니다. 이 예시에서 서비스 계정은 지난 90일 동안 Compute 관리자 역할(roles/compute.admin)의 권한을 사용하지 않았습니다. 따라서 Cloud IAM 추천자는 다음과 같은 역할을 취소할 것을 제안합니다.

[
      {
        "content": {
          "operationGroups": [
            {
              "operations": [
                {
                  "action": "remove",
                  "path": "/iamPolicy/bindings/*/members/*",
                  "pathFilter": {
                    "/iamPolicy/bindings/*/condition/expression": "",
                    "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                    "/iamPolicy/bindings/*/role": "roles/compute.admin"
                  },
                  "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
                  "resourceType": "cloudresourcemanager.googleapis.com/Project"
                }
              ]
            }
          ]
        },
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"770237e2c0decf40\"",
        "lastRefreshTime": "2020-01-09T06:06:17Z",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "primaryImpact": {
          "category": "SECURITY",
            "securityProjection": {
              "revokedIamPermissionsCount": 708
            }
        },
        "stateInfo": {
          "state": "ACTIVE"
        }
      }
    ]

각 권장사항을 신중하게 검토하고 구성원의 Google Cloud 리소스 액세스 권한을 변경하는 방법을 고려합니다.

권장사항을 적용하는 방법:

  1. gcloud recommender recommendations mark-claimed 명령어를 사용하여 권장사항을 적용하는 동안 변경되지 않도록 하려면 다음 단계를 따르세요.

    gcloud recommender recommendations mark-claimed \
            [RECOMMENDATION_ID] \
            --location=global \
            --recommender=google.iam.policy.Recommender \
            --project=[PROJECT_ID] \
            --format=[FORMAT] \
            --etag=[ETAG] \
            --state-metadata=[STATE_METADATA]
        

    다음 값을 대체합니다.

    • [RECOMMENDATION_ID]: 권장사항의 고유 식별자입니다. 이 값은 권장사항의 name 필드 끝에 표시됩니다. 위에 표시된 예시에서 ID는 fb927dc1-9695-4436-0000-f0f285007c0f입니다.
    • [PROJECT_ID]: 프로젝트 식별자입니다. 예: project-123.
    • [FORMAT]: 응답의 형식입니다. json 또는 yaml을 사용합니다.
    • [ETAG]: "dd0686e7136a4cbb"와 같은 etag 필드의 값입니다. 이 값에는 따옴표를 포함할 수 있습니다.
    • [STATE_METADATA]: 선택사항. 권장사항에 대한 메타데이터 선택사항을 포함하는 쉼표로 구분된 키-값 쌍입니다. 예를 들면 --state-metadata=reviewedBy=alice,priority=high입니다. 메타데이터는 권장사항의 stateInfo.stateMetadata 필드를 대체합니다.

    명령어가 성공하면 다음 예시와 같이 응답은 권장사항을 CLAIMED 상태로 표시합니다. 이 예시에서는 대부분의 필드를 생략합니다.

    [
          {
            "description": "This role has not been used during the observation window.",
            "recommenderSubtype": "REMOVE_ROLE",
            "etag": "\"df7308cca9719dcc\"",
            "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
            "stateInfo": {
              "state": "CLAIMED",
              "stateMetadata": {
                "reviewedBy": "alice",
                "priority": "high"
              }
            }
          }
        ]

  2. 프로젝트의 Cloud IAM 정책을 가져온 다음 권장사항을 반영하도록 정책을 수정합니다.

  3. 권장사항을 적용할 수 있으면 권장사항의 상태를 SUCCEEDED로 권장사항을 적용할 수 없으면 FAILED로 업데이트합니다.

    gcloud recommender recommendations [COMMAND] \
            [RECOMMENDATION_ID] \
            --location=global \
            --recommender=google.iam.policy.Recommender \
            --project=[PROJECT_ID] \
            --format=[FORMAT] \
            --etag=[ETAG] \
            --state-metadata=[STATE_METADATA]
        

    다음 값을 대체합니다.

    • [COMMAND]: 권장사항을 적용할 수 있으면 mark-succeeded, 권장사항을 적용할 수 없으면 mark-failed를 사용합니다.
    • [RECOMMENDATION_ID]: 권장사항의 고유 식별자입니다. 이 값은 권장사항의 name 필드 끝에 표시됩니다. 위에 표시된 예시에서 ID는 fb927dc1-9695-4436-0000-f0f285007c0f입니다.
    • [PROJECT_ID]: 프로젝트 식별자입니다. 예: project-123.
    • [FORMAT]: 응답의 형식입니다. json 또는 yaml을 사용합니다.
    • [ETAG]: "dd0686e7136a4cbb"와 같은 etag 필드의 값입니다. 이 값에는 따옴표를 포함할 수 있습니다.
    • [STATE_METADATA]: 선택사항. 권장사항에 대한 메타데이터 선택사항을 포함하는 쉼표로 구분된 키-값 쌍입니다. 예를 들면 --state-metadata=reviewedBy=alice,priority=high입니다. 메타데이터는 권장사항의 stateInfo.stateMetadata 필드를 대체합니다.

    예를 들어 권장사항을 성공으로 표시한 경우 응답은 권장사항을 SUCCEEDED 상태로 표시합니다. 이 예시에서는 대부분의 필드를 생략합니다.

    [
          {
            "description": "This role has not been used during the observation window.",
            "recommenderSubtype": "REMOVE_ROLE",
            "etag": "\"dd0686e7136a4cbb\"",
            "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
            "stateInfo": {
              "state": "SUCCEEDED",
              "stateMetadata": {
                "reviewedBy": "alice",
                "priority": "high"
              }
            }
          }
        ]

REST API

권장사항을 검토하려면 curl 도구를 사용하여 REST API를 호출합니다. [PROJECT_ID]를 프로젝트 ID로 바꿉니다.

curl -H "Authorization: Bearer "$(gcloud auth print-access-token) \
        "https://recommender.googleapis.com/v1/projects/[PROJECT_ID]/locations/global/recommenders/google.iam.policy.Recommender/recommendations"
    

응답은 다음 예시와 유사합니다. 이 예시에서 서비스 계정은 지난 90일 동안 Compute 관리자 역할(roles/compute.admin)의 권한을 사용하지 않았습니다. 따라서 Cloud IAM 추천자는 다음과 같은 역할을 취소할 것을 제안합니다.

[
      {
        "content": {
          "operationGroups": [
            {
              "operations": [
                {
                  "action": "remove",
                  "path": "/iamPolicy/bindings/*/members/*",
                  "pathFilter": {
                    "/iamPolicy/bindings/*/condition/expression": "",
                    "/iamPolicy/bindings/*/members/*": "serviceAccount:id-1234567890@example-project.iam.gserviceaccount.com",
                    "/iamPolicy/bindings/*/role": "roles/compute.admin"
                  },
                  "resource": "//cloudresourcemanager.googleapis.com/projects/example-project",
                  "resourceType": "cloudresourcemanager.googleapis.com/Project"
                }
              ]
            }
          ]
        },
        "description": "This role has not been used during the observation window.",
        "recommenderSubtype": "REMOVE_ROLE",
        "etag": "\"770237e2c0decf40\"",
        "lastRefreshTime": "2020-01-09T06:06:17Z",
        "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
        "primaryImpact": {
          "category": "SECURITY",
            "securityProjection": {
              "revokedIamPermissionsCount": 708
            }
        },
        "stateInfo": {
          "state": "ACTIVE"
        }
      }
    ]

각 권장사항을 신중하게 검토하고 구성원의 Google Cloud 리소스 액세스 권한을 변경하는 방법을 고려합니다.

권장사항을 적용하는 방법:

  1. 다음 명령어를 실행하여 권장사항이 적용되는 동안 변경되지 않도록 합니다.

    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $(gcloud auth print-access-token)" \
            -H "X-Goog-User-Project: [PROJECT_ID]" \
            --data-binary @- \
            "https://recommender.googleapis.com/v1/projects/[PROJECT_ID]/locations/global/recommenders/google.iam.policy.Recommender/recommendations/[RECOMMENDATION_ID]:markClaimed" \
        << EOM
        {
          "etag": "[ETAG]",
          "stateMetadata": [STATE_METADATA]
        }
        EOM
        

    다음 값의 모든 항목을 바꿉니다.

    • [RECOMMENDATION_ID]: 권장사항의 고유 식별자입니다. 이 값은 권장사항의 name 필드 끝에 표시됩니다. 위에 표시된 예시에서 ID는 fb927dc1-9695-4436-0000-f0f285007c0f입니다.
    • [PROJECT_ID]: 프로젝트 식별자입니다. 예: project-123.
    • [FORMAT]: 응답의 형식입니다. json 또는 yaml을 사용합니다.
    • [ETAG]: "dd0686e7136a4cbb"와 같은 etag 필드의 값입니다. 따옴표를 이스케이프하려면 백슬래시를 사용합니다.
    • [STATE_METADATA]: 선택사항. 키-값 쌍이 포함된 객체로, 권장사항에 대한 메타데이터를 선택할 수 있습니다. 예를 들면 {"reviewedBy": "alice", "priority": "high"}입니다. 메타데이터는 권장사항의 stateInfo.stateMetadata 필드를 대체합니다.

    명령어가 성공하면 다음 예시와 같이 응답은 권장사항을 CLAIMED 상태로 표시합니다. 이 예시에서는 대부분의 필드를 생략합니다.

    [
          {
            "description": "This role has not been used during the observation window.",
            "recommenderSubtype": "REMOVE_ROLE",
            "etag": "\"df7308cca9719dcc\"",
            "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
            "stateInfo": {
              "state": "CLAIMED",
              "stateMetadata": {
                "reviewedBy": "alice",
                "priority": "high"
              }
            }
          }
        ]

  2. 프로젝트의 Cloud IAM 정책을 가져온 다음 권장사항을 반영하도록 정책을 수정합니다.

  3. 권장사항을 적용할 수 있으면 권장사항의 상태를 SUCCEEDED로 권장사항을 적용할 수 없으면 FAILED로 업데이트합니다.

    curl -X POST \
            -H "Content-Type: application/json" \
            -H "Authorization: Bearer $(gcloud auth print-access-token)" \
            -H "X-Goog-User-Project: [PROJECT_ID]" \
            --data-binary @- \
            "https://recommender.googleapis.com/v1/projects/[PROJECT_ID]/locations/global/recommenders/google.iam.policy.Recommender/recommendations/[RECOMMENDATION_ID]:[COMMAND]" \
        << EOM
        {
          "etag": "[ETAG]",
          "stateMetadata": [STATE_METADATA]
        }
        EOM
        

    다음 값의 모든 항목을 바꿉니다.

    • [COMMAND]: 권장사항을 적용할 수 있으면 markSucceeded, 권장사항을 적용할 수 없으면 markFailed를 사용합니다.
    • [RECOMMENDATION_ID]: 권장사항의 고유 식별자입니다. 이 값은 권장사항의 name 필드 끝에 표시됩니다. 위에 표시된 예시에서 ID는 fb927dc1-9695-4436-0000-f0f285007c0f입니다.
    • [PROJECT_ID]: 프로젝트 식별자입니다. 예: project-123.
    • [FORMAT]: 응답의 형식입니다. json 또는 yaml을 사용합니다.
    • [ETAG]: "dd0686e7136a4cbb"와 같은 etag 필드의 값입니다. 따옴표를 이스케이프하려면 백슬래시를 사용합니다.
    • [STATE_METADATA]: 선택사항. 키-값 쌍이 포함된 객체로, 권장사항에 대한 메타데이터를 선택할 수 있습니다. 예를 들면 {"reviewedBy": "alice", "priority": "high"}입니다. 메타데이터는 권장사항의 stateInfo.stateMetadata 필드를 대체합니다.

    예를 들어 권장사항을 성공으로 표시한 경우 응답은 권장사항을 SUCCEEDED 상태로 표시합니다. 이 예시에서는 대부분의 필드를 생략합니다.

    [
          {
            "description": "This role has not been used during the observation window.",
            "recommenderSubtype": "REMOVE_ROLE",
            "etag": "\"dd0686e7136a4cbb\"",
            "name": "projects/example-project/locations/global/recommenders/google.iam.policy.Recommender/recommendations/fb927dc1-9695-4436-0000-f0f285007c0f",
            "stateInfo": {
              "state": "SUCCEEDED",
              "stateMetadata": {
                "reviewedBy": "alice",
                "priority": "high"
              }
            }
          }
        ]

변경사항 보기, 되돌리기 및 복원

권장사항을 적용하거나 닫으면 해당 작업이 권장사항 로그에 표시됩니다. 권장사항 로그를 보려면 다음 안내를 따르세요.

  1. Cloud Console에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 화면 상단에서 권장사항 로그를 클릭합니다.

    Cloud Console에는 Cloud IAM 권장사항에 이전 작업 목록이 표시됩니다.

  3. 권장사항에 대한 세부정보를 보려면 확장 화살표를 클릭합니다.

    Cloud Console에는 작업을 수행한 구성원을 비롯하여 수행한 작업에 대한 세부정보가 표시됩니다.

  4. 필요에 따라 권장사항의 변경사항을 실행 취소하거나 취소한 권장사항을 복원할 수 있습니다.

    이전에 적용된 변경사항을 되돌리려면 되돌리기를 클릭합니다. Cloud Console은 구성원의 역할에 대한 변경사항을 되돌립니다. Cloud Console에 권장사항이 더 이상 표시되지 않습니다.

    취소한 권장사항을 복원하려면 복원을 클릭합니다. 권장사항은 Cloud Console의 IAM 페이지에 표시됩니다. 역할 또는 권한이 변경되지 않습니다.

다음 단계