IAM 정책 문제 해결 - AWS Identity and Access Management

IAM 정책 문제 해결

정책은 자격 증명 또는 리소스에 연결될 때 해당 권한을 정의하는 AWS의 엔터티입니다. AWS는 사용자와 같은 보안 주체가 요청할 때 이러한 정책을 평가합니다. 정책에서 권한은 요청이 허용되거나 거부되는지 여부를 결정합니다. 정책은 JSON 문서로 AWS에 저장되며 자격 증명 기반 정책으로 보안 주체에 연결되거나 리소스 기반 정책으로 리소스에 연결됩니다. 자격 증명 기반 정책을 IAM 그룹, 사용자 또는 역할과 같은 보안 주체(또는 자격 증명)에 연결할 수 있습니다. 자격 증명 기반 정책에는 AWS 관리형 정책, 고객 관리형 정책 및 인라인 정책이 포함됩니다. AWS Management Console에서 Visual editor(시각적 편집기) 탭 또는 JSON 탭을 통해 고객 관리형 정책을 생성하고 편집할 수 있습니다. AWS Management Console에서 정책을 볼 때 정책에서 부여된 권한의 요약을 볼 수 있습니다. 시각적 편집기 및 정책 요약을 사용하여 IAM 정책을 관리하는 동안 발생한 일반 오류를 진단하고 해결할 수 있습니다.

모든 IAM 정책은 JavaScript Object Notation(JSON) 규칙으로 시작하는 구문을 사용하여 저장됩니다. 정책을 생성 또는 관리하기 위해 이 구문을 이해할 필요가 없습니다. AWS Management Console에서 시각적 편집기를 사용하여 정책을 생성하고 편집할 수 있습니다. IAM 정책의 JSON 구문에 대한 자세한 정보는 IAM JSON 정책 언어의 문법 섹션을 참조하세요.

IAM 정책 주제 문제 해결

시각적 편집기를 사용하여 문제 해결

고객 관리형 정책을 생성 또는 편집할 때 Visual editor(시각적 편집기) 탭의 정보를 사용하여 정책의 오류를 해결할 수 있습니다. 시각적 편집기를 사용하여 정책을 생성하는 예제를 보려면 자격 증명에 대한 액세스 제어 단원을 참조하십시오.

정책 재구성

정책을 생성할 때 AWS는 정책을 검증, 처리 및 변환한 후 저장합니다. AWS가 사용자 쿼리에 응답하여 정책을 반환하거나 콘솔에 표시할 경우 AWS는 정책에서 부여한 권한을 변경하지 않고 해당 정책을 사람이 읽을 수 있는 형식으로 다시 변환합니다. 이렇게 하면 정책 시각적 편집기 또는 JSON 탭에 표시되는 사항이 달라질 수 있습니다. 시각적 편집기 권한 블록이 추가, 제거 또는 재정렬될 수 있으며 블록 내의 내용이 최적화될 수 있습니다. JSON 탭에서 사소한 공백은 제거되며, JSON 맵 내의 요소는 재정렬될 수 있습니다. 또한 보안 주체 요소 내의 AWS 계정 ID는 AWS 계정 루트 사용자의 ARN으로 교체할 수 있습니다. 이러한 변경 가능성 때문에 JSON 정책 문서를 문자열로 비교하면 안 됩니다.

AWS Management Console에서 고객 관리형 정책을 생성할 때 JSON 탭에서 완전히 작업하도록 선택할 수 있습니다. Visual editor(시각적 편집기)탭에서 변경을 수행하지 않고 JSON 탭에서 정책 검토를 선택하면 정책을 재구성할 가능성이 적습니다. 그러나 정책을 생성하고 시각적 편집기(Visual editor) 탭을 사용하여 수정한 경우 또는 시각적 편집기(Visual editor) 탭에서 정책 검토(Review policy)를 선택한 경우 IAM은 시각적 편집기에서 모양을 최적화하기 위해 정책을 재구성할 수 있습니다.

이러한 재구성은 편집 세션에만 존재하며 자동으로 저장되지 않습니다.

편집 세션에서 정책이 재구성되면 IAM이 다음 상황에 따라 재구성을 저장할지 여부를 결정합니다.

이 탭에서 정책을 편집한 경우 그런 다음 이 탭에서 정책 검토를 선택한 경우 변경 사항 저장을 선택한 경우
Visual editor(시각적 편집기 편집됨 Visual editor(시각적 편집기 정책이 재구성됨
Visual editor(시각적 편집기 편집됨 JSON 정책이 재구성됨
Visual editor(시각적 편집기 편집되지 않음 Visual editor(시각적 편집기 정책이 재구성됨
JSON 편집됨 Visual editor(시각적 편집기 정책이 재구성됨
JSON 편집됨 JSON 정책 구성이 변경되지 않음
JSON 편집되지 않음 JSON 정책 구성이 변경되지 않음

IAM은 여러 서비스, 리소스 유형 또는 조건 키를 허용하는 문이나 권한 블록이 있는 정책 또는 복잡한 정책을 재구성할 수 있습니다.

시각적 편집기에서 리소스 ARN 선택

시각적 편집기를 사용하여 정책을 생성하거나 편집할 때 먼저 서비스를 선택한 다음 해당 서비스에서 작업을 선택해야 합니다. 선택한 서비스 및 작업이 특정 리소스 선택을 지원하는 경우에는 시각적 편집기에 지원되는 리소스 유형이 나열됩니다. 그런 다음 Add ARN(ARN 추가)를 선택하여 리소스에 대한 세부 정보를 제공합니다. 리소스 유형에 대한 ARN을 추가하기 위해 다음 옵션에서 선택할 수 있습니다.

  • ARN 빌더 사용 - 리소스 유형에 따라 ARN을 빌드하는 여러 필드가 표시될 수 있습니다. 모두 선택을 선택하여 지정된 설정의 값에 대한 권한을 제공할 수도 있습니다. 예를 들어, Amazon EC2 읽기 액세스 레벨 그룹을 선택하면 정책의 작업이 instance 리소스 유형을 지원합니다. 리소스에 대해 리전, 계정InstanceId 값을 제공해야 합니다. 계정 ID를 제공하지만 리전 및 인스턴스 ID에 대해 모두 선택을 선택한 경우 정책은 계정의 모든 인스턴스에 대해 권한을 부여합니다.

  • ARN 입력 또는 붙여넣기 - Amazon 리소스 이름(ARN)별로 리소스를 지정할 수 있습니다. ARN의 필드(각 콜론 쌍 사이)에 와일드카드 문자(*)를 포함할 수 있습니다. 자세한 내용은 섹션을 참조하세요IAM JSON 정책 요소: Resource

시각적 편집기에서 권한 거부

기본적으로 시각적 편집기를 사용하여 생성하는 정책은 사용자가 선택하는 작업을 허용합니다. 대신 선택한 작업을 거부하려면 Switch to deny permissions(권한 거부로 전환)을 선택합니다. 요청은 기본적으로 거부되므로 사용자에게 필요한 작업과 리소스에만 권한을 허용하는 것이 보안 모범 사례입니다. 다른 문이나 정책에서 허용되는 권한을 별도로 재정의하려는 경우에만 권한을 거부하는 문을 생성해야 합니다. 권한 거부의 수가 늘어나면 권한 문제를 해결하기가 더 어려워질 수 있기 때문에 그 수를 최소한으로 제한하는 것이 좋습니다. IAM이 정책 로직을 평가하는 방법에 대한 자세한 정보는 정책 평가 로직 섹션을 참조하세요.

참고

기본적으로 AWS 계정 루트 사용자만 해당 계정의 모든 리소스에 액세스할 수 있습니다. 따라서 루트 사용자로 로그인하지 않은 경우 정책이 부여한 권한이 있어야 합니다.

시각적 편집기에서 여러 서비스 지정

시각적 편집기를 사용하여 정책을 생성할 때 한 번에 서비스 하나만 선택할 수 있습니다. 시각적 편집기는 해당 서비스 하나에 대한 작업에서 선택할 수 있도록 허용하므로 이렇게 하는 것이 모범 사례입니다. 그런 다음 해당 서비스 및 선택한 작업에서 지원되는 리소스 중에서 선택합니다. 이렇게 하면 정책을 쉽게 생성하고 문제를 해결할 수 있습니다.

JSON 구문에 대해 잘 알고 있는 경우 와일드카드 문자(*)를 사용하여 여러 서비스를 수동으로 지정할 수도 있습니다. 예를 들어, Code*를 입력하여 CodeCodeBuild과 같이 CodeCommit로 시작하는 모든 서비스에 대한 권한을 제공합니다. 그러나 정책을 완료하려면 작업 및 리소스 ARN을 입력해야 합니다. 또한 정책을 저장하면 각 서비스를 별도의 권한 블록에 포함하도록 정책이 재구성될 수 있습니다.

또는 서비스에 대해 JSON 구문(예: 와일드카드)을 사용하기 위해 JSON 탭을 통해 정책을 생성, 편집 및 저장합니다.

시각적 편집기에서 정책의 크기 줄이기

시각적 편집기를 사용하여 정책을 생성할 때 IAM은 정책을 저장하기 위해 JSON 문서를 생성합니다. JSON 탭으로 전환하여 이 문서를 볼 수 있습니다. 이 JSON 문서가 정책의 크기 제한을 초과할 경우, 시각적 편집기에 오류 메시지가 표시되며 정책을 검토하거나 저장할 수 없습니다. 관리형 정책의 크기에 대한 IAM 제한을 보려면 IAM 및 STS 문자 할당량 섹션을 참조하세요.

시각적 편집기에서 정책의 크기를 줄이려면 정책을 편집하거나 권한 블록을 다른 정책으로 옮깁니다. 오류 메시지에는 정책 문서에 포함된 문자 수가 포함되며, 이 정보를 통해 정책의 크기를 줄일 수 있습니다.

시각적 편집기에서 인식할 수 없는 서비스, 작업 또는 리소스 유형 수정

시각적 편집기에서 정책을 생성하거나 편집할 때 정책에 인식할 수 없는 서비스, 작업 또는 리소스 유형이 포함되어 있다는 경고가 표시될 수 있습니다.

참고

IAM은 정책 요약을 지원하는 서비스의 이름, 작업 및 리소스 유형을 검토합니다. 그러나 존재하지 않는 리소스 값이나 조건이 정책 요약에 포함될 수 있습니다. 항상 정책 시뮬레이터로 정책을 테스트합니다.

정책에 인식할 수 없는 서비스, 작업 또는 리소스 유형이 포함되는 경우 다음 오류 중 하나가 발생한 것입니다.

  • 미리 보기 서비스 - 미리 보기에 있는 서비스는 시각적 편집기를 지원하지 않습니다. 미리 보기에 참여하고 있는 경우 경고를 무시하고 계속 진행할 수 있지만, 정책을 완료하려면 작업 및 리소스 ARN을 수동으로 입력해야 합니다. 또는 JSON 탭을 선택하여 JSON 정책 문서를 입력하거나 붙여 넣을 수 있습니다.

  • 사용자 지정 서비스 - 사용자 지정 서비스는 시각적 편집기를 지원하지 않습니다. 사용자 지정 서비스를 사용하고 있는 경우 경고를 무시하고 계속 진행할 수 있지만, 정책을 완료하려면 작업 및 리소스 ARN을 수동으로 입력해야 합니다. 또는 JSON 탭을 선택하여 JSON 정책 문서를 입력하거나 붙여 넣을 수 있습니다.

  • 시각적 편집기를 지원하지 않는 서비스 - 정책에 시각적 편집기를 지원하지 않는 정식 버전(GA) 서비스가 포함되어 있는 경우 경고를 무시하고 계속 진행할 수 있지만, 정책을 완료하려면 작업 및 리소스 ARN을 수동으로 입력해야 합니다. 또는 JSON 탭을 선택하여 JSON 정책 문서를 입력하거나 붙여 넣을 수 있습니다.

    일반적으로 사용할 수 있는 서비스는 공개적으로 출시된 서비스이며 프리뷰 또는 사용자 지정 서비스가 아닙니다. 인식할 수 없는 서비스를 일반적으로 사용할 수 있고 이름을 올바르게 입력한 경우 서비스는 시각적 편집기를 지원하지 않습니다. GA 서비스에 대한 시각적 편집기 또는 정책 요약 지원을 요청하는 방법을 알아보려면 서비스가 IAM 정책 요약을 지원하지 않음 단원을 참조하십시오.

  • 시각적 편집기를 지원하지 않는 작업 - 지원되지 않는 작업과 함께 지원되는 서비스가 정책에 포함되어 있는 경우 경고를 무시하고 계속 진행할 수 있지만, 정책을 완료하려면 리소스 ARN을 수동으로 입력해야 합니다. 또는 JSON 탭을 선택하여 JSON 정책 문서를 입력하거나 붙여 넣을 수 있습니다.

    지원되지 않는 작업과 함께 지원되는 서비스가 정책에 포함되어 있으면 서비스가 시각적 편집기를 완전히 지원하지 않습니다. GA 서비스에 대한 시각적 편집기 또는 정책 요약 지원을 요청하는 방법을 알아보려면 서비스가 IAM 정책 요약을 지원하지 않음 단원을 참조하십시오.

  • 시각적 편집기를 지원하지 않는 리소스 유형 - 지원되지 않는 리소스 유형과 함께 지원되는 작업이 정책에 포함되어 있는 경우 경고를 무시하고 계속 진행할 수 있습니다. 그러나 IAM은 선택한 모든 작업에 대한 리소스를 포함했는지를 확인할 수 없으며, 추가 경고가 표시될 수 있습니다.

  • 오타 - 시각적 편집기에 서비스, 작업 또는 리소스를 수동으로 입력할 경우 오타가 포함된 정책이 생성될 수 있습니다. 시각적 편집기를 사용하여 서비스 및 작업 목록에서 선택한 다음 표시되는 메시지에 따라 리소스 섹션을 완료하는 것이 모범 사례입니다. 그러나 서비스가 시각적 편집기를 완전히 지원하지 않는 경우 정책의 부분을 수동으로 입력해야 할 수 있습니다.

    정책에 위와 같은 오류가 없다는 것을 확신한다면 오타가 포함된 것일 수 있습니다. 서비스, 작업 및 리소스 유형 이름에 오탈자가 있는지 확인합니다. 예를 들어 s2 대신 s3를 사용하고, ListMyBuckets 대신 ListAllMyBuckets을 사용할 수 있습니다. 또 다른 일반적인 작업 오타는 ARN에 불필요한 텍스트를 추가(예: arn:aws:s3: : :*)하거나 작업에서 콜론을 누락(예: iam.CreateUser)하는 것입니다. 정책 검토를 선택하여 정책 요약을 검토하고 정책이 의도한 권한을 제공하는지 여부를 확인하여 정책에 오타가 있는지를 평가할 수 있습니다.

정책 요약을 사용하여 문제 해결

정책 요약과 관련된 문제를 진단하고 해결할 수 있습니다.

정책 요약 누락

IAM 콘솔에는 정책에서 각 서비스에 대해 허용되거나 거부되는 액세스 레벨, 리소스, 조건을 설명하는 정책 요약 테이블이 포함되어 있습니다. 정책은 3가지 테이블, 즉 정책 요약, 서비스 요약, 작업 요약으로 요약됩니다. 정책 요약 테이블에는 서비스 목록과 선택한 정책에 의해 정의된 권한의 요약이 포함되어 있습니다. 사용자 페이지에서 사용자에게 연결된 정책에 대한 정책 요약을 볼 수 있습니다. 정책 페이지에서 관리형 정책에 대한 정책 요약을 볼 수 있습니다. AWS가 정책 요약을 렌더링할 수 없는 경우 요약 대신 JSON 정책 문서가 제공되며 다음 오류가 표시됩니다.

A summary for this policy cannot be generated. You can still view or edit the JSON policy document.

정책이 요약을 포함하지 않을 경우 다음 오류 중 하나가 발생한 것입니다.

  • 지원되지 않는 정책 요소 - IAM은 다음 정책 요소 중 하나를 포함하는 정책에 대해 정책 요약 생성을 지원하지 않습니다.

    • Principal

    • NotPrincipal

    • NotResource

  • 정책 권한 없음 - 정책이 유효한 권한을 제공하지 않을 경우 정책 요약을 생성할 수 없습니다. 예를 들어 정책이 요소 "NotAction": "*"과 함께 단일 명령문을 포함하는 경우 이 정책은 "모든 작업"(*)을 제외한 모든 작업에 대한 액세스 권한을 부여합니다. 즉 어떤 작업에 대해서도 Deny 또는 Allow 액세스 권한을 부여하지 않습니다.

    참고

    NotPrincipal, NotAction, NotResource 등의 이러한 정책 요소를 사용할 때는 주의해야 합니다. 정책 요소 사용에 대한 자세한 정보는 IAM JSON 정책 요소 참조 단원을 참조하십시오.

    일치하지 않는 서비스와 리소스를 제공하는 경우 유효한 권한을 제공하지 않는 정책을 생성할 수 있습니다. 이는 한 서비스의 작업과 다른 서비스의 리소스를 지정하는 경우에 발생할 수 있습니다. 이 경우에는 정책 요약이 나타납니다. 요약의 리소스 열에 다른 서비스의 리소스를 포함할 수 있는 경우에만 문제가 있다는 표시가 나타납니다. 이 열에 일치하지 않는 리소스가 포함되어 있으면 정책에 오류가 있는지 검토해야 합니다. 정책을 더 잘 이해하려면 항상 정책 시뮬레이터로 테스트합니다.

정책 요약에 인식할 수 없는 서비스, 작업 또는 리소스 유형 포함됨

IAM 콘솔에서 정책 요약에 경고 기호( )가 있으면 정책 요약에 인식할 수 없는 서비스, 작업 또는 리소스 유형이 포함되었을 수 있습니다. 정책 요약 내의 경고에 대해 알아보려면 정책 요약(서비스 목록)을 참조하십시오.

참고

IAM은 정책 요약을 지원하는 서비스의 이름, 작업 및 리소스 유형을 검토합니다. 그러나 존재하지 않는 리소스 값이나 조건이 정책 요약에 포함될 수 있습니다. 항상 정책 시뮬레이터로 정책을 테스트합니다.

정책에 인식할 수 없는 서비스, 작업 또는 리소스 유형이 포함되는 경우 다음 오류 중 하나가 발생한 것입니다.

  • 미리 보기 서비스 - 미리 보기에 있는 서비스는 정책 요약을 지원하지 않습니다.

  • 사용자 지정 서비스 - 사용자 지정 서비스는 정책 요약을 지원하지 않습니다.

  • 서비스가 요약을 지원하지 않음 - 정책 요약을 지원하지 않는 정식 버전(GA) 서비스가 정책에 포함되어 있으면 서비스가 정책 요약 테이블의 알 수 없는 서비스(Unrecognized services) 섹션에 포함됩니다. 일반적으로 사용할 수 있는 서비스는 공개적으로 출시된 서비스이며 프리뷰 또는 사용자 지정 서비스가 아닙니다. 인식할 수 없는 서비스가 정식 버전이고 이름을 올바르게 입력한 경우에는 서비스에서 IAM 정책 요약을 지원하지 않습니다. GA 서비스에 대한 정책 요약 지원을 요청하는 방법을 알아보려면 서비스가 IAM 정책 요약을 지원하지 않음을 참조하십시오.

  • 작업이 요약을 지원하지 않음 - 지원되지 않는 작업과 함께 지원되는 서비스가 정책에 포함되어 있으면 작업이 서비스 요약 테이블의 알 수 없는 작업(Unrecognized actions) 섹션에 포함됩니다. 서비스 요약 내의 경고에 대해 알아보려면 서비스 요약(작업 목록)을 참조하십시오.

  • 리소스 유형이 요약을 지원하지 않음 - 정책에 지원되지 않는 리소스 유형을 가진 지원되는 작업이 포함된 경우, 서비스 요약 테이블의 알 수 없는 리소스 유형(Unrecognized resource types) 섹션에 리소스가 포함됩니다. 서비스 요약 내의 경고에 대해 알아보려면 서비스 요약(작업 목록)을 참조하십시오.

  • 오타 – AWS는 정책 검증의 일환으로 JSON이 구문적으로 올바른지, 정책에 오타 또는 기타 오류가 있는지 확인합니다. 모범 사례는 기존 정책을 열고 정책 검증 권장 사항을 검토하고 해결하는 것입니다.

서비스가 IAM 정책 요약을 지원하지 않음

정식 버전(GA) 서비스 또는 작업이 IAM 정책 요약 또는 시각적 편집기에서 인식되지 않으면 서비스가 이러한 기능을 지원하지 않을 수 있습니다. 일반적으로 사용할 수 있는 서비스는 공개적으로 출시된 서비스이며 프리뷰 또는 사용자 지정 서비스가 아닙니다. 인식할 수 없는 서비스를 일반적으로 사용할 수 있고 이름을 올바르게 입력한 경우 서비스는 이러한 기능을 지원하지 않습니다. 지원되지 않는 작업과 함께 지원되는 서비스가 정책에 포함되어 있으면 서비스가 IAM 정책 요약을 완전히 지원하지 않습니다.

서비스에서 IAM 정책 요약 또는 시각적 편집기 지원을 추가하도록 요청하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 지원되지 않는 서비스가 포함된 정책을 찾습니다.

    • 그 정책이 관리형 정책인 경우, 탐색 창에서 정책을 선택합니다. 정책 목록에서 보려는 정책의 이름을 선택합니다.

    • 사용자에게 연결된 인라인 정책인 경우, 탐색 창에서 사용자를 선택합니다. 사용자 목록에서 정책을 보려는 사용자의 이름을 선택합니다. 사용자에 대한 정책 테이블에서 보려는 정책 요약의 헤더를 확장합니다.

  3. 왼쪽의 AWS Management Console 바닥글에서 의견을 선택합니다. Tell us about your experience(귀하의 작업 환경에 대해 말씀해 주십시오) 상자에 I request that the <ServiceName> service add support for IAM policy summaries and the visual editor를 입력하십시오. 요약 지원을 바라는 서비스가 두 개 이상인 경우 I request that the <ServiceName1>, <ServiceName2>, and <ServiceName3> services add support for IAM policy summaries and the visual editor라고 입력합니다

서비스에서 누락된 작업에 대한 IAM 정책 요약 지원을 추가하도록 요청하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 지원되지 않는 서비스가 포함된 정책을 찾습니다.

    • 그 정책이 관리형 정책인 경우, 탐색 창에서 정책을 선택합니다. 정책 목록에서 보려는 정책의 이름을 선택합니다.

    • 사용자에게 연결된 인라인 정책인 경우, 탐색 창에서 사용자를 선택합니다. 사용자 목록에서 정책을 보려는 사용자의 이름을 선택합니다. 사용자에 대한 정책 표에서 보려는 정책의 이름을 선택하여 정책 요약을 펼칩니다.

  3. 정책 요약에서 지원되지 않는 작업을 포함하는 서비스의 이름을 선택합니다.

  4. 왼쪽의 AWS Management Console 바닥글에서 의견을 선택합니다. Tell us about your experience(귀하의 작업 환경에 대해 말씀해 주십시오) 상자에 I request that the <ServiceName> service add IAM policy summary and the visual editor support for the <ActionName> action를 입력하십시오. 지원되지 않는 작업을 두 개 이상 보고하는 경우 I request that the <ServiceName> service add IAM policy summary and the visual editor support for the <ActionName1>, <ActionName2>, and <ActionName3> actions라고 입력합니다

다른 서비스에 누락된 작업을 포함하도록 요청하려면 마지막 세 단계를 반복합니다.

정책이 필요한 권한을 부여하지 않음

사용자, 그룹, 역할 또는 리소스에 권한을 할당하려면 권한을 정의하는 문서인 정책을 생성해야 합니다. 정책 문서에는 다음 요소가 포함됩니다.

  • 효과 - 정책에서 액세스를 허용하는지 또는 거부하는지 여부

  • 작업 - 정책에서 허용하거나 거부하는 작업 목록

  • 리소스 - 작업이 발생할 수 있는 리소스 목록

  • 조건(선택 사항) - 정책에서 권한을 부여하는 상황

이러한 요소와 기타 정책 요소에 대한 자세한 정보는 IAM JSON 정책 요소 참조 단원을 참조하십시오.

액세스 권한을 부여하려면 정책이 지원되는 리소스를 가진 작업을 정의해야 합니다. 정책에 조건도 있는 경우 이 조건은 전역 조건 키를 포함해야 하거나, 작업에 적용해야 합니다. 작업에서 어떤 리소스를 지원하는지 확인하려면 해당 서비스의 AWS 설명서를 참조하십시오. 작업에서 지원되는 조건을 알아보려면 AWS 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하세요.

정책에서 권한을 부여하지 않는 작업, 리소스 또는 조건을 정의하는지 확인하려면 https://console.aws.amazon.com/iam/에서 IAM 콘솔을 사용하여 해당 정책의 정책 요약을 보세요. 정책 요약을 사용하여 정책의 문제를 식별하고 수정할 수 있습니다.

IAM 정책에 정의되었는데도 요소가 권한을 부여하지 않는 몇 가지 이유는 다음과 같습니다.

경고를 포함하는 정책 요약의 예를 보려면 정책 요약(서비스 목록) 단원을 참조하십시오.

적용 가능한 리소스 없이 작업이 정의된 경우

아래 정책은 모든 ec2:Describe* 작업과 특정 리소스를 정의합니다. 이러한 작업 중에서 리소스 수준 권한을 지원하는 작업이 없기 때문에 어떤 ec2:Describe 작업도 부여되지 않습니다. 리소스 수준 권한이란 작업이 정책의 Resource 요소에 있는 ARN을 사용하여 리소스를 지원함을 의미합니다. 작업이 리소스 수준 권한을 지원하지 않는 경우에는 정책의 이 명령문에서 * 요소에 와일드카드(Resource)를 사용해야 합니다. 어떤 서비스가 리소스 수준 권한을 지원하는지 알아보려면 단원을 참조하세요AWS IAM으로 작업하는 서비스

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "arn:aws:ec2:us-east-2:ACCOUNT-ID:instance/*" }] }

이 정책은 어떤 권한도 제공하지 않으며, 정책 요약에는 다음 오류가 포함됩니다.

This policy does not grant any permissions. To grant access, policies must have an action that has an applicable resource or condition.

정책을 수정하려면 * 요소에 Resource를 사용해야 합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }] }

적용 가능한 작업 없이 리소스가 정의된 경우

아래 정책은 Amazon S3 버킷 리소스를 정의하지만, 해당 리소스에서 수행할 수 있는 S3 작업을 포함하지 않습니다. 이 정책은 또한 모든 Amazon CloudFront 작업에 대한 전체 액세스 권한을 부여합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": "cloudfront:*", "Resource": [ "arn:aws:cloudfront:*", "arn:aws:s3:::examplebucket" ] }] }

이 정책은 모든 CloudFront 작업에 대한 권한을 제공합니다. 하지만 정책에서 S3 작업을 정의하지 않고 S3 examplebucket 리소스를 정의하기 때문에 정책 요약에 다음 경고가 표시됩니다.

This policy defines some actions, resources, or conditions that do not provide permissions. To grant access, policies must have an action that has an applicable resource or condition.

이 정책을 수정하여 S3 버킷 권한을 제공하려면 버킷 리소스에서 수행할 수 있는 S3 작업을 정의해야 합니다.

{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Action": [ "cloudfront:*", "s3:CreateBucket", "s3:ListBucket*", "s3:PutBucket*", "s3:GetBucket*" ], "Resource": [ "arn:aws:cloudfront:*", "arn:aws:s3:::examplebucket" ] }] }

또는 이 정책을 수정하여 CloudFront 권한만 제공하려면 S3 리소스를 제거합니다.

적용 가능한 작업 없이 조건이 정의된 경우

아래 정책은 S3 접두사가 custom이고 버전 ID가 1234일 경우 모든 S3 리소스에 대해 2개의 Amazon S3 작업을 정의합니다. 하지만 s3:VersionId 조건 키가 객체 버전 태그 지정에 사용되었으며, 정의된 버킷 작업이 이 조건 키를 지원하지 않습니다. 작업에서 지원되는 조건을 알아보려면 AWS 서비스에 사용되는 작업, 리소스 및 조건 키를 참조하고 조건 키에 대한 서비스 설명서를 보세요.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": [ "custom" ], "s3:VersionId": [ "1234" ] } } } ] }

이 정책은 버킷 이름에 s3:ListBucketVersions 접두사가 있는 경우 s3:ListBucket 작업 및 custom 작업에 대한 권한을 제공합니다. 하지만 정의된 작업 중 s3:VersionId 조건을 지원하는 작업이 없기 때문에 정책 요약에 다음 오류가 표시됩니다.

This policy does not grant any permissions. To grant access, policies must have an action that has an applicable resource or condition.

이 정책을 수정하여 S3 객체 버전 태그 지정을 사용하려면, s3:VersionId 조건 키를 지원하는 S3 작업을 정의해야 합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket", "s3:GetObjectVersion" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": [ "custom" ], "s3:VersionId": [ "1234" ] } } } ] }

이 정책은 정책의 모든 작업과 조건에 대한 권한을 제공합니다. 하지만 하나의 작업이 모든 조건을 충족하는 경우가 없기 때문에 어떤 권한도 제공하지 않습니다. 이렇게 하는 대신, 적용할 조건을 갖는 작업만 각각 포함하도록 두 개의 구문을 별도로 작성해야 합니다.

이 정책을 수정하려면 두 개의 구문을 작성합니다. 첫째 구문에는 s3:prefix 조건을 지원하는 작업이 포함되고, 둘째 구문에는 s3:VersionId 조건을 지원하는 작업이 포함됩니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListBucketVersions", "s3:ListBucket" ], "Resource": "*", "Condition": { "StringEquals": { "s3:prefix": "custom" } } }, { "Effect": "Allow", "Action": "s3:GetObjectVersion", "Resource": "*", "Condition": { "StringEquals": { "s3:VersionId": "1234" } } } ] }

정책 관리 문제 해결

정책 관리와 관련된 문제를 진단하고 해결할 수 있습니다.

IAM 계정에서 정책 연결 또는 분리

일부 AWS 관리형 정책은 서비스에 연결되어 있습니다. 이러한 정책은 해당 서비스에 대한 서비스 연결 역할에서만 사용됩니다. IAM 콘솔에서 정책의 요약 페이지를 보면 페이지에 정책이 서비스에 연결되어 있음을 나타내는 배너가 포함되어 있습니다. 이 정책을 IAM 내의 사용자, 그룹 또는 역할에 연결할 수 없습니다. 서비스에 대한 서비스 연결 역할을 생성하면 이 정책이 새 역할에 자동으로 연결됩니다. 정책이 필요하므로 서비스 연결 역할에서 정책을 분리할 수 없습니다.

작업 기반 IAM 자격 증명 관련 정책 변경

작업에 따라 IAM 자격 증명(사용자, 그룹 및 역할)에 대한 정책을 업데이트할 수 있습니다. 이렇게 하려면 CloudTrail 이벤트 기록(Event history)에서 계정 이벤트를 봅니다. CloudTrail 이벤트 로그에는 정책의 권한을 변경하는 데 사용할 수 있는 자세한 이벤트 정보가 포함되어 있습니다. 사용자 또는 역할이 AWS에서 작업을 수행하려 하고 요청이 거부된 것을 알 수 있습니다. 이러한 경우 사용자 또는 역할에 작업을 수행할 권한이 있어야 하는지 여부를 고려할 수 있습니다. 권한을 부여해야 하는 경우 해당 작업과 이들이 액세스하려고 했던 리소스의 ARN도 정책에 추가할 수 있습니다. 또는, 사용자나 역할에 사용하지 않는 권한이 있는 경우 정책에서 그러한 권한을 제거하는 것을 고려할 수도 있습니다. 정책은 필요한 작업을 수행하는 데 필요한 최소 권한만 부여해야 합니다. CloudTrail 사용에 관한 자세한 내용은 AWS CloudTrail사용 설명서CloudTrail 콘솔에서 CloudTrail 이벤트 보기를 참조하세요.

JSON 정책 문서 문제 해결

JSON 정책 문서와 관련된 문제를 진단하고 해결할 수 있습니다.

정책 검증

JSON 정책을 생성 또는 편집할 때 IAM은 효과적인 정책을 생성하는 데 도움이 되는 정책 유효성 검사를 수행할 수 있습니다. IAM은 JSON 구문 오류를 식별하는 반면, IAM Access Analyzer는 정책을 더욱 구체화하는 데 도움이 되는 권장 사항과 함께 추가 정책 검사를 제공합니다. 정책 검증에 대한 자세한 내용은 IAM 정책 검증 섹션을 참조하세요. IAM Access Analyzer 정책 검사기 및 실행 가능한 권장 사항에 대한 자세한 내용은 IAM Access Analyzer 정책 검증을 참조하세요.

JSON 편집기에서 정책 검증에 대한 권한 없음

AWS Management Console에서 IAM Access Analyzer 정책 검증 결과를 볼 수 있는 권한이 없는 경우 다음 오류가 나타날 수 있습니다.

You need permissions. You do not have the permissions required to perform this operation. Ask your administrator to add permissions.

이 오류를 해결하려면 관리자에게 access-analyzer:ValidatePolicy 권한을 추가해 달라고 요청합니다.

JSON 정책 객체가 둘 이상인 경우

IAM 정책은 단 하나의 JSON 객체로 구성되어야 합니다. 객체는 중괄호 { }로 묶어 표시합니다. 대괄호 [ ] 안에 중괄호 { }를 추가로 삽입하여 JSON 객체 내에 다른 객체를 중첩시킬 수도 있지만 정책에 따라 중괄호 { }를 묶는 대괄호 [ ]는 하나로 제한됩니다. 다음 예제는 최상위 레벨에 객체 2개가 추가되었기 때문에 올바르지 않습니다(빨간색으로 표시).

{ "Version": "2012-10-17", "Statement": { "Effect":"Allow", "Action":"ec2:Describe*", "Resource":"*" } } { "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } }

하지만 올바른 정책 문법을 사용하여 위 예제의 의도를 만족하는 방법도 있습니다. 2개의 정책 객체에 Statement 요소를 각각 추가하지 않고 두 블록을 단일 Statement 요소로 결합하면 됩니다. 그러면 다음 예제와 같이 Statement 요소가 두 객체의 배열을 값으로 인식합니다(굵은체로 표시).

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":" *" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } ] }

JSON Statement 요소가 둘 이상인 경우

이 오류는 처음에는 위 오류의 변형으로 보일 수도 있습니다. 하지만 구문으로 보면 다른 유형의 오류입니다. 다음 예제에는 중괄호 { } 한 쌍이 최상위 레벨로 정책 객체 하나만 표시하고 있습니다. 하지만 객체에 포함된 Statement 요소는 2개입니다.

IAM 정책에서는 콜론 왼쪽의 이름(Statement)과 오른쪽의 값으로 구성된 Statement 요소 1개만 추가할 수 있습니다. 그리고, Statement 요소의 값은 Effect 요소 1개와 Action 요소 1개, 그리고 Resource 요소 1개가 중괄호 { }로 묶여 구성된 객체가 되어야 합니다. 다음 예제는 정책 객체에 Statement 요소가 2개 포함되었기 때문에 올바르지 않습니다(빨간색으로 표시).

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "ec2:Describe*", "Resource": "*" }, "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } }

값 객체는 여러 값 객체의 배열일 수 있습니다. 이 문제를 해결하려면, 다음 예제와 같이 객체 배열을 사용하여 2개의 Statement 요소를 하나로 결합합니다(굵은체로 표시).

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ec2:Describe*", "Resource":"*" }, { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket/*" } ] }

Statement 요소 값이 객체 배열이 되었습니다. 이제 위 예제의 배열은 두 객체로 구성되며, 각 객체 자체가 정확한 Statement 요소 값으로 인식됩니다. 배열을 구성하는 각 객체는 쉼표로 구분합니다.

JSON Statement 요소의 Effect, Action 또는 Resource 요소가 둘 이상인 경우

Statement 이름/값 쌍에서 값 부분을 보면 객체가 Effect 요소 1개, Action 요소 1개, 그리고 Resource 요소 1개로 구성되어야 합니다. 다음은 Effect의 값 객체에 Statement 요소가 2개이기 때문에 잘못된 정책입니다.

{ "Version": "2012-10-17", "Statement": { "Effect": "Deny", "Effect": "Allow", "Action": "ec2:* ", "Resource": "*" } }
참고

정책 엔진은 새로운 정책이나 편집된 정책에서 이러한 오류를 허용하지 않습니다. 하지만 정책 엔진은 엔진 업데이트 이전에 저장된 정책은 계속 허용합니다. 오류와 관련한 기존 정책 특성은 아래와 같습니다.

  • Effect 요소가 다수일 때: 마지막 Effect 요소만 따릅니다. 나머지 요소는 모두 무시됩니다.

  • Action 요소가 다수일 때: Action 요소가 모두 내부적으로 결합되어 마치 단일 목록인 것처럼 처리됩니다.

  • Resource 요소가 다수일 때: Resource 요소가 모두 내부적으로 결합되어 마치 단일 목록인 것처럼 처리됩니다.

정책 엔진은 구문 오류 정책을 저장하도록 허용하지 않습니다. 정책을 저장하기 전에 오류를 정정해야 합니다.정책에 대한 모든 정책 검증 권장 사항을 검토하는 것이 좋습니다.

모든 경우 해결책은 잘못 추가된 요소를 삭제하는 것입니다. Effect 요소일 때는 삭제 방법이 간단합니다. 앞의 예제에서 Amazon EC2 인스턴스에 대한 권한을 거부하고 싶다면 다음과 같이 정책에서 "Effect": "Allow", 라인을 삭제하면 됩니다.

{ "Version": "2012-10-17", "Statement": { "Efect": "Deny", "Action": "ec2:* ", "Resource": "*" } }

하지만 중복 요소가 Action 또는 Resource인 경우에는 해결 방법이 더욱 복잡합니다. 권한을 허용(또는 거부)하려는 작업이 다수일 수도 있고, 여러 리소스에 대한 액세스를 제어할 수도 있기 때문입니다. 예를 들어 다음 예제는 Resource 요소가 여러 개이기 때문에 올바르지 않습니다(빨간색으로 표시).

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": "arn:aws:s3:::my-bucket", "Resource": "arn:aws:s3:::my-bucket/*" } }

Statement 요소의 값 객체에서 필요한 요소는 각각 한 번만 표시할 수 있습니다. 해결책은 객체 배열에 값을 하나씩만 지정하는 것입니다. 다음 예제는 배열을 값 객체로 사용하여 2개의 리소스 요소를 1개의 Resource 요소로 결합함으로써 이를 설명합니다(굵은체로 표시).

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::my-bucket", "arn:aws:s3:::my-bucket/*" ] } }

JSON 버전 요소 누락

Version 정책 요소는 정책 버전과 다릅니다. Version 정책 요소는 정책 내에서 사용되며 정책 언어의 버전을 정의합니다. 반면에 정책 버전은 IAM에서 고객 관리형 정책을 변경할 때 생성됩니다. 변경된 정책은 기존 정책을 덮어쓰지 않습니다. 대신 IAM에서 관리형 정책의 새 버전을 만듭니다. Version 정책 요소에 대한 자세한 정보는 IAM JSON 정책 요소: Version을 참조하십시오. 정책 버전에 대한 자세한 정보는 IAM 정책 버전 관리 단원을 참조하십시오.

AWS 기능이 점차 진화하면서 IAM 정책에도 이를 지원할 수 있도록 새로운 기능이 추가되었습니다. 간혹 정책 구문이 업데이트될 때마다 새로운 버전 번호가 추가됩니다. 정책 문법에서 최신 기능을 사용하는 경우에는 정책 구문 분석 엔진에게 사용 버전을 알려주어야 합니다. 기본 정책 버전은 "2008-10-17"입니다. 이때 이후 추가된 정책 기능을 사용하려면 원하는 기능을 지원하는 버전 번호를 지정해야 합니다. 따라서 항상 최신 정책 구문 버전 번호("Version": "2012-10-17")를 추가할 것을 권장합니다. 예를 들어 다음 정책은 리소스에 대해 ARN의 ${...} 변수를 사용하기 때문에 올바르지 않습니다. 정책 변수를 지원하는 정책 구문 버전을 지정하는 데 실패합니다(red에서 호출).

{ "Statement": { "Action": "iam:*AccessKey*", "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/${aws:username}" } }

다음과 같이 정책 상단에 정책 변수를 지원하는 첫 번째 IAM API 버전인 2012-10-17 값과 함께 Version 요소를 추가하면 이 문제가 해결됩니다(굵은 글씨체로 표시).

{ "Version": "2012-10-17", "Statement": { "Action": "iam:*AccessKey*", "Effect": "Allow", "Resource": "arn:aws:iam::123456789012:user/${aws:username}" } }