워크로드 아이덴티티 제휴 로그 예시

이 페이지에서는 워크로드 아이덴티티 제휴를 사용하면 생성되는 감사 로그의 예시를 보여줍니다. 워크로드 아이덴티티 제휴를 사용하면 온프레미스 또는 멀티 클라우드 워크로드에서 서비스 계정 키를 사용하지 않고도 Google Cloud 리소스에 액세스하도록 허용할 수 있습니다.

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

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

워크로드 아이덴티티 풀과 ID 공급업체 (IdP)를 설정한 후 IdP의 토큰을 만들어 제휴 토큰으로 교환할 수 있습니다.

주 구성원이 토큰을 교환하면 IAM에서 감사 로그를 생성할 수 있습니다. 토큰 교환 프로세스의 모든 단계에서 감사 로그를 받으려면 다음 API에 대한 데이터 액세스 활동에 대한 감사 로그를 사용 설정해야 합니다.

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

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

  • protoPayload.authenticationInfo.principalSubject: IdP 토큰 제목입니다.
    • Amazon Web Services(AWS)에서 이 필드에는 인증된 주 구성원의 Amazon 리소스 이름(ARN)이 포함됩니다.
    • Microsoft Azure에서 이 필드에는 Azure 토큰 제목으로 지정한 관리형 ID의 객체 ID가 포함됩니다.
    • 다른 OIDC IdP의 경우 이 필드에는 OIDC 토큰의 sub 값 또는 제목, 클레임이 포함됩니다.
  • protoPayload.metadata.mapped_principal: 토큰의 제목으로 IAM 구문을 사용하여 주 구성원을 식별합니다.

    principal://iam.googleapis.com/projects/project-number/locations/global/workloadIdentityPools/pool-id/subject/identifier
    
  • protoPayload.resourceName: 토큰이 연결된 워크로드 아이덴티티 풀 제공업체입니다.

다음 예시에서는 토큰 교환 요청에 대한 감사 로그 항목을 보여줍니다. 이 예시에서 Microsoft Azure 토큰은 제휴 토큰으로 교환되었습니다.

{
  "logName": "projects/my-project/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/projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/subject/a1234bcd-5678-9012-efa3-4b5cd678ef9a"
    },
    "methodName": "google.identity.sts.v1.SecurityTokenService.ExchangeToken",
    "resourceName": "projects/1234567890123/locations/global/workloadIdentityPools/azure-pool/providers/azure",
    "request": {
      "@type": "type.googleapis.com/google.identity.sts.v1.ExchangeTokenRequest",
      "grantType": "urn:ietf:params:oauth:grant-type:token-exchange"
    }
  },
  "resource": {
    "type": "audited_resource"
  }
}

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

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

워크로드 아이덴티티 제휴의 경우 관련 로그 항목은 다음과 유사합니다.

"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/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/WORKLOAD_POOL_NAME/providers/PROVIDER_NAME/keys/KEY_NAME"
  }
]

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

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

X.509 제휴 로그

이 섹션에서는 보안 토큰 서비스에서 사전 구성된 트러스트 저장소를 사용하여 mTLS 클라이언트 인증서를 확인하려고 할 때 생성되는 Cloud 감사 로그의 로그 항목을 설명합니다.

워크로드 아이덴티티 제휴의 경우 관련 로그 항목은 다음과 유사합니다.

"keyInfo": [
  {
    "certificateType": "trust_anchor"
    "timeUntilExpiration": 3333405600s
    "fingerprintSha256": "e33f612a0e426692f29db2c7b17b9e3810ce13f09ad117c67e7227a84fd25ea5"
    "use": "verify"
  }

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

  • certificateType: 클라이언트 인증서 확인과 관련된 인증서 유형으로, trust_anchor 또는 intermediate_ca일 수 있습니다.
  • timeUntilExpiration: 인증서 체인 확인에 사용될 때 인증서 만료까지 남은 시간(초)입니다.
  • fingerprintSha256: X.509 인증서 SHA-256 해시의 16진수 표현입니다.

서비스 계정에 단기 사용자 인증 정보를 만들기 위한 로그

IdP의 토큰을 제휴 토큰으로 교환하면 제휴 토큰을 사용하여 서비스 계정에 대한 단기 사용자 인증 정보를 만들 수 있습니다. 모든 Google 서비스를 사용하면 단기 사용자 인증 정보로 인증할 수 있습니다.

데이터 액세스 활동에 IAM 감사 로그를 사용 설정하면 IAM은 주 구성원이 서비스 계정의 단기 사용자 인증 정보를 생성할 때마다 감사 로그 항목을 생성합니다. 로그 항목에는 다음 필드가 포함됩니다.

  • protoPayload.authenticationInfo.principalSubject: 제휴 토큰의 제목입니다.
  • resource.labels.email_id: 단기 사용자 인증 정보가 생성된 서비스 계정입니다.

다음 예시에서는 서비스 계정에 대한 단기 OAuth 2.0 액세스 토큰을 생성하는 요청에 대한 감사 로그 항목을 보여줍니다. 이 예시에서 요청은 제휴 사용자 인증 정보로 인증되었으며 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com에 단기 사용자 인증 정보가 생성되었습니다.

{
  "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/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
    },
    "methodName": "GenerateAccessToken",
    "request": {
      "@type": "type.googleapis.com/google.iam.credentials.v1.GenerateAccessTokenRequest",
      "name": "projects/-/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com"
    },
    "resourceName": "projects/-/serviceAccounts/123456789012345678901"
  },
  "resource": {
    "labels": {
      "email_id": "my-service-account@my-project.iam.gserviceaccount.com",
      "project_id": "my-project",
      "unique_id": "123456789012345678901"
    },
    "type": "service_account"
  }
}

가장된 서비스 계정의 사용자 인증 정보로 인증에 대한 로그

서비스 계정에 단기 사용자 인증 정보를 만든 후에는 해당 인증 정보를 사용하여 Google Cloud API를 호출할 때 서비스 계정 가장할 수 있습니다.

호출하는 메서드 중 일부는 감사 로그를 생성할 수 있습니다. 일반적으로 이러한 로그 항목은 다음 ID를 표시합니다.

  • 단기 사용자 인증 정보로 가장한 서비스 계정
  • 단기 사용자 인증 정보를 생성한 ID

예를 들어 사용자 jamie@example.com이 제목 principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/jamie@example.com에 대한 제휴 토큰을 만든 다음 제휴 토큰을 사용하여 서비스 계정 my-service-account@my-project.iam.gserviceaccount.com에 대한 단기 사용자 인증 정보를 만든다고 가정해 보겠습니다.

이후 사용자는 단기 사용자 인증 정보로 서비스 계정을 가장하여 새 Pub/Sub 주제를 만듭니다. Pub/Sub는 서비스 계정을 식별하는 로그 항목과 IdP의 토큰 제목을 생성합니다.

{
  "logName": "projects/my-project/logs/cloudaudit.googleapis.com%2Factivity",
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "authenticationInfo": {
      "principalEmail": "my-service-account@my-project.iam.gserviceaccount.com",
      "serviceAccountDelegationInfo": [
        {
          "principalSubject": "principal://iam.googleapis.com/projects/1234567890123/locations/global/workloadIdentityPools/aws-pool/subject/012345678901"
        }
      ]
    },
    "methodName": "google.pubsub.v1.Publisher.CreateTopic",
    "request": {
      "@type": "type.googleapis.com/google.pubsub.v1.Topic",
      "name": "projects/my-project/topics/my-topic"
    },
    "resourceName": "projects/my-project/topics/my-topic"
  },
  "resource": {
    "type": "pubsub_topic"
  }
}

다음 단계