액세스 거부 오류 메시지 문제 해결
액세스 거부 오류 메시지 문제 해결
IAM에서 발생하는 access denied(액세스 거부) 오류를 찾아내고 진단하고 해결하는 방법을 정리한 문서예요. 명시적 거부와 암묵적 거부가 무엇인지, 임시 자격 증명 요청 시 거부가 나는 원인, 그리고 정책 유형별 오류 메시지 형식과 해결 방법을 다룬답니다.
출처: 문서
본문
다음 내용은 AWS Identity and Access Management(IAM)에서 access denied(액세스 거부) 오류를 찾아내고 진단하고 해결하는 데 도움을 주는 자료예요. 액세스 거부 오류는 AWS가 인증(권한 부여) 요청을 명시적 또는 암묵적으로 거부할 때 나타나요.
- 명시적 거부(explicit denial) 는 정책에 해당 AWS 작업에 대한
Deny문이 있을 때 발생해요. - 암묵적 거부(implicit denial) 는 적용되는
Deny문도 없고 적용되는Allow문도 없을 때 발생해요. IAM 정책은 프린시펄을 기본적으로 거부하기 때문에, 정책이 명시적으로 프린시펄의 작업 수행을 허용해야 해요. 그렇지 않으면 정책이 액세스를 암묵적으로 거부해요. 자세한 내용은 명시적 거부와 암묵적 거부의 차이를 참고하세요.
서비스나 리소스에 요청할 때는 여러 정책이 적용될 수 있어요. 오류 메시지에 지정된 정책 외에도 적용 가능한 모든 정책을 검토하세요.
- 동일한 정책 유형의 여러 정책이 요청을 거부하면, 액세스 거부 오류 메시지는 평가된 정책의 수를 명시하지 않아요.
- 여러 정책 유형이 인증 요청을 거부하면, AWS는 오류 메시지에 그중 하나의 정책 유형만 포함해요.
중요 AWS에 로그인하는 데 문제가 있나요? 본인의 사용자 유형에 맞는 올바른 AWS 로그인 페이지에 있는지 확인하세요. AWS 계정 루트 사용자(계정 소유자)라면 계정 생성 시 설정한 자격 증명으로 로그인할 수 있어요. IAM 사용자라면 계정 관리자가 로그인 자격 증명을 줄 수 있어요. 지원이 필요하면 이 페이지의 피드백 링크를 사용하지 마세요. 해당 양식은 AWS 문서 팀이 받는 것이지 지원 팀이 받는 게 아니에요. 대신 Contact Us 페이지에서 Still unable to log into your AWS account를 선택한 뒤 사용 가능한 지원 옵션 중 하나를 고르세요.
AWS 서비스에 요청했는데 "access denied"가 떠요
- 오류 메시지에 액세스를 거부한 정책의 유형과 Amazon Resource Name(ARN)이 포함되어 있는지 확인하세요. 그렇다면 지정된 정책에서 해당 작업에 대한
Deny문이 있는지 확인해요. 정책 유형은 제공됐지만 정책 ARN이 없다면, 그 정책 유형과 관련된 문제 해결에 집중하세요. 즉 지정된 유형의 정책에서 해당 작업에 대한Deny문이 있는지 확인하는 거예요. 오류 메시지에 액세스를 거부한 정책 유형이 언급되지 않으면, 이 섹션의 나머지 지침을 사용해 더 조사하세요. - 요청한 작업과 리소스를 호출할 수 있는 자격 증명 기반 정책 권한이 있는지 확인하세요. 조건이 설정되어 있다면 요청을 보낼 때 그 조건도 충족해야 해요. IAM 사용자·그룹·역할의 정책을 보거나 수정하는 방법은 IAM 정책 관리를 참고하세요.
- AWS Management Console이 작업을 수행할 권한이 없다는 메시지를 반환하면 관리자에게 도움을 요청하세요. 관리자가 로그인 자격 증명 또는 로그인 링크를 제공했을 거예요.
다음 예제 오류는 mateojackson IAM 사용자가 콘솔을 사용해 가상의 my-example-widget 리소스에 대한 세부 정보를 보려고 했지만 가상의 widgets:GetWidget 권한이 없을 때 발생하는 오류예요.
User: arn:aws:iam::123456789012:user/mateojackson is not authorized to perform: widgets:GetWidget on resource: my-example-widget
이 경우 Mateo는 관리자에게 자신의 정책을 업데이트해 widgets:GetWidget 작업을 사용해 my-example-widget 리소스에 액세스할 수 있게 해 달라고 요청해야 해요.
- Amazon S3, Amazon SNS, Amazon SQS처럼 리소스 기반 정책을 지원하는 서비스에 액세스하려고 하나요? 그렇다면 정책이 자신을 프린시펄로 지정하고 액세스를 부여하는지 확인하세요. 계정 내 서비스에 요청하는 경우 자격 증명 기반 정책이나 리소스 기반 정책이 권한을 부여할 수 있어요. 다른 계정의 서비스에 요청하는 경우 자격 증명 기반 정책과 리소스 기반 정책이 모두 권한을 부여해야 해요. 리소스 기반 정책을 지원하는 서비스를 보려면 IAM과 함께 작동하는 AWS 서비스를 참고하세요.
- 정책에 키-값 쌍의 조건이 있으면 주의 깊게 검토하세요. 예로는 aws:RequestTag/tag-key 글로벌 조건 키와 AWS KMS의
kms:EncryptionContext:encryption_context_key, 여러 서비스가 지원하는ResourceTag/tag-key조건 키가 있어요. 키 이름이 여러 결과와 일치하지 않는지 확인하세요. 조건 키 이름은 대소문자를 구분하지 않기 때문에foo라는 키를 확인하는 조건은foo,Foo,FOO모두와 일치해요. 요청에 키 이름이 대소문자만 다른 여러 키-값 쌍이 포함되어 있으면 예상치 못하게 액세스가 거부될 수 있어요. 자세한 내용은 IAM JSON 정책 요소: Condition을 참고하세요. - 권한 경계가 있다면, 권한 경계에 사용된 정책이 요청을 허용하는지 확인하세요. 자격 증명 기반 정책이 요청을 허용하지만 권한 경계가 허용하지 않으면 요청은 거부돼요. 권한 경계는 IAM 프린시펄(사용자 또는 역할)이 가질 수 있는 최대 권한을 제어해요. 리소스 기반 정책은 권한 경계에 제한받지 않아요. 권한 경계는 흔하지 않아요. AWS가 정책을 평가하는 방법에 대한 자세한 내용은 정책 평가 로직을 참고하세요.
- 요청을 수동으로 서명하고 있다면(AWS SDK를 사용하지 않고), 요청 서명을 올바르게 했는지 확인하세요.
- Amazon VPC 엔드포인트 정책을 사용하면서 AWS CloudTrail에 기록되지 않는 access denied 오류가 나면, VPC 엔드포인트 소유자 계정이 호출 계정이나 대상 역할 계정과 다르기 때문일 수 있어요.
임시 보안 자격 증명으로 요청했는데 "access denied"가 떠요
- 먼저 임시 자격 증명과 무관한 이유로 액세스가 거부된 건 아닌지 확인하세요. 자세한 내용은 AWS 서비스에 요청했는데 "access denied"가 떠요를 참고하세요.
- 서비스가 임시 보안 자격 증명을 수락하는지 확인하세요. IAM과 함께 작동하는 AWS 서비스를 참고하세요.
- 요청이 올바르게 서명되었고 잘 구성되었는지 확인하세요. 자세한 내용은 툴킷 문서 또는 AWS 리소스와 임시 자격 증명 사용을 참고하세요.
- 임시 보안 자격 증명이 만료되지 않았는지 확인하세요. 자세한 내용은 IAM의 임시 보안 자격 증명을 참고하세요.
- IAM 사용자나 역할이 올바른 권한을 가지고 있는지 확인하세요. 임시 보안 자격 증명의 권한은 IAM 사용자나 역할에서 파생돼요. 따라서 권한은 해당 임시 자격 증명을 맡은 역할에 부여된 권한으로 제한돼요. 임시 보안 자격 증명의 권한이 어떻게 결정되는지에 대한 자세한 내용은 임시 보안 자격 증명의 권한을 참고하세요.
- 역할을 맡았다면 역할 세션이 세션 정책에 의해 제한될 수 있어요. AWS STS를 사용해 임시 보안 자격 증명을 요청할 때는 선택적으로 인라인 또는 관리형 세션 정책을 전달할 수 있어요. 세션 정책은 역할에 대한 임시 자격 증명 세션을 프로그래밍 방식으로 만들 때 매개 변수로 전달하는 고급 정책이에요.
Policy매개 변수를 사용해 단일 JSON 인라인 세션 정책 문서를 전달할 수 있고,PolicyArns매개 변수를 사용해 최대 10개의 관리형 세션 정책을 지정할 수 있어요. 결과 세션의 권한은 역할의 자격 증명 기반 정책과 세션 정책의 교집합이에요. 또는 관리자나 사용자 정의 프로그램이 임시 자격 증명을 제공한 경우 액세스를 제한하는 세션 정책을 포함했을 수 있어요. - AWS STS 페더레이션 사용자 프린시펄이라면 세션이 세션 정책에 의해 제한될 수 있어요. IAM 사용자로 AWS에 로그인한 뒤 페더레이션 토큰을 요청하면 페더레이션 사용자 세션이 만들어져요. 자세한 내용은 사용자 지정 자격 증명 브로커를 통한 자격 증명 요청을 참고하세요. 페더레이션 토큰을 요청할 때 본인이나 자격 증명 브로커가 세션 정책을 전달했다면 해당 정책에 의해 세션이 제한돼요. 결과 세션의 권한은 IAM 사용자 자격 증명 기반 정책과 세션 정책의 교집합이에요. 세션 정책에 대한 자세한 내용은 세션 정책을 참고하세요.
- 역할을 사용해 리소스 기반 정책이 있는 리소스에 액세스하고 있다면, 정책이 역할에 권한을 부여하는지 확인하세요. 예를 들어 다음 정책은 계정
111122223333의MyRole이amzn-s3-demo-bucket에 액세스하도록 허용해요.
{
"Version":"2012-10-17",
"Statement": [{
"Sid": "S3BucketPolicy",
"Effect": "Allow",
"Principal": {"AWS": ["arn:aws:iam::111122223333:role/MyRole"]},
"Action": ["s3:PutObject"],
"Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/*"]
}]
}
액세스 거부 오류 메시지 예시
대부분의 액세스 거부 오류 메시지는 User user is not authorized to perform action on resource because context 형식으로 나타나요. 이 예시에서 user는 액세스가 거부된 프린시펄의 ARN이고, action은 정책이 거부하는 서비스 작업이며, resource는 정책이 작동하는 리소스의 ARN이에요. context 필드는 액세스를 거부한 정책 유형에 대한 추가 컨텍스트를 제공하고, 경우에 따라 액세스를 거부한 정책의 ARN도 포함해요.
정책이 Deny 문을 포함해 액세스를 명시적으로 거부하면, AWS는 액세스 거부 오류 메시지에 with an explicit deny in a type policy라는 구문을 포함해요. 이 구문은 아래처럼 정책의 ARN을 지정할 수도 있어요: with an explicit deny in a type policy: policy ARN.
정책이 액세스를 암묵적으로 거부하면, AWS는 액세스 거부 오류 메시지에 because no type policy allows the action action이라는 구문을 포함해요.
참고 일부 AWS 서비스는 이 액세스 거부 오류 메시지 형식을 지원하지 않아요. 액세스 거부 오류 메시지의 내용은 인증 요청을 하는 서비스에 따라 달라질 수 있어요.
다음 예시는 여러 유형의 액세스 거부 오류 메시지 형식을 보여줘요.
서비스 제어 정책으로 인한 액세스 거부 – 암묵적 거부
- 서비스 제어 정책(SCP)에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은codecommit:ListRepositories예요. - SCP에
Allow문을 추가해 업데이트하세요. 자세한 내용은 AWS Organizations 사용자 가이드의 SCP 업데이트를 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no service control policy allows the codecommit:ListRepositories action
서비스 제어 정책으로 인한 액세스 거부 – 명시적 거부
- 오류 메시지에 정책 ARN이 제공되면, 지정된 서비스 제어 정책(SCP)에서 해당 작업에 대한
Deny문이 있는지 확인하세요. 아래 예시에서 작업은codecommit:ListRepositories예요. - 오류 메시지에 정책 ARN이 제공되지 않으면, SCP에서 해당 작업에 대한
Deny문이 있는지 확인하세요. Deny문을 제거해 SCP를 업데이트하세요. 자세한 내용은 AWS Organizations 사용자 가이드의 서비스 제어 정책(SCP) 업데이트를 참고하세요.
정책 ARN이 있는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
with an explicit deny in a service control policy: arn:aws:organizations::777788889999:policy/o-exampleorgid/service_control_policy/p-examplepolicyid123
정책 ARN이 없는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
with an explicit deny in a service control policy
리소스 제어 정책으로 인한 액세스 거부 – 명시적 거부
- 오류 메시지에 정책 ARN이 제공되면, 지정된 리소스 제어 정책(RCP)에서 해당 작업에 대한
Deny문이 있는지 확인하세요. 아래 예시에서 작업은secretsmanager:GetSecretValue예요. - 오류 메시지에 정책 ARN이 제공되지 않으면, RCP에서 해당 작업에 대한
Deny문이 있는지 확인하세요. Deny문을 제거해 RCP를 업데이트하세요. 자세한 내용은 AWS Organizations 사용자 가이드의 리소스 제어 정책(RCP) 업데이트를 참고하세요.
정책 ARN이 있는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource control policy: arn:aws:organizations::777788889999:policy/o-exampleorgid/resource_control_policy/p-examplepolicyid456
정책 ARN이 없는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource control policy
VPC 엔드포인트 정책으로 인한 액세스 거부 – 암묵적 거부
- Virtual Private Cloud(VPC) 엔드포인트 정책에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은codecommit:ListRepositories예요. Allow문을 추가해 VPC 엔드포인트 정책을 업데이트하세요. 자세한 내용은 AWS PrivateLink 가이드의 VPC 엔드포인트 정책 업데이트를 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no VPC endpoint policy allows the codecommit:ListRepositories action
VPC 엔드포인트 정책으로 인한 액세스 거부 – 명시적 거부
- Virtual Private Cloud(VPC) 엔드포인트 정책에서 해당 작업에 대한 명시적
Deny문이 있는지 확인하세요. 다음 예시에서 작업은codedeploy:ListDeployments예요. Deny문을 제거해 VPC 엔드포인트 정책을 업데이트하세요. 자세한 내용은 AWS PrivateLink 가이드의 VPC 엔드포인트 정책 업데이트를 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a VPC endpoint policy
권한 경계로 인한 액세스 거부 – 암묵적 거부
- 권한 경계에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은codedeploy:ListDeployments예요. - IAM 정책에
Allow문을 추가해 권한 경계를 업데이트하세요. 자세한 내용은 IAM 엔터티에 대한 권한 경계와 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
because no permissions boundary allows the codedeploy:ListDeployments action
권한 경계로 인한 액세스 거부 – 명시적 거부
- 오류 메시지에 정책 ARN이 제공되면, 지정된 권한 경계에서 해당 작업에 대한
Deny문이 있는지 확인하세요. 아래 예시에서 작업은sagemaker:ListModels예요. - 오류 메시지에 정책 ARN이 제공되지 않으면, 프린시펄에 연결된 권한 경계에서 해당 작업에 대한
Deny문이 있는지 확인하세요. - IAM 정책에서
Deny문을 제거해 권한 경계를 업데이트하세요. 자세한 내용은 IAM 엔터티에 대한 권한 경계와 IAM 정책 편집을 참고하세요.
정책 ARN이 있는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sagemaker:ListModels
with an explicit deny in a permissions boundary: arn:aws:iam::123456789012:policy/DeveloperPermissionBoundary
정책 ARN이 없는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sagemaker:ListModels
with an explicit deny in a permissions boundary
세션 정책으로 인한 액세스 거부 – 암묵적 거부
- 세션 정책에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은codecommit:ListRepositories예요. Allow문을 추가해 세션 정책을 업데이트하세요. 자세한 내용은 세션 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codecommit:ListRepositories
because no session policy allows the codecommit:ListRepositories action
세션 정책으로 인한 액세스 거부 – 명시적 거부
- 오류 메시지에 정책 ARN이 제공되면, 지정된 세션 정책에서 해당 작업에 대한
Deny문이 있는지 확인하세요. 아래 예시에서 작업은codedeploy:ListDeployments예요. - 오류 메시지에 정책 ARN이 제공되지 않으면, 세션 정책에서 해당 작업에 대한
Deny문이 있는지 확인하세요. Deny문을 제거해 세션 정책을 업데이트하세요. 자세한 내용은 세션 정책과 IAM 정책 편집을 참고하세요.
정책 ARN이 있는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a session policy: arn:aws:iam::123456789012:policy/DeveloperSessionPolicy
정책 ARN이 없는 오류 메시지:
User: arn:aws:iam::123456789012:user/John is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in a session policy
리소스 기반 정책으로 인한 액세스 거부 – 암묵적 거부
- 리소스 기반 정책에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은secretsmanager:GetSecretValue예요. Allow문을 추가해 정책을 업데이트하세요. 자세한 내용은 리소스 기반 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
because no resource-based policy allows the secretsmanager:GetSecretValue action
리소스 기반 정책으로 인한 액세스 거부 – 명시적 거부
- 리소스 기반 정책에서 해당 작업에 대한 명시적
Deny문이 있는지 확인하세요. 다음 예시에서 작업은secretsmanager:GetSecretValue예요. Deny문을 제거해 정책을 업데이트하세요. 자세한 내용은 리소스 기반 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: secretsmanager:GetSecretValue
on resource: arn:aws:secretsmanager:us-east-1:123456789012:secret:*
with an explicit deny in a resource-based policy
역할 신뢰 정책으로 인한 액세스 거부 – 암묵적 거부
- 역할 신뢰 정책에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은sts:AssumeRole예요. Allow문을 추가해 정책을 업데이트하세요. 자세한 내용은 리소스 기반 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sts:AssumeRole
because no role trust policy allows the sts:AssumeRole action
역할 신뢰 정책으로 인한 액세스 거부 – 명시적 거부
- 역할 신뢰 정책에서 해당 작업에 대한 명시적
Deny문이 있는지 확인하세요. 다음 예시에서 작업은sts:AssumeRole예요. Deny문을 제거해 정책을 업데이트하세요. 자세한 내용은 리소스 기반 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:user/John is not authorized to perform: sts:AssumeRole
with an explicit deny in the role trust policy
자격 증명 기반 정책으로 인한 액세스 거부 – 암묵적 거부
- 자격 증명에 연결된 자격 증명 기반 정책에서 해당 작업에 대한
Allow문이 누락됐는지 확인하세요. 다음 예시에서 작업은 역할HR에 연결된codecommit:ListRepositories예요. Allow문을 추가해 정책을 업데이트하세요. 자세한 내용은 자격 증명 기반 정책과 IAM 정책 편집을 참고하세요.
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codecommit:ListRepositories
because no identity-based policy allows the codecommit:ListRepositories action
자격 증명 기반 정책으로 인한 액세스 거부 – 명시적 거부
- 오류 메시지에 정책 ARN이 제공되면, 지정된 정책에서 해당 작업에 대한
Deny문이 있는지 확인하세요. 아래 예시에서 작업은codedeploy:ListDeployments예요. - 오류 메시지에 정책 ARN이 제공되지 않으면, 자격 증명에 연결된 자격 증명 기반 정책에서 해당 작업에 대한
Deny문이 있는지 확인하세요. Deny문을 제거해 정책을 업데이트하세요. 자세한 내용은 자격 증명 기반 정책과 IAM 정책 편집을 참고하세요.
정책 ARN이 있는 오류 메시지:
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in an identity-based policy: arn:aws:iam::123456789012:policy/HRAccessPolicy
정책 ARN이 없는 오류 메시지:
User: arn:aws:iam::123456789012:role/HR is not authorized to perform: codedeploy:ListDeployments
on resource: arn:aws:codedeploy:us-east-1:123456789012:deploymentgroup:*
with an explicit deny in an identity-based policy