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

이 페이지에서는 워크로드 아이덴티티 제휴를 사용할 때 생성되는 감사 로그의 예시를 보여줍니다. 워크로드 아이덴티티 제휴를 사용하면 온프레미스 또는 멀티 클라우드 워크로드에서 서비스 계정 키를 사용하지 않고도 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 어설션을 복호화하는 데 사용된 워크로드 아이덴티티 풀 제공업체 키의 리소스 이름입니다. 이 필드는 워크로드 아이덴티티 제휴가 IdP에서 암호화된 SAML 응답을 받는 경우에만 존재합니다.

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

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"
  }
}

다음 단계