IAM 정책을 적용할 때 액세스 거부 또는 승인되지 않은 작업 오류를 해결하려면 어떻게 해야 하나요?

7분 분량
0

AWS 리소스에서 작업을 수행하려고 하는데 "access denied" 또는 "unauthorized operation" 오류가 발생했습니다. 이러한 권한 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

AWS Identity and Access Management(IAM) 정책 관련 문제를 해결하려면 다음을 수행하세요.

해결 방법

API 호출자를 식별 및 오류 메시지를 이해

중요:

IAM 정책을 검토하기 전에 API 호출이 올바른 IAM 엔터티를 대신해 수행되었는지 확인합니다. 오류 메시지에 호출자 정보가 포함되지 않은 경우, 다음 단계에 따라 API 호출자를 식별합니다.

  1. AWS Management Console을 엽니다.
  2. 페이지의 오른쪽 상단에서 계정 정보 옆에 있는 화살표를 선택합니다.
  3. IAM 역할로 로그인한 경우, 수임된 역할의 이름은 "현재 활성 계정"을 참조하고 계정 ID의 경우 "계정 ID"를 참조하세요.
  4. 페더레이션 사용자로 로그인한 경우, 페더레이션 역할 이름 및 역할 세션 이름은 "페더레이션 사용자"를 참조하세요.

-또는-

AWS CLI 명령 get-caller-identity를 사용하여 API 호출자를 식별합니다. 또한 AWS CLI 명령을 --debug 플래그와 함께 사용하여 다음과 유사한 출력에서 보안 인증 정보의 소스를 식별할 수 있습니다.

2018-03-13 16:23:57,570 - MainThread - botocore.credentials - INFO - Found credentials in shared credentials file: ~/.aws/credentials

IAM 정책 권한 확인

연결된 IAM 정책을 확인하여 API 호출자에게 필요한 권한이 부여되었는지 확인합니다. 자세한 내용을 보려면 계정 내에서 요청의 허용 또는 거부 여부 결정을 참조하세요.

AWS Organizations SCP 평가

AWS 계정이 AWS Organization의 일부인 경우, SCP를 계층 수준에서 적용하여 작업을 허용하거나 거부할 수 있습니다. SCP 권한은 AWS 계정의 모든 IAM 엔터티에 상속됩니다. API 호출자가 SCP에서 명시적으로 거부되지 않았는지 확인합니다.

호출되는 API가 호출자에게 영향을 주는 조직 SCP 정책에서 명시적으로 거부되지 않았는지 확인합니다.

자격 증명 기반 및 리소스 기반 정책 검토

API 호출자에 대한 IAM 엔터티 자격 증명 기반 정책에 명시적인 허용 문이 있는지 확인합니다. 그런 다음, API가 리소스 수준 권한을 지원하는지 확인합니다. API 호출자가 리소스 수준 권한을 지원하지 않는 경우, IAM 정책 구문의 리소스 요소에 와일드카드 **"*"**가 지정되어 있는지 확인합니다.

리소스 기반 정책을 AWS 서비스 내의 리소스에 연결하여 액세스를 제공할 수 있습니다. 자세한 내용을 보려면 자격 증명 기반 정책 및 리소스 기반 정책을 참조하세요.

IAM 정책 요약을 보려면 다음을 수행하세요.

  1. IAM 콘솔을 엽니다.
  2. 탐색 창에서 정책을 선택합니다.
  3. 정책 이름 옆의 화살표를 선택하여 정책 세부 정보 보기를 확장합니다.

다음 예에서는 모든 Amazon Elastic Compute Cloud(Amazon EC2) API 작업이 리소스 수준 권한을 지원하는 것은 아니므로 정책이 작동하지 않는 것을 보여줍니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SorryThisIsNotGoingToWorkAsExpected",
            "Effect": "Allow",
            "Action": ["ec2:*"],
            "Resource": "arn:aws:ec2:us-east-1:accountid:instance/*"
        }
    ]
}

run-instances AWS CLI 명령을 사용하여 us-east-1리전에서 Amazon EC2 인스턴스를 시작하려고 하는 IAM 사용자는 다음과 유사한 오류 메시지를 수신합니다.

"An error occurred (UnauthorizedOperation) when calling the RunInstances operation: You are not authorized to perform this operation. Encoded authorization failure message:…"

이 문제를 해결하려면, 리소스를 와일드카드 **"*"**로 변경합니다. 이는 Amazon EC2가 부분 리소스 수준 권한만 지원하기 때문입니다.

권한 부여 실패 메시지를 디코딩하여 이 실패의 원인에 대한 자세한 내용을 보려면, 다음과 유사한 DecodeAuthorizationMessage API 작업을 사용합니다.

$ aws sts decode-authorization-message --encoded-message <encoded-message-from-the-error>

권한 경계 확인

IAM 엔터티에 권한 경계가 연결되어 있는 경우, 경계는 엔터티의 최대 권한을 설정합니다.

세션 정책 평가

API 호출자가 IAM 역할 또는 페더레이션 사용자인 경우, 세션 기간 동안 세션 정책이 전달됩니다. 세션에 대한 권한은 세션을 생성하는 데 사용된 IAM 엔터티의 자격 증명 기반 정책 및 세션 정책의 교차점입니다. API 호출이 IAM 정책 및 엔터티에 존재하는지 확인합니다.

정책의 조건 키가 API에서 지원되는지 확인하기

AWS 조건 키는 AWS에 대한 API 요청의 요소를 IAM 정책에 지정된 키 값과 비교하는 데 사용할 수 있습니다. 조건 키는 전역 조건 키일 수도 있고 AWS 서비스에 의해 정의될 수도 있습니다. AWS 서비스별 조건 키는 해당 서비스 내에서만 사용할 수 있습니다(예: EC2 API 작업의 EC2 조건). 자세한 내용을 보려면, AWS 서비스에 대한 작업, 리소스 및 조건 컨텍스트 키를 참조하세요.

조건 요소는 여러 조건을 포함할 수 있으며, 각 조건 블록 내에 여러 키 값 쌍을 포함할 수 있습니다. 자세한 내용을 보려면 여러 키 또는 값으로 조건 생성을 참조하세요.

이 정책 예제에서는, IAM 사용자 관리자가 IAM API 요청을 호출하고 소스 IP 주소가 1.1.1.0/24 또는 2.2.2.0/24인 경우 조건 요소가 일치합니다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iam:*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:username": "admin"
        },
        "IpAddress": {
          "aws:SourceIp": [
            "1.1.1.0/24",
            "2.2.2.0/24"
          ]
        }
      }
    }
  ]
}

IAM 정책 오류 및 문제 해결 예시

다음 예제를 참조하여, 오류 메시지, API 호출자, API 및 호출되는 리소스를 식별합니다.

오류 메시지 예시API 호출자API리소스시간
A: "An error occurred (UnauthorizedOperation) when calling the DescribeInstances operation: You are not authorized to perform this operation."알 수 없음DescribeInstances알 수 없음오류 발생 시간
B: "An error occurred (AccessDenied) when calling the AssumeRole operation: User: arn:aws:iam::123456789012:user/test is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::123456789012:role/EC2-FullAccess"arn:aws:iam::123456789012:user/testAssumeRolearn:aws:iam::123456789012:role/EC2-FullAccess오류 발생 시간
C: "An error occurred (AccessDenied) when calling the GetSessionToken operation: Cannot call GetSessionToken with session credentials"알 수 없음GetSessionToken알 수 없음오류 발생 시간
D: "An error occurred (UnauthorizedOperation) when calling the AssociateIamInstanceProfile operation: You are not authorized to perform this operation. Encoded authorization failure message: ...."알 수 없음AssociateIamInstanceProfile알 수 없음오류 발생 시간

이 평가 방법을 사용할 경우, 다양한 AWS 서비스의 권한 문제로 인해 수신할 수 있는 오류 메시지의 원인을 파악할 수 있습니다. 자세한 내용을 보려면, 다음 오류 메시지 및 문제 해결 단계를 참조하세요.

오류 메시지 예시 A:

이 오류 메시지는 DescribeInstances API를 호출할 수 있는 권한이 없음을 나타냅니다.

이 문제를 해결하려면, 다음 단계를 수행합니다.

  1. API 호출자를 식별합니다.
  2. ec2:DescribeInstances API 작업이 거부 문에 포함되어 있지 않은지 확인합니다.
  3. ec2:DescribeInstances API 작업이 허용 문에 포함되어 있는지 확인합니다.
  4. 이 API 작업에 대해 지정된 리소스가 없는지 확인합니다. **참고:**이 API 작업은 리소스 수준 권한을 지원하지 않습니다.
  5. 허용 문에 지정된 모든 IAM 조건이 DescribeInstances 작업에서 지원되고 조건이 일치하는지 확인합니다.

자세한 내용을 보려면 DescribeInstanceStatus를 참조하세요.

오류 메시지 예시 B:

이 오류 메시지에는 API 이름, API 호출자 및 대상 리소스가 포함됩니다. API를 직접 호출한 IAM ID에 리소스에 대한 올바른 액세스 권한이 있는지 확인하세요. 이전 평가 방법을 사용하여 IAM 정책을 검토합니다.

이 오류를 해결하려면, 다음 단계에 따라 IAM 역할의 신뢰 정책을 확인하세요. EC2-FullAccess:

  1. arn:aws:iam::123456789012:user/test 또는 arn:aws:iam::123456789012:root가 신뢰 정책의 거부 문에 없는지 확인합니다.
  2. arn:aws:iam::123456789012:user/test 또는 arn:aws:iam::123456789012:root가 신뢰 정책의 허용 문에 있는지 확인합니다.
  3. 해당 허용 문에 지정된 모든 IAM 조건이 sts:AssumeRole API 동작에서 지원되고 일치하는지 확인합니다.

다음 단계에 따라 API 호출자(arn:aws:iam::123456789012:user/test)에 연결된 IAM 정책을 확인합니다.

  1. arn:aws:iam::123456789012:role/EC2-FullAccess가 sts:AssumeRole API 작업이 포함된 거부 문에 없는지 확인합니다.
  2. arn:aws:iam::123456789012:root가 신뢰 정책의 허용 문에 있는 경우, arn:aws:iam::123456789012:role/EC2-FullAccess가 sts:AssumeRole API 작업이 포함된 IAM 정책의 허용 문에 있는지 확인합니다.
  3. 허용 문에 지정된 모든 IAM 조건이 sts:AssumeRole API 작업에서 지원되고 일치하는지 확인합니다.

오류 메시지 예시 C:

이 오류 메시지는 get-session-token임시 자격 증명에서 지원되지 않음을 나타냅니다. 자세한 내용을 보려면 AWS STS API 작업 비교를 참조하세요.

오류 메시지 예시 D:

이 오류 메시지는 권한 부여 실패에 대한 세부 정보를 제공할 수 있는 인코딩된 메시지를 반환합니다. 오류 메시지를 디코딩하고 권한 실패에 대한 세부 정보를 얻으려면, DecodeAuthorizationMessage를 참조하세요. 오류 메시지를 디코딩한 후, API 호출자를 식별하고 리소스 수준 권한 및 조건을 검토합니다.

이 오류를 해결하려면, 다음 단계에 따라 IAM 정책 권한을 검토하세요.

  1. 오류 메시지가 API가 명시적으로 거부되었음을 나타내는 경우, 일치하는 문에서 ec2:AssociateIamInstanceProfile 또는 iam:PassRole API 작업을 제거합니다.
  2. ec2:AssociateIamInstanceProfile 및 iam:PassRole이 지원되는 올바른 리소스 대상이 포함된 허용 문에 있는지 확인합니다. 예를 들어, ec2:AssociateIamInstanceProfile API 작업의 리소스 대상이 EC2 인스턴스이고 iam:PassRole의 리소스 대상이 IAM 역할인지 확인합니다.
  3. ec2:AssociateIamInstanceProfile 및 iam:PassRole API actions API 작업이 동일한 허용 문에 있는 경우, 모든 조건이 ec2:AssociateIamInstanceProfile 및 iam:PassRole API action API 작업에서 지원되고 조건이 일치하는지 확인합니다.
  4. ec2:AssociateIamInstanceProfile 및 iam:PassRole API 작업이 개별 허용 문에 있는 경우, 각 허용 문의 모든 조건이 작업에서 지원되고 조건이 일치하는지 확인합니다.

자세한 내용을 보려면 정책 평가 로직계정 내에서 요청의 허용 또는 거부 여부 결정을 참조하세요.


관련 정보

IAM 정책 문제 해결

교차 계정 IAM 역할을 위임하는 중에 "AccessDenied" 또는 "Invalid information" 오류가 표시되는 이유는 무엇인가요?

IAM JSON 정책 요소 참조

댓글 없음