직원 ID 제휴 로그 예시

이 페이지에서는 직원 ID 제휴를 사용하면 생성되는 감사 로그의 예시를 보여줍니다. 직원 ID 제휴를 사용하면 서드 파티 ID에서 서비스 계정 키를 사용하지 않고도 Google Cloud 리소스에 액세스하도록 허용할 수 있습니다.

감사 로그 사용 설정 및 보기에 대한 자세한 내용은 IAM 감사 로깅을 참조하세요.

직원 풀을 만들고 관리할 때 IAM이 감사 로그를 생성할 수 있습니다. 직원 풀을 관리할 때 감사 로그를 사용 설정하려면 다음 API에 대한 데이터 액세스 활동에 대한 감사 로그를 사용 설정해야 합니다.

  • Identity and Access Management(IAM) API(로그 유형 '관리자 읽기' 사용 설정)

토큰 교환 프로세스 또는 Google Cloud Console(제휴) 로그인에 대한 감사 로그를 추가로 구성하려면 다음 API에 대한 데이터 액세스 활동에 대한 감사 로그도 사용 설정해야 합니다.

  • Security Token Service API(로그 유형 '관리자 읽기' 사용 설정)

직원 풀 만들기 로그

다음 예시에서는 직원 풀을 만드는 로그 항목을 보여줍니다. 이 예시에서 사용자 sam@example.com은 ID가 123456789012인 조직에 ID가 my-pool인 직원 풀을 만들었습니다.

{
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "sam@example.com",
    },
    "methodName": "google.iam.admin.v1.WorkforcePools.CreateWorkforcePool",
    "resourceName": "locations/global/workforcePools/my-pool",
    "serviceName": "iam.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.iam.admin.v1.CreateWorkforcePoolRequest",
      "workforcePool": {
        "parent": "organizations/123456789012"
      },
      "workforcePoolId": "my-pool"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

IdP 토큰을 제휴 토큰으로 교환하기 위한 로그

직원 ID 풀과 직원 ID 풀 공급업체를 설정한 후 ID 공급업체(IdP)의 토큰을 만들어 제휴 토큰으로 교환할 수 있습니다.

데이터 액세스 활동에 Cloud 감사 로그를 사용 설정하면 IAM은 주 구성원이 토큰을 교환할 때마다 감사 로그 항목을 생성합니다. 로그 항목에는 다음 필드가 포함됩니다.

  • protoPayload.authenticationInfo.principalSubject: IdP 토큰 제목입니다.
    • OIDC IdP의 경우 이 필드에는 OIDC 토큰의 sub 또는 제목, 클레임 값이 포함됩니다.
    • SAML IdP의 경우 이 필드에 SAML 어설션에 있는 Subject 속성의 NameID 하위 속성 값이 포함됩니다.
  • protoPayload.metadata.mapped_principal: 토큰의 제목으로 IAM 구문을 사용하여 주 구성원을 식별합니다.

    principal://iam.googleapis.com/locations/global/workforcePools/POOL_ID/subject/IDENTIFIER
    
  • protoPayload.resourceName: 토큰이 연결된 직원 풀 제공업체입니다.

다음 예시에서는 토큰 교환 요청에 대한 감사 로그 항목을 보여줍니다. 이 예시에서는 OIDC 토큰이 제휴 토큰으로 교환됩니다.

{
  "logName": "organizations/123456789012/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "b6112abb-5791-4507-adb5-7e8cc306eb2e"
    },
    "metadata": {
      "mapped_principal": "principal://iam.googleapis.com/locations/global/workforcePools/oidc-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "locations/global/workforcePools/oidc-pool/providers/oidc-provider",
    "serviceName": "sts.googleapis.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "audience": "//iam.googleapis.com/locations/global/workforcePools/oidc-pool/providers/oidc-provider",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange",
      "requestedTokenType": "urn:ietf:params:oauth:token-type:access_token",
      "subjectTokenType": "urn:ietf:params:oauth:token-type:id_token"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

서명 및 암호화된 SAML 어설션 로그

이 섹션에서는 보안 토큰 서비스에서 서명된 SAML 어설션을 확인하거나 IdP에서 전송된 암호화된 어설션을 복호화하면 생성되는 Cloud 감사 로그의 로그 항목을 설명합니다.

직원 ID 제휴의 경우 관련 로그 항목은 다음과 유사합니다.

"keyInfo": [
  {
    "use": "verify"
    "fingerprint": "3C:B2:47:F8:A5:9A:8A:52:BD:1C:BC:96:B5:45:C1:8D:A7:F1:73:2D"
  },
  {
    "use": "decrypt"
    "resourceName": "//iam.googleapis.com/locations/global/workforcePools/WORKFORCE_POOL_NAME/providers/PROVIDER_NAME/keys/KEY_NAME"
  }
]

이 출력에는 다음 값이 포함됩니다.

  • fingerprint: SAML 사용자 인증 정보의 서명을 확인하는 데 사용된 X.509 인증서 SHA-256 해시의 16진수 표현입니다. X.509 인증서는 직원 ID 풀 공급업체에 연결된 SAML XML 메타데이터에서 추출됩니다.
  • resourceName: 암호화된 SAML 어설션을 복호화하는 데 사용된 인력 ID 풀 공급업체 키의 리소스 이름입니다. 이 필드는 ID 제휴에서 IdP로부터 암호화된 SAML 응답을 수신하는 경우에만 표시됩니다.

제휴 토큰으로 Google Cloud API를 호출하기 위한 로그

IdP 토큰을 제휴 토큰으로 교환한 후 제휴 토큰을 사용하여 Google Cloud API를 호출할 수 있습니다. 호출하는 메서드 중 일부는 감사 로그를 생성할 수 있습니다.

다음 예시에서는 제휴 토큰을 사용해서 프로젝트에 Cloud Storage 버킷을 나열하는 요청의 감사 로그 항목을 보여줍니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "principal://iam.googleapis.com/locations/global/workforcePools/oidc-pool/subject/012345678901"
    },
    "methodName": "storage.buckets.list",
    "serviceName": "storage.googleapis.com",
  },
  "resource": {
    "type": "gcs_bucket"
  }
}

Google Cloud 콘솔(제휴) 로그인 로그

직원 ID 풀 및 해당 IdP를 설정한 후 사용자가 싱글 사인온(SSO)을 사용하여 Google Cloud에 로그인할 수 있습니다.

성공적인 로그인 로그

이 섹션에서는 성공한 로그인의 결과로 기록된 예시 Cloud 감사 로그 항목 예시를 보여줍니다. 이 예시에서는 사용자 user@example.comlocations/global/workforcePools/my-pool/providers/my-provider 공급업체를 사용하여 로그인합니다. 이 경우 다음 Cloud 감사 로그 항목이 생성됩니다.

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "continueUrl": "https://console.cloud.google",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
       "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

SAML 공급업체의 Cloud 감사 로그 항목은 메타데이터 필드에 서명 키 정보를 추가로 포함할 수 있습니다.

{
  "metadata": {
    "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    "keyInfo": [
      {
        "use": "verify",
        "fingerprint": "AE:CK:LM:EF:LK:OG:EH:IJ:KN:AL:OM:AD:NO",
      }
    ],
  }
}

실패한 로그인 로그

이 섹션에서는 실패한 로그인의 결과로 기록된 Cloud 감사 로그 항목 예시를 보여줍니다. 이 예시에서는 사용자 user@example.comlocations/global/workforcePools/my-pool/providers/my-provider 공급업체를 사용하여 로그인을 시도하지만 특성 조건이 충족되지 않아 액세스가 거부됩니다. 이 경우 다음 Cloud 감사 로그 항목이 생성됩니다.

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "status": {
      "code": 3,
      "message": "The given credential is rejected by the attribute condition.",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignIn",
    "resourceName": "locations/global/workforcePools/my-pool/subject/user@example.com",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignInRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google",
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignIn",
    }
  },
}

로그아웃 로그

이 섹션에서는 로그아웃 이벤트의 결과로 기록되는 Cloud 감사 로그 항목 예시를 보여줍니다. 이 예시에서는 locations/global/workforcePools/my-pool/providers/my-provider 공급업체를 사용하여 로그인한 사용자 user@example.com이 로그아웃을 시작합니다. 이 경우 다음 Cloud 감사 로그 항목이 생성됩니다.

{
  "logName": "organizations/my-organization-id/logs/cloudaudit.googleapis.com%2Fdata_access",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalSubject": "user@example.com",
    },
    "serviceName": "sts.googleapis.com",
    "methodName": "google.identity.sts.SecurityTokenService.WebSignOut",
    "resourceName": "locations/global/workforcePools/my-pool/providers/my-provider",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.SecurityTokenService.WebSignOutRequest",
      "provider": "//iam.googleapis.com/locations/global/workforcePools/my-pool/providers/my-provider",
      "host": "http://auth.cloud.google"
    },
    "metadata": {
      "mappedPrincipal": "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/user@example.com",
    }
  },
  "resource": {
    "type": "audited_resource",
    "labels": {
      "service": "sts.googleapis.com",
      "method": "google.identity.sts.SecurityTokenService.WebSignOut"
    }
  },
}

다음 단계