authorization ID로 access denied 오류 메시지 문제 해결(프리뷰)

authorization ID로 access denied 오류 메시지 문제 해결(프리뷰)

중요 — Access Troubleshooter는 공개 프리뷰 상태입니다.

개요

출처: 문서

본문

지원되는 API에 대한 요청이 거부되면 access denied 오류 응답에는 대개 authorization ID가 포함됩니다. 이 ID는 거부된 요청에 대한 인증 평가(authorization evaluation)를 참조합니다. 평가의 세부 정보를 검색하고 거부의 원인을 파악하려면 authorization ID를 제공해 GetRequestAuthorizationDetails API에 요청을 보내거나, 오류 메시지에 있는 링크를 여세요. 이렇게 하면 거부를 하나씩 해결하는 대신 단일 호출로 거부된 요청의 원인을 식별할 수 있어요.

참고 — AWS는 거부된 각 요청에 대해 authorization ID를 보장하지 않습니다. 이 문서의 authorization ID를 받지 못하는 경우를 참고하세요.

다음 예시는 정책 ARN, AWS Management Console 링크, authorization ID가 포함된 access denied 오류 메시지를 보여 줍니다.

User: arn:aws:iam::123456789012:user/janedoe is not authorized to perform: iam:CreateInstanceProfile
on resource: arn:aws:iam::123456789012:instance-profile/my-instance-profile
with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/ExampleDenyPolicy.
Go to https://us-east-1.console.aws.amazon.com/iam/home?region=us-east-1#/authorization-details/EXAMPLE1a2b3c4d5e6f7g8h9i0j for complete details,
or call the GetRequestAuthorizationDetails API with the following authorization id: EXAMPLE1a2b3c4d5e6f7g8h9i0j

개념과 정의

  • Authorization details(인증 세부 정보) — 요청 컨텍스트, 수행된 평가, 평가된 정책을 포함합니다.
  • Authorization ID — 지원되는 access denied 오류 응답에 포함되는 고유 식별자입니다. 거부된 요청에 대한 인증 평가를 참조하며, AWS Management Console 링크나 GetRequestAuthorizationDetails API에 전달하는 값입니다.
  • Request context(요청 컨텍스트) — 요청에 대해 평가된 조건 컨텍스트 키의 값입니다. 전역 조건 컨텍스트 키와 서비스별 조건 컨텍스트 키를 포함합니다.
  • Evaluation(평가) — 요청의 각 액션/리소스 쌍에 대해 적용된 조건 컨텍스트 키와 평가된 결과(ALLOW, EXPLICIT_DENY(정책이 액션을 명시적으로 거부), IMPLICIT_DENY(어떤 정책도 액션을 허용하지 않음)), 그리고 액션/리소스 쌍과 일치한 각 정책·명령문에 대한 참조를 포함합니다. 각 참조는 응답 전체에서 재사용되는 정책 ARN(관리형 정책) 또는 URI(인라인·기타 비관리형 정책)입니다.
  • 인증 중 평가된 정책(Policies evaluated during authorization) — 요청에 대해 AWS가 고려한 정책으로, 액션/리소스 쌍과 일치하지 않은 정책도 포함합니다. 각 항목은 정책 유형(예: 자격 증명 기반, 리소스 기반, SCP, RCP, 권한 경계, 세션 정책)과 평가에서 사용된 동일한 ARN(관리형 정책) 또는 URI(인라인·기타 비관리형 정책)를 제공합니다. ARN 또는 URI를 사용해 정책을 그것을 참조한 평가에 매칭할 수 있습니다. Attached to(연결 대상) 필드는 평가된 정책이 연결된 주체의 ARN을 보여 줍니다.

이 결과들을 함께 사용해 어떤 정책이 접근을 거부했는지, 왜 거부했는지 파악할 수 있습니다. 평가는 거부 시점의 정책을 반영합니다. 이후 정책이 변경되었을 수 있습니다.

AWS는 지원되는 API의 access denied 오류 응답에 authorization ID를 자동으로 포함하지만, authorization ID는 보장되지 않습니다. 일부 경우 AWS가 거부에 대한 인증 세부 정보를 기록하지 않아 오류 응답에 authorization ID가 포함되지 않습니다. 세부 정보가 기록되더라도 AWS가 비동기로 기록하므로 즉시 사용 가능하지 않을 수 있어요. GetRequestAuthorizationDetails 호출이 not-found 응답을 반환하면 잠시 기다렸다 다시 시도하세요. AWS는 거부 후 24시간 동안 인증 세부 정보를 보존합니다.

AWS Management Console로 문제 해결

access denied 오류 메시지의 링크를 선택해 Access Troubleshooter 콘솔에서 인증 세부 정보를 엽니다.

  • 찾아볼 것 — Access Troubleshooter 콘솔은 요청의 각 액션/리소스 쌍에 대한 평가, 각각의 결과(Allow, Explicit deny, Implicit deny), 고려된 정책을 보여 줍니다. 거부된 쌍과 거부를 일으킨 정책을 찾으세요.
  • 거부가 의도된 것인지 판단 — 정책을 변경하기 전에 평가를 검토하세요. 거부가 올바를 수 있고, 원인은 정책보다 요청 컨텍스트인 경우가 있습니다. 예를 들어 요청에 예상 세션 태그가 없거나 예상치 못한 네트워크 경로에서 왔을 수 있습니다.
  • 거부 해결 방법 — 해당 정책을 찾아 접근 문제를 해결하도록 업데이트합니다. 명시적 거부의 경우 해당 액션의 Deny 명령문을 제거하거나 좁힙니다. 암시적 거부의 경우 액션에 Allow 명령문을 추가합니다. 자세한 내용은 IAM 정책 편집을 참고하세요.
  • 인증 세부 정보에 접근할 수 있는 사람 — 단일 계정 또는 단일 조직 내의 요청이라면 iam:GetRequestAuthorizationDetails 접근 권한이 부여된 사람은 누구나 요청 세부 정보에 접근할 수 있습니다. 하나 이상의 조직에 걸친 요청이라면 특정 조직의 사용자는 자기 조직에 관한 세부 정보만 볼 수 있습니다.

AWS API 또는 AWS CLI로 문제 해결

AWS API나 AWS CLI로 거부를 문제 해결하려면:

  1. access denied 오류 응답에서 authorization ID를 찾습니다.
  2. 거부가 발생한 AWS 리전과 같은 리전에서 GetRequestAuthorizationDetails를 authorization ID와 함께 호출합니다. 다음 예시는 AWS CLI 명령입니다.
    aws iam-toolbox get-request-authorization-details \
        --region us-east-1 \
        --authorization-id EXAMPLE1a2b3c4d5e6f7g8h9i0j
    
  3. 평가 결과를 검토해 어떤 정책이 접근을 거부했는지, 거부 이유를 파악합니다.
  4. 식별된 정책을 업데이트해 접근 문제를 해결합니다. 자세한 내용은 IAM 정책 편집을 참고하세요.

authorization ID를 받지 못하는 경우

AWS는 다음 경우에 authorization ID를 반환하지 않습니다.

  • 인증이 기록하기에 너무 큰 경우 — 요청에 많은 정책이 포함되면 AWS는 요청을 기록하지 않기로 결정할 수 있습니다.
  • 서비스가 아직 지원되지 않는 경우 — 지원 서비스를 참고하세요.
  • API가 지원되지 않는 경우 — 지원 서비스 내의 일부 API는 authorization ID를 반환하지 않습니다.
  • 요청 유형이 지원되지 않는 경우 — 서비스가 여러분을 대신해 보낸 요청과 익명 요청이 포함됩니다.

authorization ID를 받지 못한다면 거부를 진단하는 다른 방법에 대해 access denied 오류 메시지 문제 해결을 참고하세요.

추가 고려 사항

  • 필요한 권한 — GetRequestAuthorizationDetails를 호출하려면 iam:GetRequestAuthorizationDetails 액션에 대한 권한이 있어야 합니다.
  • 리전별 API — GetRequestAuthorizationDetails는 리전별 API입니다. access denied 오류와 authorization ID가 생성된 것과 같은 AWS 리전에서 호출하세요.
  • 교차 조직 요청 — 거부된 요청이 하나 이상의 조직에 걸쳐 있을 때 GetRequestAuthorizationDetails는 자기 조직에 속한 세부 정보만 반환합니다. 이는 양방향으로 적용됩니다. 거부된 호출자의 조직에 있으면 그 조직에 관한 세부 정보만 봅니다. 거부된 리소스의 조직에 있으면 그 조직에 관한 세부 정보만 봅니다. 다른 조직이 소유한 세부 정보(그 조직의 정책이나 컨텍스트 키 값 등)는 반환되지 않습니다.

아직 authorization ID를 포함하지 않는 API·서비스·리전에서 access denied 오류를 받으면 access denied 오류 메시지 문제 해결을 참고하세요.

지원 서비스

GetRequestAuthorizationDetails 지원은 AWS API와 AWS 리전 전반에 걸쳐 점진적으로 출시 중입니다. 다음 서비스가 GetRequestAuthorizationDetails를 지원합니다.

  • 대부분의 IAM API

더 알아보기 (Learn more)