내용으로 건너뛰기

ID 제공업체의 IAM ‘AccessDenied’ 또는 ‘Not authorized to perform AssumeRoleWithWebIdentity’ 페더레이션 오류를 해결하려면 어떻게 해야 합니까?

3분 분량
0

AWS Identity and Access Management(IAM) 정책 또는 역할을 ID 제공업체(IdP) 의 페더레이션과 함께 사용했습니다. ‘AccessDenied’ 또는 ‘Not authorized AssumeRoleWithWebIdentity’ 오류가 발생했습니다.

간략한 설명

API 작업 AssumeRoleWithWebIdentity 오류는 IAM 신뢰 정책이 올바르게 구성되지 않았거나 IdP의 IAM 역할이 올바르게 구성되지 않았기 때문에 발생했습니다.

해결 방법

이 문제를 해결하려면 다음 지침에 따라 OIDC(OpenID Connect) 페더레이션을 위한 IAM 역할을 생성하십시오. 그런 다음 이 지침에 따라 IAM 역할 신뢰 정책을 구성하십시오.

참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

IAM 역할 신뢰 정책

IAM 역할 신뢰 정책이 IdP에 맞게 구성되었는지 확인하십시오.

GitHub IdP의 역할 신뢰 정책 예시

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::012345678910:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:GitHubOrg/GitHubRepo:ref:refs/heads/GitHubBranch"
        }
      }
    }
  ]
}

IAM 역할 구성

IAM 역할이 IdP에 대한 올바른 Amazon 리소스 이름(ARN)으로 구성되어 있는지 확인하십시오. IAM 역할을 구성하는 단계는 IdP 및 AWS 서비스에 따라 다릅니다.

예를 들어, Amazon Elastic Kubernetes Service(Amazon EKS)에 대한 서비스 계정의 IAM 역할 ARN을 가져오려면 다음 명령을 실행합니다.

kubectl describe serviceaccount serviceaccount_name -n namespace_name

출력에서 IAM 역할 ARN이 수임하려는 역할인지 확인합니다. IAM 역할 ARN이 올바른 경우 단계에 따라 Kubernetes 서비스 계정에 IAM 역할을 할당합니다. IAM 역할 ARN이 올바르지 않은 경우 단계에 따라 역할 생성 및 연결에서 ARN을 업데이트합니다.

자세한 내용은 클러스터용 IAM OIDC 제공업체 생성을 참조하십시오.

CloudTrail 이벤트 기록

API 작업 AssumeRoleWithWebIdentity 실패는 AWS CloudTrail 이벤트 기록에 기록됩니다. 생성, 수정, 삭제 및 변경 불가능한 활동 등 지난 90일 동안 지원되는 모든 서비스, 통합 및 이벤트 유형을 볼 수 있습니다. CloudTrail 이벤트 기록을 사용하기 위해 트레일을 설정할 필요는 없습니다.

API 요청에서 전달된 값을 확인하려면 역할 신뢰 정책의 CloudTrail 이벤트 기록에 기록된 PrincipalId 값을 비교합니다.

예를 들어 arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com:sts.amazonaws.com:repo:reponame-rn/new-repo:environment:dev 값이 CloudTrail 이벤트의 PrincipalId에 기록된 경우 다음 신뢰 정책을 사용합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "token.actions.githubusercontent.com:aud": "sts.amazonaws.com",
          "token.actions.githubusercontent.com:sub": "repo:reponame-rn/new-repo:environment:dev"
        }
      }
    }
  ]
}

자세한 내용은 콘솔에서 최근 관리 이벤트 보기를 참조하십시오.

구성 모범 사례

구성 문제를 해결하려면 다음 모범 사례를 따르십시오.

  • 역할 신뢰 정책의 기본 ARN이 불완전합니다. 신뢰 정책의 페더레이션 위탁자 ARN에는 전체 ARN과 OIDC 제공업체 이름이 포함되어야 합니다. 예를 들어 GitHub IdP를 사용하는 경우 주요 ARN은 arn:aws:iam::123456789012:oidc-provider/token.actions.githubusercontent.com 형식입니다.
  • 잘못된 ARN 파티션: ARN 구성에는 역할과 OIDC 공급업체에 대한 올바른 파티션이 포함되어야 합니다. 예를 들어 AWS GovCloud 파티션의 OIDC 공급업체에 대한 ARN의 형식은 arn:aws-us-gov:iam::123456789012:oidc-provider/token.actions.githubusercontent.com입니다.
  • 사용할 수 없는 조건 키: 모든 IdP가 OIDC 페더레이션에서 사용할 수 있는 조건 키와 호환되는 것은 아닙니다. 조건 키가 OIDC 공급업체와 호환되는지 확인하십시오. 자세한 내용은 AWS OIDC 페더레이션에 사용 가능한 키를 참조하십시오.
  • IdP 구성에 역할 경로가 누락됨: IdP에 대해 전체 IAM 역할 및 ARN 경로를 구성해야 합니다. 예를 들어, 관리자 경로 ARN의 IAM 역할 이름 GitHubRolearn:aws:iam::123456789012:role/administrator/GitHubRole로 구성됩니다.

관련 정보

AWS STS AssumeRoleWithWebIdentity API 직접 호출 오류 ‘InvalidIdentityToken’을 해결하려면 어떻게 해야 합니까?

IAM의 OIDC IdP 페더레이션과 관련된 오류를 해결하려면 어떻게 해야 합니까?

Amazon Web Services에서 OpenID Connect 구성(GitHub 웹사이트에서)

AWS 공식업데이트됨 2년 전