Amazon DynamoDB 테이블에 액세스할 때 발생하는 AccessDeniedException 오류를 해결하려면 어떻게 해야 하나요?
Amazon DynamoDB 테이블에 액세스하려고 하면 AccessDeniedException 오류가 발생합니다.
간략한 설명
이 오류는 다음과 같은 이유로 발생할 수 있습니다.
- DynamoDB 테이블에 액세스하는 데 사용된 AWS Identity and Access Management(IAM) 역할에 필요한 권한이 없습니다.
- DynamoDB 테이블에 대한 액세스가 조직 수준에서 제한됩니다.
- DynamoDB용 Amazon Virtual Private Cloud(VPC) 엔드포인트와 연결된 정책에서 이 작업을 제한합니다.
- 다중 인증(MFA)이 활성화되어 있는데 테이블에 액세스할 때 MFA를 사용하여 로그인하지 않았습니다.
- DynamoDB 테이블이 고객 관리형 키 또는 AWS 관리형 키로 보호됩니다.
- DynamoDB용 Amazon CloudWatch Contributor Insights에 액세스할 수 없습니다.
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
해결 방법
IAM 역할에 필요한 권한이 없음
DynamoDB 테이블을 생성할 때 테이블에 액세스하는 데 사용되는 IAM 역할에 필요한 권한을 부여합니다. IAM 사용자, 그룹 또는 역할에 필요한 권한을 부여하는 정책을 연결할 수 있습니다. 자세한 내용은 Amazon DynamoDB에서 ID 기반 정책 사용을 참조하세요.
IAM 권한 API 직접 호출 오류를 해결하려면 다음 AWS CLI 스크립트를 사용하세요.
( echo "Time,Identity ARN,Event ID,Service,Action,Error,Message";> aws cloudtrail lookup-events --start-time "2022-08-04T13:23:00Z" --end-time "2022-08-04T13:27:00Z" --query "Events[*].CloudTrailEvent" --output text \ > | jq -r ". | select(.userIdentity.arn == \"your-ARN\" and .eventType == \"AwsApiCall\" and .errorCode != null > and (.errorCode | ascii_downcase | (contains(\"accessdenied\") or contains(\"unauthorized\")))) > | [.eventTime, .userIdentity.arn, .eventID, .eventSource, .eventName, .errorCode, .errorMessage] | @csv" > ) | column -t -s'",'
your-ARN은 해당 리소스의 IAM ARN으로 바꿉니다.
참고: AWS CLI 스크립트를 사용하려면 jq 명령줄 JSON 프로세서가 필요합니다. 자습서 및 다운로드 지침은 JSON 출력 형식을 참조하세요.
yum 패키지를 사용하는 배포의 경우 다음 명령을 실행하세요.
$ sudo yum install jq
이 명령의 출력은 다음과 비슷합니다.
Time Identity ARN Event ID Service Action Error Message 2022-08-04T13:24:14Z arn:aws:iam::111122223333:user/article 42f420fe-ef06-43be-98a6-d5a0a90d7b4c dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* with an explicit deny in an identity-based policy 2022-08-04T13:51:22Z arn:aws:iam::111122223333:user/article b174e4e1-94a7-403e-a15f-1234aec796a6 dynamodb.amazonaws.com ListTables AccessDenied User: arn:aws:iam::111122223333:user/article is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:111122223333:table/* because no identity-based policy allows the dynamodb:ListTables action
위 출력에서는 111122223333 사용자에게 ListTables 작업을 거부하는 권한을 연결했기 때문에 이 작업을 수행할 수 없습니다. 두 번째 메시지는 dynamodb:ListTables 작업을 허용하는 ID 기반 정책이 없음을 의미합니다.
다음은 DynamoDB 테이블에 액세스하는 데 필요한 권한이 IAM 역할에 있는지 확인하기 위한 모범 사례입니다.
- 신뢰 정책의 모든 DENY 문에 IAM 역할을 포함하지 않습니다.
- 신뢰 정책의 ALLOW 문에 IAM 역할을 포함합니다.
- ALLOW 문에 지정된 모든 IAM 조건이 sts:AssumeRole API 작업에서 지원되는지 확인합니다.
- AWS CLI를 사용하여 DynamoDB 테이블에 액세스하는 경우 올바른 액세스 키 ID와 비밀 액세스 키를 사용합니다.
자세한 내용은 IAM 권한 액세스 거부됨 또는 권한 없음 오류를 해결하는 데 도움이 되는 데이터를 얻으려면 어떻게 해야 하나요?를 참조하세요.
DynamoDB 테이블에 대한 액세스가 조직 수준에서 제한됨
DynamoDB 테이블에 액세스하려고 할 때 다음 오류가 발생하면 서비스 제어 정책(SCP)에서 액세스를 거부한 것입니다.
"User: arn:aws:iam::11111222333:user/Admin is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table with an explicit deny in a service control policy"
이 문제를 해결하려면 조직 수준에서 정의된 정책을 업데이트하세요.
**참고:**조직 수준에서 DynamoDB 작업을 거부하면 해당 조직 또는 AWS 계정에 있는 모든 IAM 역할이 거부됩니다. 역할 또는 계정에 필요한 권한이 있더라도 역할 또는 계정이 거부됩니다.
Amazon VPC 엔드포인트 정책에서 작업을 제한함
DynamoDB 테이블과 애플리케이션 간 데이터 전송 시 개인정보 보호 및 보안을 강화하기 위해 Amazon VPC를 사용할 수 있습니다. VPC 엔드포인트에 IAM 사용자의 테이블 액세스를 제한하는 IAM 리소스 정책이 있는 경우 다음 오류가 발생합니다.
"ListTables 작업을 호출할 때 오류(AccessDeniedException) 발생: User: arn:aws:iam::111222333444:user/Admin is not authorized to perform: dynamodb:ListTables on resource: arn:aws:dynamodb:us-east-1:11111222333:table/* with an explicit deny in a VPC endpoint policy"
이 오류가 발생하면 VPC 엔드포인트 정책에 Admin 사용자의 ListTables 작업을 거부하는 명시적 DENY 문이 있는 것입니다.
VPC 엔드포인트 정책을 보려면 AWS CLI 명령 describe-vpc-endpoints를 실행합니다. 또는 다음 단계를 완료하여 콘솔에서 정책을 확인합니다.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 엔드포인트를 선택합니다.
- VPC 엔드포인트를 선택합니다.
- 정책 탭을 선택하여 엔드포인트 정책을 확인합니다.
이 문제를 해결하려면 VPC 엔드포인트 정책을 업데이트하세요.
테이블에 액세스할 때 MFA를 사용하여 로그인하지 않음
계정에서 다음과 같은 ID 기반 정책을 사용하여 MFA를 구성했다고 가정해 보겠습니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenyAllExceptListedIfNoMFA", "Effect": "Deny", "NotAction": [ "iam:CreateVirtualMFADevice", "iam:EnableMFADevice", "iam:GetUser", "iam:ListMFADevices", "iam:ListVirtualMFADevices", "iam:ResyncMFADevice", "sts:GetSessionToken" ], "Resource": "", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" } } } ] }
이 경우 MFA를 사용하여 인증하는 데 필요한 작업을 제외한 모든 작업이 거부됩니다. IAM 사용자가 MFA로 로그인하지 않은 경우 DynamoDB 작업을 포함하여 위 정책에 나열되지 않은 모든 작업이 거부됩니다.
이 문제를 해결하려면 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa.html)MFA로 로그인[하세요.
DynamoDB 테이블은 고객 관리형 키 또는 AWS 관리형 키를 사용합니다.
고객 관리형 키 또는 AWS Key Management Service(AWS KMS) 키를 사용하는 DynamoDB 테이블은 올바른 권한이 있어야 합니다. KMS 키 정책은 사용자 대신 키를 사용할 수 있는 권한을 DynamoDB에 부여해야 합니다. 테이블에 액세스하는 IAM 사용자는 AWS KMS 키에 대해 다음과 같은 최소 권한이 있어야 합니다.
- DynamoDB는 AWS KMS 키를 사용하여 테이블 키라는 테이블의 고유 데이터 키를 생성하고 암호화합니다. 이 키를 생성하고 암호화하려면 kms:GenerateDataKey 권한이 있어야 합니다.
- 암호화된 키에 액세스하려면 AWS KMS 키에 kms:Encrypt 및 kms:Decrypt 권한이 있어야 합니다.
- 테이블 키는 테이블 데이터를 암호화하는 데 사용되는 데이터 암호화 키를 보호하는 데 사용됩니다. 테이블의 고객 관리형 키가 수정되면 DynamoDB가 새 테이블 키를 생성합니다. 그런 다음 DynamoDB는 새 테이블 키를 사용하여 데이터 암호화 키를 다시 암호화합니다. 이 작업을 수행하려면 kms:ReEncrypt 권한이 있어야 합니다.
- DynamoDB는 kms:DescribeKey 작업을 사용하여 선택된 고객 관리형 키가 계정 및 리전 내에 존재하는지 확인합니다. 키가 임의로 제거되면 DescribeKey 호출에서 오류를 반환합니다.
- DynamoDB는 권한 부여를 통해 고객 관리형 키에 권한을 설정합니다. 이러한 권한 부여는 DynamoDB가 백그라운드 시스템 유지 관리 및 지속적인 데이터 보호 작업을 수행할 때 사용됩니다. 권한 부여는 테이블 키를 생성하는 데에도 사용됩니다. 따라서 kms:CreateGrant 권한이 있는지 확인해야 합니다.
자세한 내용은 Amazon DynamoDB가 AWS KMS를 사용하는 방식을 참조하세요.
DynamoDB용 CloudWatch Contributor Insights에 액세스할 수 없음
DynamoDB용 CloudWatch Contributor Insights에 액세스하려고 할 때 오류가 발생하면 올바른 IAM 권한이 없는 것일 수 있습니다. CloudWatch Contributor Insights에 액세스하려면 다음과 같은 권한이 있어야 합니다.
자세한 내용은 DynamoDB용 CloudWatch Contributor Insights: 작동 방식을 참조하세요.
참고: DynamoDB는 속성 기반 액세스 제어(ABAC)를 지원하지 않습니다. 또한 태그 기반 조건을 사용하여 테이블에 대한 액세스를 제어할 수 없습니다. 대신 세분화된 액세스 제어(FGAC)를 위한 IAM 정책 조건을 사용하세요.
관련 정보
관련 콘텐츠
- 질문됨 한 달 전lg...
- AWS 공식업데이트됨 6달 전
- AWS 공식업데이트됨 한 달 전
- AWS 공식업데이트됨 2년 전