Amazon DynamoDB 테이블에 액세스하려고 할 때 AccessDeniedException 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2022년 8월 29일

Amazon DynamoDB 테이블에 액세스하려고 하는데 AccessDeniedException 오류가 표시됩니다.

간략한 설명

다음과 같은 이유로 인해 이 오류가 발생할 수 있습니다.

  • DynamoDB 테이블에 액세스하는 데 사용한 AWS Identity and Access Management(IAM) 역할에 필요한 권한이 없습니다.
  • DynamoDB 테이블에 대한 액세스는 조직 수준에서 제한됩니다.
  • DynamoDB용 Amazon Virtual Private Cloud(VPC) 엔드포인트와 연결된 정책이 작업을 제한합니다.
  • 다중 인증(MFA)을 활성화하고 MFA를 사용하여 로그인하지 않고 테이블에 액세스하려고 했습니다.
  • 고객 관리형 키 또는 AWS 관리형 키를 사용하여 DynamoDB 테이블을 보호합니다.

해결 방법

IAM 역할에 필요한 권한이 없습니다.

DynamoDB는 리소스 기반 정책을 지원하지 않습니다. DynamoDB 테이블을 생성할 때 테이블에 액세스하는 데 사용하는 IAM 역할에 필요한 권한을 부여해야 합니다. 정책을 IAM 사용자, 그룹 또는 역할에 연결하여 필요한 권한을 부여할 수 있습니다. 자세한 내용은 Amazon DynamoDB에서 자격 증명 기반 정책(IAM 정책) 사용을 참조하세요.

AWS Command Line Interface(AWS CLI)를 사용하여 IAM 권한 API 호출 실패 문제를 해결할 수 있습니다.

참고: 이 AWS CLI 스크립트에는 jq 명령줄 JSON 프로세서가 필요합니다. 자습서 및 다운로드 지침은 JSON 출력 형식을 참조하세요. yum 패키지를 사용하는 배포의 경우 다음 명령을 실행하세요.

$ sudo yum install jq

다음 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으로 바꾸십시오.

이 명령의 출력은 다음과 유사합니다.

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 작업을 허용하지 않음을 의미합니다.

참고: AWS CLI 명령을 실행하던 중 오류가 발생하는 경우, AWS CLI 최신 버전을 사용했는지 확인합니다.

다음 모범 사례를 사용하여 IAM 역할에 DynamoDB 테이블에 액세스하는 데 필요한 권한이 있는지 확인하세요.

  • IAM 역할이 신뢰 정책의 DENY 문에 포함되어 있지 않은지 확인합니다.
  • IAM 역할이 신뢰 정책의 ALLOW 문에 포함되어 있는지 확인합니다.
  • ALLOW 문에 지정된 모든 IAM 조건이 sts:AssumeRole API 작업에서 지원되는지 확인합니다.
  • AWS CLI를 통해 DynamoDB 테이블에 액세스하려는 경우 올바른 액세스 키 ID와 비밀 액세스 키를 사용했는지 확인하세요.

자세한 내용은 IAM 권한 액세스 거부 또는 권한 없음 오류 문제를 해결하는 데 도움이 되는 데이터를 가져오려면 어떻게 해야 합니까?를 참조하세요.

DynamoDB 테이블에 대한 액세스는 조직 수준에서 제한됩니다.

DynamoDB 테이블에 액세스하려고 할 때 다음 오류가 발생하면 서비스 제어 정책으로 인해 액세스가 거부된 것입니다.

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 역할도 DynamoDB에 액세스할 수 없습니다.

Amazon VPC 엔드포인트 정책은 작업을 제한합니다.

Amazon VPC를 사용하여 DynamoDB 테이블과 애플리케이션 간의 데이터 전송에 대한 개인 정보 보호 및 보안을 강화할 수 있습니다. 엔드포인트를 생성할 때 VPC 엔드포인트에 명시적 또는 암시적 거부가 있는 IAM 리소스 정책을 연결하여 특정 사용자에 대한 테이블 액세스를 제한하도록 선택할 수 있습니다. 테이블에 액세스하려는 IAM 사용자에 대한 액세스를 제한하면 다음과 유사한 오류가 발생합니다.

An error occurred (AccessDeniedException) when calling the ListTables operation: 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를 실행합니다.

-또는-

다음을 수행합니다.

  1. Amazon VPC 콘솔을 엽니다.
  2. 탐색 창에서 엔드포인트(Endpoints)를 선택합니다.
  3. VPC 엔드포인트를 선택합니다.
  4. 정책(Policy) 탭을 선택하여 엔드포인트 정책을 검토합니다.

MFA를 사용하여 로그인하지 않고 테이블에 액세스하려고 했습니다.

다음 자격 증명 기반 정책을 사용하여 계정에 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 작업을 포함하여 위 정책에 나열되지 않은 모든 작업이 거부됩니다.

DynamoDB 테이블은 고객 관리형 키 또는 AWS 관리형 키를 사용합니다.

고객 관리형 키 또는 AWS Key Management Service(AWS KMS) 키로 DynamoDB 테이블을 생성할 때 해당 KMS 키에 대한 정책은 DynamoDB에 사용자를 대신하여 키를 사용할 수 있는 권한을 부여해야 합니다.

테이블에 액세스하는 IAM 사용자에게 AWS KMS 키에 대해 다음과 같은 최소 권한이 있어야 합니다.

  • DynamoDB는 AWS KMS 키를 사용하여 테이블의 고유한 데이터 키(테이블 키라고 함)를 생성하고 암호화합니다. 이 키를 생성하고 암호화하려면 kms:GenerateDataKey 권한이 있어야 합니다.
  • 테이블 키는 테이블 데이터를 암호화하는 데 사용되는 데이터 암호화 키를 보호하는 데 사용됩니다. 테이블에 대한 고객 관리형 키가 수정되면 DynamoDB가 새 테이블 키를 생성합니다. 그런 다음 DynamoDB는 새 테이블 키를 사용하여 데이터 암호화 키를 다시 암호화합니다. 이 작업을 수행하려면 kms:ReEncrypt 권한이 있어야 합니다.
  • DynamoDB는 kms:DescribeKey 작업을 사용하여 선택한 고객 관리형 키가 계정 및 리전 내에 존재하는지 확인합니다. 키가 임의로 제거되면 DescribeKey 호출은 오류를 반환합니다.
  • DynamoDB는 권한 부여를 사용하여 고객 관리형 키에 대한 권한을 설정합니다. 이러한 권한 부여는 DynamoDB가 백그라운드 시스템 유지 관리 및 지속적인 데이터 보호 태스크를 수행할 때 사용됩니다. 권한 부여는 테이블 키를 생성하는 데에도 사용됩니다. 따라서 kms:CreateGrant 권한이 있어야 합니다.

자세한 내용은 Amazon DynamoDB에서 AWS KMS를 사용하는 방법을 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?