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

5분 분량
0

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를 사용하는 방법을 참조하세요.


AWS 공식
AWS 공식업데이트됨 2년 전
댓글 없음

관련 콘텐츠