AWS Identity and Access Management(IAM) 정책이 오류를 반환하거나 IAM 정책이 예상대로 작동하지 않습니다. IAM 정책 관련 문제를 해결하려면 어떻게 해야 합니까?

IAM 정책 관련 문제를 해결하려면 다음을 수행합니다.

1.   오류 메시지 확인 및 API 호출자 식별

2.   IAM 정책 평가

3.   예제 문제 해결

1. 오류 메시지 확인 및 API 호출자 식별

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

예제 오류 메시지 API 호출자 해당하는 API 해당하는 리소스 시기
A: "An error occurred (UnauthorizedOperation) when calling the DeleteKeyPair operation: You are not authorized to perform this operation." 알 수 없음 DeleteKeyPair 알 수 없음 오류 발생 시
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/test

AssumeRole

arn: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

알 수 없음

오류 발생 시

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

  1. AWS Management Console을 엽니다.
  2. 페이지 오른쪽 위에서 계정 정보 옆의 화살표를 선택합니다.
  3. IAM 역할로 로그인한 경우 역할 이름 옆의 화살표를 선택하여 소스 자격 증명, 계정 정보, 대상 역할 이름 및 계정 정보를 확인합니다.
  4. 연합된 사용자로 로그인한 경우 [연합된 사용자] 아래에 IAM 역할이 나열됩니다.

AWS CLI(AWS 명령줄 인터페이스) 명령 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

2. IAM 정책 평가

API가 연결된 정책 중 하나에서 명시적으로 허용되어 있고 연결된 정책에서 명시적으로 거부되지 않음

연결된 IAM 정책을 확인하여 API 호출자에게 올바른 권한이 부여되었는지 확인합니다. 자세한 내용은 요청의 허용 또는 거부 결정을 참조하십시오.

API 호출자에게 올바른 IAM 권한이 있는지 확인한 후 리소스 수준 권한을 검토합니다. API 작업이 리소스 수준 권한을 지원하지 않는 경우 IAM 문의 리소스 요소에 와일드카드(*)를 지정합니다. 정책 요약을 확인하여 리소스 수준 권한 문제를 해결할 수도 있습니다. 정책 요약을 보려면 다음을 수행합니다.

  1. AWS Identity and Access Management 콘솔을 엽니다.
  2. 탐색 창에서 [Policies]를 선택합니다.
  3. 정책 이름 옆의 화살표를 선택하여 정책 세부 정보 보기를 확장합니다.
  4. [Policy summary]를 선택합니다.

다음 예제 정책에서 정책은 StartInstances에 대한 권한만 제공하며 DeleteSubnet 권한에 대한 권한은 부여하지 않습니다. DeleteSubnet 작업은 리소스 수준 권한을 지원하지 않으므로 리소스 요소에서 ARN(Amazon 리소스 이름)을 지정할 수 없습니다. 따라서 "Resource": "*"와 같이 별표를 대신 사용합니다.

예제 정책  

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PermissionNotGrantedAsAPIDoesNotSupportResourceLevelPermission",
            "Effect": "Allow",
            "Action": "ec2:DeleteSubnet",
            "Resource": "arn:aws:ec2:us-east-1:123456789012:subnet/subnet-254cf47c"
        },
        {
            "Sid": "PermissionGrantedAsAPISupportResourceLevelPermission",
            "Effect": "Allow",
            "Action": "ec2:StartInstances",
            "Resource": "arn:aws:ec2:us-east-1:123456789012:instance/i-0e58cfa95b858b1ce"
        }
    ]
}

리소스 수준 권한을 확인한 후 IAM 정책에 사용된 조건을 검토합니다. 글로벌 조건 키는 액세스 제어에 대해 IAM을 지원하는 모든 AWS 서비스와 함께 사용할 수 있으며 서비스별 조건 키는 특정 서비스에서만 사용할 수 있습니다(예: EC2 조건은 EC2 API 작업에 사용 가능). 자세한 내용은 Actions, Resources, and Condition Context Keys for AWS Services를 참조하십시오. 다수의 조건을 사용하는 경우 다수의 조건 값을 참조하십시오.

다음 정책 예제에서 조건은 IAM API 요청이 IAM 사용자 "admin"에 의해 호출되고 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"
                    ]
                }
            }
        }
    ]
}

권한에 영향을 줄 수 있는 서비스별 제어를 검토합니다. 예를 들어 VPC 엔드포인트 정책과 조직 SCP(서비스 제어 정책)는 권한 평가에 영향을 줄 수 있습니다. 자세한 내용은 VPC 엔드포인트로 서비스 액세스 제어서비스 제어 정책 정보를 참조하십시오.

3. 예제 문제 해결

이 평가 방법을 사용하여 다양한 AWS 서비스의 권한 문제와 관련하여 표시될 수 있는 오류 메시지의 원인을 식별할 수 있습니다. 자세한 내용은 다음의 일반적인 오류 메시지 및 문제 해결 단계를 참조하십시오.

예제 오류 메시지 A:

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

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

예제 오류 메시지 B:

이 오류 메시지에는 API 이름, API 호출자 및 대상 리소스가 포함됩니다. API를 호출한 IAM 자격 증명에 올바른 리소스 액세스 권한이 있는지 확인합니다. 이전 평가 방법을 사용하여 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 작업이 동일한 허용 문에 있는 경우 허용 문에 지정된 모든 조건이 ec2:AssociateIamInstanceProfile 및 iam:PassRole API 작업에서 지원되고 조건이 일치하는지 확인합니다.
  4. ec2:AssociateIamInstanceProfile 및 iam:PassRole API 작업이 개별 허용 문에 있는 경우 각 허용 문에 지정된 모든 조건이 해당하는 작업에서 지원되고 조건이 일치하는지 확인합니다.

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시된 날짜: 2018년 6월 8일