워크로드 아이덴티티 제휴를 사용하면 Google Cloud 외부에서 실행되는 애플리케이션이 외부 ID 공급업체의 사용자 인증 정보를 사용하여 서비스 계정을 가장할 수 있습니다.
워크로드 아이덴티티 제휴를 사용하면 외부 환경에서 제공되는 인증 메커니즘을 애플리케이션에 사용함으로써 보안을 향상시키는 데 도움이 될 수 있고 서비스 계정 키 교체가 가능합니다.
워크로드 아이덴티티 제휴를 안전하게 사용하기 위해서는 다음 위협을 막을 수 있는 방식으로 구성해야 합니다.
- 스푸핑: 악의적인 행위자가 Google Cloud 리소스를 무단 액세스하기 위해 다른 사용자의 ID로 스푸핑을 시도할 수 있습니다.
- 권한 에스컬레이션: 악의적인 행위자가 정상적으로는 액세스할 수 없는 리소스에 액세스하기 위해 워크로드 아이덴티티 제휴를 악용할 수 있습니다.
- 부인 방지: 악의적인 행위자가 자신을 추적하기 어렵게 만드는 외부 사용자 인증 정보를 사용하여 자신의 ID 및 작업을 숨길 수 있습니다.
이 가이드에서는 워크로드 아이덴티티 제휴를 사용해야 하는 경우와 위험을 최소화할 수 있는 구성에 대한 권장사항을 설명합니다.
워크로드 아이덴티티 제휴를 사용해야 하는 경우
권장사항:
워크로드 아이덴티티 제휴는 주변 사용자 인증 정보에 액세스할 수 있는 애플리케이션에 사용하는 것이 좋습니다.워크로드 아이덴티티 제휴가 지원되지 않는 주변 사용자 인증 정보를 사용하는 경우에는 추가 토큰 교환을 사용합니다.
순환이 필요한 사용자 인증 정보 수를 줄이려면 워크로드 아이덴티티 제휴를 사용합니다.
워크로드 아이덴티티 제휴는 주변 사용자 인증 정보에 액세스할 수 있는 애플리케이션에 사용하는 것이 좋습니다.
Google Cloud 이외의 클라우드 제공업체에서 실행되는 애플리케이션에서는 주변 사용자 인증 정보가 사용되는 경우가 많습니다. 애플리케이션은 추가 인증을 수행하지 않아도 이러한 사용자 인증 정보를 획득할 수 있습니다. 예를 들면 다음과 같습니다.
- AWS에서 EC2에 배포된 애플리케이션은 인스턴스 프로필을 사용하여 역할을 가장하고 임시 사용자 인증 정보를 얻을 수 있습니다.
- Azure에서 애플리케이션은 관리형 ID를 사용해서 액세스 토큰을 얻을 수 있습니다.
- GitHub 작업에서는 워크플로가 배포 작업의 ID가 반영된 ID 토큰을 얻을 수 있습니다.
주변 사용자 인증 정보가 OpenID Connect(OIDC) 토큰, SAML 어설션, AWS 사용자 인증 정보이면 단기 Google 액세스 토큰에 대해 애플리케이션이 사용자 인증 정보를 교환할 수 있도록 워크로드 아이덴티티 제휴를 구성할 수 있습니다. 주변 사용자 인증 정보에 다른 형식이 사용될 경우에는 OIDC 토큰 또는 SAML 어설션을 위해 이를 교환한 후 워크로드 아이덴티티 제휴에 사용할 수 있습니다.
애플리케이션이 Google Cloud에 액세스해야 하고 주변 사용자 인증 정보에 액세스할 수 있을 때마다 워크로드 아이덴티티 제휴를 사용합니다.
워크로드 아이덴티티 제휴가 지원되지 않는 주변 사용자 인증 정보를 사용하는 경우에 추가 토큰 교환 사용
일부 경우에는 애플리케이션이 주변 사용자 인증 정보에 액세스할 수 있지만 해당 유형의 사용자 인증 정보가 워크로드 아이덴티티 제휴에서 지원되지 않을 수 있습니다. 이런 경우에는 추가 토큰 교환을 통해 워크로드 아이덴티티 제휴에 사용할 수 있는 사용자 인증 정보 유형으로 주변 사용자 인증 정보를 변환할 수 있는지 확인합니다.
예를 들어 애플리케이션이 Active Directory 환경에서 실행되는 경우 Kerberos 사용자 인증 정보에 액세스하는 것이 가능할 수 있습니다. 해당 환경에 Active Directory Federation Services(AD FS)와 같이 통합 Windows 인증을 지원하는 ID 공급업체가 있으면 이러한 Kerberos 사용자 인증 정보를 사용해서 ID 공급업체에 인증을 수행하고 JWT 형식의 OAuth 액세스 토큰을 얻을 수 있습니다. 그런 다음 이 액세스 토큰과 워크로드 아이덴티티 제휴를 사용해서 애플리케이션이 보조 토큰 교환을 수행해서 단기 Google 사용자 인증 정보를 얻도록 할 수 있습니다.
토큰 교환을 결합하면 상황이 복잡해지고 추가적인 종속성이 발생할 수 있지만 서비스 계정 키를 관리하고 보호할 필요는 없게 됩니다.
순환이 필요한 사용자 인증 정보 수 감소를 위해 워크로드 아이덴티티 제휴 사용
OpenID 또는 SAML ID 공급업체와 통합되는 애플리케이션에서는 ID 공급업체 인증을 위해 클라이언트 보안 비밀번호(또는 다른 형태의 보안 비밀)이 사용되는 경우가 많습니다. 일반적으로 이 보안 비밀은 애플리케이션 구성의 일부로 저장됩니다. 이러한 애플리케이션에 Google Cloud 액세스를 허용하려면 다음 방식 중 하나를 선택해야 합니다.
- 서비스 계정 키를 만들고 다른 보안 비밀과 함께 저장합니다.
- 기존 ID 공급업체에서 발급된 토큰을 사용하고 워크로드 아이덴티티 제휴를 사용해서 Google 사용자 인증 정보에 맞게 교환합니다.
첫 번째 옵션은 보안 비밀이 2개 필요하지만, 두 번째 옵션은 1개만 필요합니다. 보안 비밀 수를 줄이면 보안 비밀 순환을 단순화할 수 있고 따라서 보안도 향상될 수 있습니다.
스푸핑 위협으로부터 보호
워크로드 아이덴티티 풀은 ID 또는 사용자 계정을 포함하지 않습니다. 따라서 Cloud ID와 같은 사용자 디렉터리와는 다릅니다. 대신 워크로드 아이덴티티 풀은 IAM 주 구성원으로 사용될 수 있도록 외부 ID 공급업체의 ID를 보여주는 보기를 제공합니다.
워크로드 아이덴티티 풀과 해당 제공업체를 구성한 방식에 따라 동일한 외부 ID가 여러 다른 IAM 주 구성원으로 표현되거나 여러 외부 ID가 동일한 IAM 주 구성원에 매핑될 수도 있습니다. 이러한 모호성으로 인해 악의적인 행위자가 스푸핑 공격을 개시할 수 있습니다.
다음 섹션에서는 모호한 매핑을 방지하고 스푸핑 위협을 줄이는 데 도움이 되는 권장사항을 설명합니다.
권장사항:
GitHub 또는 다른 멀티 테넌트 ID 공급업체와 제휴할 때 속성 조건을 사용합니다.전용 프로젝트를 사용하여 워크로드 아이덴티티 풀 및 제공업체를 관리합니다.
조직 정책 제약조건을 사용해서 다른 프로젝트에서 워크로드 아이덴티티 풀 제공업체 만들기를 사용 중지합니다.
주체 충돌 방지를 위해 워크로드 아이덴티티 풀별로 단일 제공업체를 사용합니다.
동일한 ID 공급업체를 두 번 사용하여 제휴를 방지합니다.
ID 공급업체의 OIDC 메타데이터 엔드포인트를 보호합니다.
워크로드 아이덴티티 풀 제공업체의 URL을 대상으로 사용합니다.
속성 매핑에서 변경 불가능한 속성을 사용합니다.
속성 매핑에서 재사용 불가능한 속성을 사용합니다.
속성 매핑 수정을 허용하지 않습니다.
안정적이지 않거나 신뢰할 수 없는 속성에 의존하지 않습니다.
GitHub 또는 다른 멀티 테넌트 ID 공급업체와 제휴할 때 속성 조건 사용
워크로드 아이덴티티 제휴는 사용자 계정 디렉터리를 관리하지 않는 대신 클레임 기반 ID를 구현합니다. 따라서 동일한 ID 공급업체(IdP)에서 토큰 두 개를 발급하고 해당 클레임이 동일한 google.subject
값에 매핑되면 두 토큰은 동일한 사용자를 식별하는 것으로 간주됩니다.
토큰을 발급한 IdP를 확인하기 위해 워크로드 아이덴티티 제휴가 토큰의 발급기관 URL을 검사하고 확인합니다.
GitHub 및 Terraform Cloud와 같은 일부 공급업체는 모든 테넌트에서 단일 발급기관 URL을 사용합니다. 이러한 제공업체의 경우 발급기관 URL은 특정 GitHub 또는 Terraform Cloud 조직이 아닌 모든 GitHub 또는 Terraform Cloud를 식별합니다.
이러한 ID 공급업체를 사용하는 경우 워크로드 아이덴티티 제휴가 토큰의 발급기관 URL을 확인하여 토큰이 신뢰할 수 있는 소스에서 오는지, 해당 클레임을 신뢰할 수 있는지 확인하는 것으로는 충분하지 않습니다. 워크로드 아이덴티티 제휴 속성 조건을 구성하여 토큰이 신뢰할 수 있는 테넌트 또는 GitHub 또는 Terraform Cloud의 경우 신뢰할 수 있는 조직에서 생성되었는지 확인하는 것이 좋습니다.
자세한 내용은 속성 조건 구성을 참조하세요.
전용 프로젝트를 사용하여 워크로드 아이덴티티 풀 및 제공업체 관리
여러 프로젝트에서 워크로드 아이덴티티 풀 및 제공업체를 관리하는 대신 단일 전용 프로젝트를 사용하여 워크로드 아이덴티티 풀 및 제공업체를 관리합니다. 전용 프로젝트를 사용하면 다음과 같은 이점이 있습니다.
- 신뢰할 수 있는 ID 공급업체만 워크로드 아이덴티티 제휴에 사용됩니다.
- 워크로드 아이덴티티 제휴 및 제공업체 구성에 대한 액세스를 중앙에서 제어할 수 있습니다.
- 모든 프로젝트 및 애플리케이션에 일관적인 속성 매핑 및 조건을 적용합니다.
조직 정책 제약조건을 사용해서 워크로드 아이덴티티 풀 및 제공업체 관리를 위해 전용 프로젝트 사용 방침을 적용할 수 있습니다.
조직 정책 제약조건을 사용해서 다른 프로젝트에서 워크로드 아이덴티티 풀 제공업체 만들기 사용 중지
워크로드 아이덴티티 풀 제공업체 만들기 권한이 있는 사용자는 전용 프로젝트에서 관리하는 항목에 대해 중복될 수 있는 워크로드 아이덴티티 풀 및 제공업체를 만들 수 있습니다.
규칙 집합이 모두 거부로 설정된 constraints/iam.workloadIdentityPoolProviders
조직 정책 제약조건을 사용해서 새로운 워크로드 아이덴티티 풀 제공업체 만들기를 방지할 수 있습니다.
기본적으로 새로운 워크로드 아이덴티티 풀 만들기를 거부하도록 조직 계층 루트에서 이러한 제약조건을 적용합니다. 신뢰할 수 있는 특정 AWS 계정 또는 OIDC 제공업체를 허용하는 정책 제약조건을 적용하여 워크로드 아이덴티티 풀 및 제공업체 관리를 허용하려는 프로젝트에 대해 예외를 만듭니다.
주체 충돌 방지를 위해 워크로드 아이덴티티 풀별로 단일 제공업체 사용
워크로드 아이덴티티 제휴를 사용하면 워크로드 아이덴티티 풀별로 제공업체를 둘 이상 만들 수 있습니다. ID가 여러 제공업체에서 관리될 경우 제공업체를 여러 개 사용하는 것이 유용할 수 있지만 Google Cloud에서 실행되는 워크로드에 대해 이러한 복잡성을 숨겨야 할 수 있습니다.
제공업체를 여러 개 사용하면 한 제공업체의 google.subject
에 대한 속성 매핑이 다른 제공업체에 대한 속성 매핑과 동일한 값을 반환하는 주체 충돌 위험이 있습니다. 이러한 충돌이 발생하면 여러 외부 ID가 동일한 IAM 주 구성원에 매핑되어 Cloud 감사 로그에서 외부 ID를 식별하지 못할 수 있습니다.
주체 충돌을 방지하기 위해서는 워크로드 아이덴티티 풀별로 단일 제공업체를 사용합니다. 여러 제공업체와 제휴가 필요하면 여러 개의 워크로드 아이덴티티 풀을 만들고 각각 단일 워크로드 아이덴티티 제공업체를 사용합니다.
동일한 ID 공급업체를 두 번 사용하여 제휴 방지
동일하거나 비슷한 구성을 사용하는 여러 개의 워크로드 아이덴티티 풀 제공업체를 만들어서 동일한 ID 공급업체와 여러 번 제휴할 수 있습니다. 이러한 제공업체가 동일한 워크로드 아이덴티티 풀에 속하는 경우 이러한 구성으로 인해 주체 충돌이 발생할 수 있습니다. 제공업체가 다른 워크로드 아이덴티티 풀에 속하는 경우 주체 충돌이 발생할 수 없고 대신 동일한 외부 ID가 서로 다른 IAM 주 구성원으로 표시됩니다.
단일 외부 ID를 여러 IAM 주 구성원으로 매핑하면 특정 외부 ID가 액세스할 수 있는 리소스를 분석하는 것이 더 어려워집니다. 또한 이러한 모호성으로 인해 액세스를 취소하려고 시도할 때 위험이 증가할 수 있습니다. 관리자가 주 구성원 한 명에 대해 액세스 권한을 취소하더라도 다른 주 구성원의 존재를 인지하지 못해서 외부 ID의 액세스 권한을 계속 유지할 수 있습니다.
모호성 위험을 최소화하기 위해서는 동일한 ID 공급업체와의 제휴를 두 번 이상 하지 않는 것이 좋습니다. 대신 단일 워크로드 아이덴티티 풀 및 공급업체를 만들고 Google Cloud 리소스에 대해 액세스가 필요한 모든 외부 ID에 사용될 수 있도록 속성 매핑 및 조건을 사용합니다.
ID 공급업체의 OIDC 메타데이터 엔드포인트 보호
OpenID Connect 제공업체와 제휴할 때 워크로드 아이덴티티 제휴는 ID 공급업체에서 OIDC 메타데이터를 주기적으로 다운로드합니다. 워크로드 아이덴티티 제휴는 IdP의 메타데이터 및 JSON 웹 키 집합(JWKS)을 사용해서 토큰을 검증합니다.
신뢰성 확인을 위해 ID 공급업체와의 통신이 TLS를 사용하여 보호됩니다. 제공업체가 TLS를 종료하는 부하 분산기 또는 역방향 프록시 뒤에서 배포된 경우에는 TLS 연결이 부하 분산기 또는 역방향 프록시의 신뢰성을 보장하지만 실제 ID 공급업체의 신뢰성은 보장하지 않습니다.
악의적인 행위자가 이 설정을 악용해서 다른 키 집합을 제공하는 악의적인 엔드포인트로 JWKS 요청을 전달할 수 있도록 부하 분산기를 재구성하는 중간자(MITM) 공격을 실행할 가능성이 있습니다. 악의적인 행위자가 JWKS를 스왑하여 워크로드 아이덴티티 제휴에서 유효한 것으로 고려되는 토큰을 서명하여 다른 사용자의 ID를 스푸핑할 수 있습니다.
JWKS 스왑을 방지하려면 MITM 공격을 방어하는 방식으로 IdP가 배포되었는지 확인해야 합니다.
워크로드 아이덴티티 풀 제공업체의 URL을 대상으로 사용
OpenID Connect 제공업체와 제휴할 때 워크로드 아이덴티티 제휴는 토큰 대상(aud
클레임으로 인코딩됨)이 제공업체의 허용되는 대상 설정과 일치하는지 확인합니다. 마찬가지로 SAML 제공업체와 제휴할 때 워크로드 아이덴티티 제휴는 SAML 어설션이 예상 대상과 일치하는 대상 제한을 지정하는지 확인합니다.
기본적으로 워크로드 아이덴티티 제휴는 대상이 워크로드 아이덴티티 풀 제공업체를 고유하게 식별하는 URL https://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_ID/providers/PROVIDER_ID
와 일치한다고 가정합니다. 토큰 및 어설션에 이 URL이 대상으로 사용되도록 하면 혼동된 대리인 공격 위험을 줄일 수 있습니다. 이러한 공격에서 악의적인 행위자는 워크로드 아이덴티티 제휴에 사용하도록 의도되지 않았지만 다른 일부 API에 사용되는 토큰 또는 SAML 어설션을 워크로드 아이덴티티 제휴에 제공합니다.
토큰 또는 어설션에 대상 워크로드 아이덴티티 풀의 URL이 포함되도록 요구하면 클라이언트가 워크로드 아이덴티티 제휴용으로 발급된 토큰 및 어설션만 사용하도록 보장할 수 있습니다.
속성 매핑에서 변경 불가능한 속성 사용
외부 ID에 서비스 계정 가장 권한을 부여하려면 주체, 그룹, 커스텀 속성에 따라 외부 ID를 참조하는 IAM binding을 만듭니다. 외부 ID의 주체, 그룹, 커스텀 속성은 외부 ID 공급업체가 토큰 교환 중에 워크로드 아이덴티티 제휴에 전달하는 속성에서 파생됩니다.
일부 ID 공급업체는 사용자가 자신의 일부 고유 속성을 변경하도록 허용합니다. 예를 들어 사용자가 자신의 이메일 주소 또는 별칭을 수정할 수 있습니다. IAM binding에 수정 가능한 속성이 사용되는 경우 사용자가 실수로 자신의 사용자 프로필을 수정하여 특정 리소스에 대한 액세스 권한을 상실할 수 있습니다. 더 나쁜 경우에는 악의적인 행위자가 기존 IAM binding과 일치하도록 사용자 속성을 의도적으로 수정해서 다른 리소스에 대해 무단 액세스 권한을 획득할 수 있습니다.
이러한 스푸핑 위협을 방지하기 위해서는 사용자가 수정할 수 없거나 전혀 수정이 불가능한 속성으로만 속성 매핑을 제한해야 합니다.
속성 매핑에서 재사용 불가능한 속성 사용
서비스 계정을 가장하도록 외부 ID 권한을 부여하고 이후에 외부 ID 공급업체에서 사용자를 삭제하면 서비스 계정의 IAM binding이 그대로 남아 있습니다.
나중에 외부 ID 공급업체에 새 사용자를 추가할 때 사용자가 이전에 삭제된 사용자와 특정 속성(예: 동일한 이메일 주소)을 공유하게 되면, 워크로드 아이덴티티 제휴에서 이전 사용자와 신규 사용자를 식별할 수 없게 됩니다. 따라서 이전 사용자만 가리켜야 하는 IAM binding이 새 사용자에도 적용될 수 있습니다.
이러한 모호성을 방지하기 위해서는 고유한 사용자 ID와 같이 시간이 지나서 다시 사용할 수 없는 속성만 속성 매핑에 사용되도록 해야 합니다.
회사 정책에 따라 이메일 주소와 같은 속성의 재사용이 허용될 경우에는 속성 매핑에서 이러한 속성을 사용하지 않도록 하고, 대신 시간이 지나도 고유성이 보장되는 다른 속성을 사용해야 합니다.
속성 매핑 수정 허용하지 않음
워크로드 아이덴티티 제휴는 속성 매핑을 사용하여 외부 ID 공급업체에서 제공하는 속성 중 STS 토큰에 삽입할 속성 및 속성 이름을 변환하는 방법을 선택합니다. 속성 매핑 구성은 외부 ID 공급업체와 Google Cloud 간의 트러스트 관계를 설정하는 중요한 단계입니다.
속성 매핑은 워크로드 아이덴티티 제휴를 이용하는 보안에도 중요합니다. 제휴된 주 구성원 또는 주 구성원 집합에 서비스 계정을 가장할 수 있는 기능을 부여한 후 속성 매핑을 변경하는 경우 서비스 계정에 액세스할 수 있는 사용자를 변경할 수 있습니다.
속성 매핑을 수정하려면 iam.googleapis.com/workloadIdentityPoolProviders.update
권한이 필요합니다. 이 권한이 포함된 역할은 다음과 같습니다.
- 소유자(
roles/owner
) - IAM 워크로드 아이덴티티 풀 관리자
(
roles/iam.workloadIdentityPoolAdmin
)
악의적인 행위자가 속성 매핑을 수정할 권한이 있으면 ID를 스푸핑하여 서비스 계정에 대한 액세스 권한을 갖도록 매핑 규칙을 변경할 수 있습니다. 이러한 악성 수정을 방지하려면 소수의 관리 사용자만 속성 매핑을 수정할 수 있는 권한을 갖고 있어야 합니다.
리소스 계층 구조의 상위 수준에서 사용자에게 실수로 이러한 역할 중 하나가 부여되는 위험을 제한하기 위해 워크로드 아이덴티티 풀을 관리하기 위한 전용 Google Cloud 프로젝트를 만드는 것이 좋습니다.
안정적이지 않거나 신뢰할 수 없는 속성에 의존하지 않음
ID 공급업체는 속성을 사용하여 인증된 사용자에 대한 정보를 전달합니다. 이러한 속성 중 일부는 일반적으로 ID 공급업체에 의해 권한이 보장되지만 다른 속성은 그렇지 않을 수 있습니다. 예를 들어 외부 ID 공급업체가 ODID 토큰에 사용자 이름과 사용자 ID를 모두 삽입할 수 있습니다. 두 속성 모두 사용자를 고유하게 식별하며 서로 상호 호환될 수 있는 것처럼 보일 수 있습니다. 하지만 외부 ID 공급업체에서 사용자 ID가 안정적이고 신뢰할 수 있음을 보장하면서도 사용자 이름 변경을 허용할 수 있습니다.
속성 매핑이 안정적이지 않거나 신뢰할 수 없는 속성에 의존하는 경우 악의적인 행위자가 외부 ID 공급업체의 사용자 프로필을 수정하여 ID를 스푸핑할 수 있습니다. 예를 들어 외부 ID 공급업체에서 사용자 이름을 최근에 삭제되었지만 Google Cloud에서 서비스 계정에 계속 액세스할 수 있는 사용자의 이름으로 변경할 수 있습니다.
이러한 스푸핑 공격을 방지하려면 속성 매핑에서 외부 ID 공급업체가 안정적이고 신뢰할 수 있는 것으로 확인된 속성만 사용하도록 합니다.
부인 방지 위협으로부터 보호
Google Cloud의 리소스 중 하나에 영향을 미치는 의심스러운 활동이 감지되었을 때, Cloud 감사 로그는 활동이 언제 발생했는지, 어떤 사용자가 관련되었는지를 확인하는 데 중요한 정보 소스입니다.
애플리케이션에 워크로드 아이덴티티 제휴가 사용되는 경우 서비스 계정을 가장합니다. Cloud 감사 로그에서 애플리케이션으로 수행되는 모든 작업은 가장된 서비스 계정의 작업입니다. 이러한 작업으로 이어지는 전체 이벤트 체인을 재구성하기 위해서는 연관된 외부 ID와 해당 작업이 수행된 이유를 확인할 수 있도록 ID 공급업체 로그와 Cloud 감사 로그를 연결할 수 있어야 합니다.
이 섹션에서는 거부할 수 없는 감사 추적을 유지하는 데 도움이 되는 권장사항을 설명합니다.
IAM API의 데이터 액세스 로그 사용 설정
서비스 계정 가장 시나리오를 식별하고 이해할 수 있도록 Compute Engine과 같은 서비스에는 Cloud 감사 로그에 serviceAccountDelegationInfo
섹션이 포함되어 있습니다. 애플리케이션에 워크로드 아이덴티티 제휴가 사용되는 경우 이 섹션에는 서비스 계정 가장에 사용되는 주 구성원의 주체가 포함되어 있습니다.
일부 서비스는 Cloud 감사 로그에서 가장에 대한 세부정보를 포함하지 않습니다. 또한 부인할 수 없는 감사 추적을 유지하기 위해서는 보안 토큰 서비스 API 및 Identity and Access Management API에 대해 데이터 액세스 로그를 사용 설정하여 모든 가장 이벤트를 기록해야 합니다. 워크로드 아이덴티티 제휴에 사용되는 워크로드 아이덴티티 풀 또는 서비스 계정이 포함된 모든 클라우드 프로젝트에 대해 이 로그를 사용 설정합니다.
이러한 로그를 사용 설정하면 애플리케이션에서 외부 사용자 인증 정보 교환을 위해 워크로드 아이덴티티 제휴가 사용되고 서비스 계정 가장이 수행될 때마다 Cloud 감사 로그에 항목이 추가됩니다.
고유한 주체 매핑 사용
Cloud 감사 로그 항목에서 serviceAccountDelegationInfo 섹션에 사용되는 주 구성원 주체는 google.subject
에 대한 워크로드 아이덴티티 풀 제공업체의 속성 매핑에 따라 결정됩니다.
의심되는 작업이 발견되어 관련된 외부 ID를 찾아야 할 경우에는 해당 google.subject
값으로 외부 ID를 조회할 수 있어야 합니다.
마찬가지로 외부 ID가 손상되었고 Google Cloud 리소스에 액세스하기 위해 이 ID가 사용되었는지 확인해야 할 경우에는 외부 ID에 해당하는 Cloud 감사 로그 항목을 찾을 수 있어야 합니다.
워크로드 아이덴티티 풀 제공업체에 대해 속성 매핑을 정의할 때는 다음 조건에 맞게 google.subject
에 대해 고유한 매핑을 선택합니다.
- 외부 ID가 정확히 하나의
google.subject
값에 매핑됩니다. google.subject
값이 정확히 하나의 외부 ID에 매핑됩니다.google.subject
값으로 외부 ID를 조회할 수 있습니다.
이러한 고유성 조건을 충족하는 속성 매핑을 사용하면 해당 google.subject
값으로 외부 ID를 조회할 수 있고 그 반대로의 조회도 가능합니다.
권한 에스컬레이션 위협으로부터 보호
워크로드 아이덴티티 제휴를 사용할 때 최소 권한의 원칙을 적용하기 위해서는 다음을 수행해야 합니다.
- 서비스 계정을 가장할 수 있는 외부 ID 수를 제한합니다.
- 서비스 계정이 액세스할 수 있는 리소스를 제한합니다.
권한을 과도하게 허용하도록 구성하면 악의적인 행위자가 외부 ID를 사용해서 권한을 승격하고 액세스하지 않아야 하는 리소스에 액세스할 수 있습니다.
다음 섹션에서는 권한 에스컬레이션 위협에 대처하기 위한 권장사항을 설명합니다.
권장사항:
액세스가 필요한 리소스와 동일한 프로젝트에 있는 서비스 계정을 사용합니다.각 애플리케이션에 전용 서비스 계정을 사용합니다.
풀의 모든 구성원에 액세스 권한을 부여하지 않습니다.
액세스가 필요한 리소스와 동일한 프로젝트에 있는 서비스 계정 사용
클라이언트가 클라이언트 라이브러리 또는 REST API를 통해 워크로드 아이덴티티 제휴를 사용하는 경우 3단계 프로세스를 수행합니다.
- 신뢰할 수 있는 ID 공급업체에서 사용자 인증 정보를 가져옵니다.
- 보안 토큰 서비스의 토큰에 대해 사용자 인증 정보를 교환합니다.
- 보안 토큰 서비스의 토큰을 사용하여 서비스 계정을 가장하고 단기 Google 액세스 토큰을 가져옵니다.
마지막 단계에서는 액세스해야 하는 리소스와 동일한 프로젝트에 있는 서비스 계정을 사용합니다. 동일한 프로젝트에서 관리되는 서비스 계정을 사용하면 보다 제한적인 액세스 권한을 적용할 수 있고 서비스 계정이 더 이상 필요하지 않은 시점을 더 쉽게 결정할 수 있습니다.
각 애플리케이션에 전용 서비스 계정 사용
동일 프로젝트의 리소스에 액세스하기 위해 워크로드 아이덴티티 제휴를 사용하는 애플리케이션이 여러 개 있으면 각 애플리케이션에 대해 전용 서비스 계정을 만듭니다. 애플리케이션별 서비스 계정을 사용하면 개별 애플리케이션에 필요한 리소스에 대해서만 액세스 권한을 부여하게 되므로 초과 권한 설정이 방지됩니다.
풀의 모든 구성원에 대한 액세스 권한 부여 방지
외부 ID가 서비스 계정을 가장하기 위해서는 먼저 사용자가 서비스 계정에 roles/iam.workloadIdentityUser
역할을 부여해야 합니다. 이 역할을 부여할 때 워크로드 아이덴티티 풀의 모든 구성원에게 권한을 부여하지 않도록 해야 합니다. 대신 특정 외부 ID 또는 특정 기준에 맞는 ID에만 역할을 부여해야 합니다.
처음에는 Google Cloud 리소스에 대해 액세스가 필요한 외부 사용자 수가 적을 수 있습니다. 따라서 워크로드 아이덴티티 풀의 속성 조건과 ID 공급업체 구성에서 일부 외부 ID만 워크로드 아이덴티티 제휴를 사용하도록 허용될 수 있습니다.
나중에 새 워크로드를 Google Cloud에 온보딩할 때는 ID 공급업체 구성 또는 워크로드 아이덴티티 풀의 속성 조건을 수정해서 추가적인 외부 ID를 허용해야 할 수 있습니다.
특정 외부 ID에만 roles/iam.workloadIdentityUser
역할을 부여할 경우 잘못해서 필요한 것 이상으로 외부 ID에 가장 액세스 권한을 부여하지 않고 워크로드 아이덴티티 풀을 안전하게 늘릴 수 있는지 확인할 수 있습니다.
다음 단계
- 서비스 계정 작업 권장사항 알아보기
- 서비스 계정 키 관리 권장사항 자세히 알아보기