임시 액세스 구성

이 주제에서는 허용 정책의 조건부 역할 결합을 사용해서 Google Cloud 리소스에 대해 임시(만료되는) 액세스를 설정하는 방법을 설명합니다. 날짜/시간 속성을 사용하면 특정 리소스에 액세스할 때 시간 기반 제어를 적용할 수 있습니다. 예를 들어 지정된 시간에 또는 예약되어 반복적으로 시작 및 중지되는 프로젝트에 임시 액세스 권한을 부여할 수 있습니다.

시작하기 전에

  • Identity and Access Management(IAM) 조건부 역할 결합의 기본 사항은 조건 개요를 참조하세요.
  • 조건 표현식에서 사용할 수 있는 날짜/시간 속성을 검토합니다. 날짜/시간 속성은 모든 Google Cloud 서비스에서 인식됩니다.

필요한 역할

조건부 역할 결합을 관리하는 데 필요한 권한을 얻으려면 관리자에게 다음의 IAM 역할을 부여해 달라고 요청하세요.

  • 프로젝트 액세스 관리: 프로젝트의 프로젝트 IAM 관리자(roles/resourcemanager.projectIamAdmin)
  • 폴더에 대한 액세스 관리: 폴더의 폴더 관리자(roles/resourcemanager.folderAdmin)
  • 프로젝트, 폴더, 조직에 대한 액세스 관리: 조직의 조직 관리자(roles/resourcemanager.organizationAdmin)
  • 거의 모든 Google Cloud 리소스에 대한 액세스 권한 관리: 리소스 액세스 권한을 관리할 프로젝트, 폴더 또는 조직에 대한 보안 관리자(roles/iam.securityAdmin)

역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.

사전 정의된 역할에는 조건부 역할 결합을 관리하는 데 필요한 권한이 포함되어 있습니다. 필요한 정확한 권한을 보려면 필수 권한 섹션을 확장하세요.

필수 권한

조건부 역할 바인딩을 관리하려면 다음 권한이 필요합니다.

  • 프로젝트에 대한 액세스 권한 관리:
    • 프로젝트에 대한 resourcemanager.projects.getIamPolicy 권한
    • 프로젝트에 대한 resourcemanager.projects.setIamPolicy 권한
  • 폴더에 대한 액세스 관리:
    • 폴더에 대한 resourcemanager.folders.getIamPolicy 권한
    • 폴더에 대한 resourcemanager.folders.setIamPolicy 권한
  • 조직에 대한 액세스 권한 관리:
    • 조직에 대한 resourcemanager.organizations.getIamPolicy 권한
    • 조직에 대한 resourcemanager.organizations.setIamPolicy 권한

커스텀 역할이나 다른 사전 정의된 역할을 사용하여 이 권한을 부여받을 수도 있습니다.

임시 액세스 권한 부여

조건부 역할 결합을 사용하면 사용자가 지정된 만료 날짜 및 시간이 지난 후에 더 이상 리소스에 액세스할 수 없도록 리소스에 대한 시간 제한 액세스 권한을 부여할 수 있습니다.

다음 상황을 고려해 보세요. ExampleCo 기업의 정보 보안 규칙은 직원이 프로덕션 프로젝트의 리소스에 무제한으로 액세스할 수 없음을 강조합니다. 이전에는 관리자가 IAM 역할 결합을 수동으로 설정 및 삭제하여 엔지니어의 긴급 상황을 해결했습니다. 대신에 ExampleCo는 관리 오버헤드를 줄이기 위해 날짜/시간 조건으로 조건부 역할 바인딩을 구성하여 바인딩의 종료일을 설정할 수 있습니다.

프로젝트 리소스에 대한 만료 가능 액세스 권한을 부여하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 주 구성원 목록에서 원하는 주 구성원을 찾고 버튼을 클릭합니다.

  3. 권한 수정 패널에서 조건을 구성할 역할을 찾습니다. 그런 다음 IAM 조건(선택사항)에서 IAM 조건 추가를 클릭합니다.

  4. 조건 수정 패널에서 조건의 제목 및 설명(선택사항)을 입력합니다.

  5. 조건 빌더 또는 조건 편집기를 사용하여 조건 표현식을 추가할 수 있습니다. 조건 빌더에서는 표현식에 대해 원하는 조건 유형, 연산자, 기타 적용 가능한 세부정보를 선택할 수 있는 대화형 인터페이스를 제공합니다. 조건 편집기에서는 CEL 구문을 사용하여 표현식을 수동으로 입력하는 텍스트 기반 인터페이스를 제공합니다.

    조건 빌더:

    1. 조건 유형 드롭다운에서 만료되는 액세스를 선택합니다.
    2. 연산자 드롭다운에서 기한을 선택합니다.
    3. 시간 드롭다운에서 버튼을 클릭하여 날짜 및 시간 범위를 선택합니다.
    4. 저장을 클릭하여 조건을 적용합니다.
    5. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

    조건 편집기:

    1. 조건 편집기 탭을 클릭하고 타임스탬프를 직접 바꿔 다음 표현식을 입력합니다.

      request.time < timestamp("2020-07-01T00:00:00.000Z")
    2. 표현식을 입력한 후 오른쪽 상단 텍스트 상자 위에 있는 린터 실행을 클릭하여 CEL 구문 유효성을 검사할 수도 있습니다.

    3. 저장을 클릭하여 조건을 적용합니다.

    4. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

gcloud

허용 정책은 읽기-수정-쓰기 패턴을 통해 설정됩니다.

gcloud projects get-iam-policy 명령어를 실행하여 프로젝트의 현재 허용 정책을 가져옵니다. 다음 예시에서는 허용 정책의 JSON 버전이 디스크의 경로로 다운로드됩니다.

명령어:

gcloud projects get-iam-policy project-id --format=json > filepath

허용 정책의 JSON 형식이 다운로드됩니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

만료되는 액세스 권한이 있는 허용 정책을 구성하려면 타임스탬프를 직접 바꿔 다음 강조표시된 조건 표현식을 추가합니다. gcloud CLI에서 버전을 자동으로 업데이트합니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:travis@example.com"
      ],
      "role": "roles/iam.securityReviewer",
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

다음으로 gcloud projects set-iam-policy 명령어를 실행하여 새 허용 정책을 설정합니다.

gcloud projects set-iam-policy project-id filepath

새 허용 정책이 적용되고 travis@example.com의 역할 부여가 지정된 시간에 만료됩니다.

REST

읽기-쓰기-수정 패턴을 사용하여 특정 시간까지 액세스를 허용합니다.

먼저 프로젝트의 허용 정책을 읽습니다.

Resource Manager API의 projects.getIamPolicy 메서드가 프로젝트의 허용 정책을 가져옵니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • POLICY_VERSION: 반환할 정책 버전입니다. 요청에는 정책 버전 3인 최신 정책 버전이 지정되어야 합니다. 자세한 내용은 정책을 가져올 때 정책 버전 지정을 참조하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ]
    }
  ]
}

그런 다음 특정 시간까지 액세스를 허용하도록 허용 정책을 수정합니다. version 필드를 3 값으로 변경합니다.

{
  "version": 3,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:travis@example.com"
      ],
      "condition": {
        "title": "Expires_July_1_2020",
        "description": "Expires on July 1, 2020",
        "expression":
          "request.time < timestamp('2020-07-01T00:00:00.000Z')"
      }
    }
  ]
}

마지막으로 업데이트된 허용 정책을 작성합니다.

Resource Manager API의 projects.setIamPolicy 메서드는 요청의 허용 정책을 프로젝트의 새 허용 정책으로 설정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": {
    "version": 3,
    "etag": "BwWKmjvelug=",
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/iam.securityReviewer",
        "members": [
          "user:travis@example.com"
        ],
        "condition": {
          "title": "Expires_July_1_2020",
          "description": "Expires on July 1, 2020",
          "expression":
            "request.time < timestamp('2020-07-01T00:00:00.000Z')"
        }
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

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


요일/시간을 기준으로 액세스 관리

조건부 역할 결합을 사용하면 반복적으로 특정 요일 또는 시간에 리소스에 대한 액세스 권한을 부여할 수 있습니다.

다음 상황을 고려해 보세요. ExampleCo 기업에는 품질 보증 프로젝트가 있습니다. 작업을 완료하려면 전체 QA팀에 높은 권한을 가진 역할이 있어야 합니다. ExampleCo는 근무 시간을 월~금 오전 9시부터 오후 5시까지로 제한하는 지역 노동법을 준수해야 합니다. ExampleCo는 날짜/시간 조건을 사용하여 직원이 주중 근무 시간과 예정된 근무 시간에만 Google Cloud에 액세스하도록 할 수 있습니다.

특정 요일 또는 시간에만 반복적으로 프로젝트 리소스에 대한 액세스 권한을 부여하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud 콘솔에서 IAM 페이지로 이동합니다.

    IAM 페이지로 이동

  2. 주 구성원 목록에서 원하는 주 구성원을 찾고 버튼을 클릭합니다.

  3. 권한 수정 패널에서 조건을 구성할 역할을 찾습니다. 그런 다음 IAM 조건(선택사항)에서 IAM 조건 추가를 클릭합니다.

  4. 조건 수정 패널에서 조건의 제목 및 설명(선택사항)을 입력합니다.

  5. 조건 빌더 또는 조건 편집기를 사용하여 조건 표현식을 추가할 수 있습니다. 조건 빌더에서는 표현식에 대해 원하는 조건 유형, 연산자, 기타 적용 가능한 세부정보를 선택할 수 있는 대화형 인터페이스를 제공합니다. 조건 편집기에서는 CEL 구문을 사용하여 표현식을 수동으로 입력하는 텍스트 기반 인터페이스를 제공합니다.

    조건 빌더:

    1. 추가를 클릭합니다.
    2. 조건 유형 드롭다운에서 시간 일정 요일을 선택합니다.
    3. 연산자 드롭다운에서 다음 요일 또는 그 이후를 선택합니다.
    4. 요일 드롭다운에서 월요일을 선택합니다.
    5. 시간대 선택 드롭다운 목록에서 원하는 시간대를 선택합니다.
    6. 왼쪽에서 And 연산자가 선택되었는지 확인한 후 추가를 다시 클릭합니다.
    7. 조건 유형 드롭다운에서 시간 일정 요일을 선택합니다.
    8. 연산자 드롭다운에서 다음 요일 또는 그 이후을 선택합니다.
    9. 요일 드롭다운에서 금요일을 선택합니다.
    10. 시간대 선택 드롭다운 목록에서 원하는 시간대를 선택합니다.

    월요일부터 금요일까지만 액세스를 구성했습니다. 이제 오전 9시부터 오후 5시까지의 액세스를 구성할 수 있습니다.

    1. 왼쪽에서 And 연산자가 선택되었는지 확인한 후 추가를 다시 클릭합니다.
    2. 조건 유형 드롭다운에서 시간 일정 시간을 선택합니다.

      1. 연산자 드롭다운에서 다음 요일 또는 그 이후를 선택합니다.
      2. 시간 드롭다운에서 9(오전 9시)를 선택합니다.
      3. 시간대 선택 드롭다운 목록에서 원하는 시간대를 선택합니다.
      4. 조건 유형 드롭다운에서 시간 일정 시간을 선택합니다.
      5. 연산자 드롭다운에서 다음 요일 또는 그 이후을 선택합니다. 이 선택 항목에서 '다음 요일'은 17:00(오후 5시)부터 17:59(오후 5시 59분) 사이의 모든 시간을 논리적으로 평가합니다. 액세스 권한이 오후 4시 59분에 만료되도록 설정하려면 시간을 17이 아닌 16으로 설정해야 합니다.
      6. 시간 드롭다운에서 17(오후 5시)을 선택합니다.
      7. 시간대 선택 드롭다운 목록에서 원하는 시간대를 선택합니다.
      8. 저장을 클릭하여 조건을 적용합니다.
      9. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

      이제 월~금 오전 9시부터 오후 5시까지 액세스를 구성했습니다.

      조건 편집기:

      1. 조건 편집기 탭을 클릭하고 자리표시자 값을 직접 바꿔 다음 표현식을 입력합니다.

        request.time.getHours("Europe/Berlin") >= 9 &&
        request.time.getHours("Europe/Berlin") <= 17 &&
        request.time.getDayOfWeek("Europe/Berlin") >= 1 &&
        request.time.getDayOfWeek("Europe/Berlin") <= 5
        
      2. 표현식을 입력한 후 오른쪽 상단 텍스트 상자 위에 있는 린터 실행을 클릭하여 CEL 구문 유효성을 검사할 수도 있습니다.

      3. 저장을 클릭하여 조건을 적용합니다.

      4. 조건 수정 패널이 닫히면 권한 수정 패널에서 저장을 다시 클릭하여 허용 정책을 업데이트합니다.

gcloud

허용 정책은 읽기-수정-쓰기 패턴을 통해 설정됩니다.

gcloud projects get-iam-policy 명령어를 실행하여 프로젝트의 현재 허용 정책을 가져옵니다. 다음 예시에서는 허용 정책의 JSON 버전이 디스크의 경로로 다운로드됩니다.

명령어:

gcloud projects get-iam-policy project-id --format=json > filepath

허용 정책의 JSON 형식이 다운로드됩니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer"
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 1
}

예약된 액세스 권한이 있는 허용 정책을 구성하려면 타임스탬프를 직접 바꿔 다음 강조표시된 조건 표현식을 추가합니다. gcloud CLI에서 버전을 자동으로 업데이트합니다.

{
  "bindings": [
    {
      "members": [
        "user:project-owner@example.com"
      ],
      "role": "roles/owner"
    },
    {
      "members": [
        "user:rita@example.com"
      ],
      "role": "roles/bigquery.dataViewer",
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ],
  "etag": "BwWKmjvelug=",
  "version": 3
}

다음으로 gcloud projects set-iam-policy 명령어를 실행하여 새 허용 정책을 설정합니다.

gcloud projects set-iam-policy project-id filepath

새 허용 정책이 적용되고 rita@example.com의 역할 부여가 지정된 요일과 시간 사이에서 액세스를 허용합니다.

REST

예약된 액세스를 허용하려면 읽기-수정-쓰기 패턴을 사용합니다.

먼저 프로젝트의 허용 정책을 읽습니다.

Resource Manager API의 projects.getIamPolicy 메서드가 프로젝트의 허용 정책을 가져옵니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.
  • POLICY_VERSION: 반환할 정책 버전입니다. 요청에는 정책 버전 3인 최신 정책 버전이 지정되어야 합니다. 자세한 내용은 정책을 가져올 때 정책 버전 지정을 참조하세요.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:getIamPolicy

JSON 요청 본문:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

다음과 비슷한 JSON 응답이 표시됩니다.

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ]
    }
  ]
}

다음으로 예약된 액세스를 허용하도록 허용 정책을 수정합니다.

다음 강조표시된 조건 표현식을 추가하여 타임스탬프를 고유 값으로 바꿉니다. version 값을 3으로 업데이트했는지 확인합니다.

{
  "etag": "BwWKmjvelug=",
  "version": 3,
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:project-owner@example.com"
      ]
    },
    {
      "role": "roles/bigquery.dataViewer",
      "members": [
        "user:rita@example.com"
      ],
      "condition": {
        "title": "Business_hours",
        "description": "Business hours Monday-Friday",
        "expression":
          "request.time.getHours('Europe/Berlin') >= 9 &&
          request.time.getHours('Europe/Berlin') <= 17 &&
          request.time.getDayOfWeek('Europe/Berlin') >= 1 &&
          request.time.getDayOfWeek('Europe/Berlin') <= 5"
      }
    }
  ]
}

Resource Manager API의 projects.setIamPolicy 메서드는 요청의 허용 정책을 프로젝트의 새 허용 정책으로 설정합니다.

요청 데이터를 사용하기 전에 다음을 바꿉니다.

  • PROJECT_ID: Google Cloud 프로젝트 ID. 프로젝트 ID는 my-project 같은 영숫자 문자열입니다.

HTTP 메서드 및 URL:

POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy

JSON 요청 본문:

{
  "policy": {
    "etag": "BwWKmjvelug=",
    "version": 3,
    "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:project-owner@example.com"
        ]
      },
      {
        "role": "roles/bigquery.dataViewer",
        "members": [
          "user:rita@example.com"
        ],
        "condition": {
          "title": "Business_hours",
          "description": "Business hours Monday-Friday",
          "expression": "request.time.getHours('Europe/Berlin') >= 9 && request.time.getHours('Europe/Berlin') <= 17 && request.time.getDayOfWeek('Europe/Berlin') >= 1 && request.time.getDayOfWeek('Europe/Berlin') <= 5"
        }
      }
    ]
  }
}

요청을 보내려면 다음 옵션 중 하나를 펼칩니다.

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


다음 단계