기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS SDK for C++에서 런타임 오류 해결 시작하기
AWS SDK for C++로 애플리케이션을 개발하는 방법을 익히는 동시에 AWS Management 콘솔 및 AWS CLI 사용에도 익숙해지는 것이 중요합니다. 이러한 도구는 런타임 오류 발생 시 다양한 문제 해결 및 진단 작업을 위해 상호 교환적으로 사용할 수 있습니다.
다음 자습서에서는 이러한 문제 해결 및 진단 태스크의 예를 보여줍니다. 여러 가지 이유로 발생할 수 있는 Access denied 오류에 초점을 맞추고 있습니다. 이 자습서에서는 오류의 실제 원인을 파악하는 방법을 예시로 보여줍니다. 특히 두 가지 가능한 원인, 즉 현재 사용자에 대한 잘못된 권한 설정과 현재 사용자가 사용할 수 없는 리소스에 초점을 두고 설명합니다.
프로젝트 소스 및 실행 파일을 가져오려면
-
GitHub의 AWS 코드 예제 리포지토리
에서 Amazon S3 코드 예제 폴더를 다운로드합니다. -
delete_bucket.cpp를 열고 두 가지 메서드인main()및DeleteBucket()이 있음을 확인합니다.DeleteBucket()은 SDK를 사용하여 버킷을 삭제합니다. -
AWS SDK for C++를 사용하여 시작하기에 설명된 것과 동일한 빌드 단계를 사용하여 Amazon S3 예제를 빌드합니다. 빌드 프로세스는 각 소스 파일에 대한 실행 파일을 생성합니다.
-
빌드 시스템이 빌드 실행 파일을 생성한 폴더로 이동하여 명령 프롬프트를 엽니다. 실행 파일
run_create_bucket을 실행합니다. 실제 실행 파일 이름은 운영 체제에 따라 다릅니다. 그러면 계정에 버킷이 생성됩니다(삭제할 버킷이 생김). -
명령 프롬프트에서 실행 파일
run_delete_bucket을 실행합니다. 이 예제에서는 삭제하려는 버킷의 이름을 파라미터로 예상합니다. 잘못된 버킷 이름을 제공합니다. 문제 해결을 탐색할 수 있도록 지금은 의도적으로 이 버킷 이름에 오타를 만듭니다. -
Access Denied오류 메시지가 표시되는지 확인합니다.Access Denied오류 메시지가 표시되면 Amazon S3에 대한 전체 권한을 가진 사용자를 생성했는지 의문이 들게 되는데, 다음 단계에서 이를 확인할 것입니다.
AWS CLI를 설치하고 AWS를 호출하는 사용자 이름을 찾으려면
-
개발 시스템에 최신 AWS CLI를 설치하려면 AWS Command Line Interface 사용 설명서에서 AWS CLI 설치를 참조하세요.
-
AWS CLI가 작동하는지 확인하려면 명령 프롬프트를 열고
aws -\-version명령을 실행합니다.$aws -\-versionaws-cli/2.1.29 Python/3.8.8 Windows/10 exe/AMD64 prompt/off -
실제로 AWS를 호출하는 사용자 이름을 확인하려면 AWS CLI 명령
aws sts get-caller-identity를 실행합니다. 다음 예제 출력에서 해당 사용자 이름은 userX입니다.$aws sts get-caller-identity{ "UserId": "A12BCD34E5FGHI6JKLM", "Account": "1234567890987", "Arn": "arn:aws:iam::1234567890987:user/userX" }자격 증명을 지정하는 방법은 다양하지만 AWS SDK for C++를 AWS 사용하여 로 인증의 방식에 따라 진행했다면 이 사용자 이름은 AWS 공유 자격 증명 파일에서 가져온 것입니다. 해당 절차 중에 사용자에게 AmazonS3FullAccess 권한을 부여했습니다.
참고
일반적으로 대부분의 AWS CLI 명령은 다음과 같은 구문 구조를 따릅니다.
$aws <command> <subcommand> [options and parameters]여기서
command는 서비스이고subcommand는 해당 서비스에서 호출되는 메서드입니다. 자세한 내용은 AWS Command Line Interface 사용 설명서에서 AWS CLI의 명령 구조를 참조하세요.
사용자가 버킷 삭제 권한이 있는지 확인하려면
-
AWS Management 콘솔
을 열고 로그인합니다. 자세한 내용은 AWS Management 콘솔 시작하기를 참조하세요. -
기본 탐색 모음의 서비스 검색...에
IAM를 입력하고 결과에서 IAM 서비스를 선택합니다. -
대시보드 사이드바 또는 IAM 리소스에서 사용자를 선택합니다.
-
계정에 사용할 수 있는 사용자 테이블에서 이전 절차에서 확인한 사용자 이름을 선택합니다.
-
요약 페이지의 권한 탭을 선택하고 정책 이름 테이블에서 AmazonS3FullAccess를 선택합니다.
-
정책 요약과 JSON 데이터를 살펴봅니다. 이 사용자에게 Amazon S3 서비스에 대한 전체 권한이 있는지 확인합니다.
"Effect": "Allow", "Action": "s3:*", "Resource": "*"
이 제거 프로세스는 문제의 원인을 배제하는 데 흔히 사용됩니다. 이 경우 사용자에게 올바른 권한이 있음을 확인했으므로 문제의 원인은 다른 데 있을 것입니다. 즉, 버킷에 액세스할 수 있는 올바른 권한이 있는데도 Access Denied 오류가 발생한다면 본인이 소유하지 않은 버킷에 액세스하려 했기 때문일 수 있습니다. 문제 해결 시, 프로그램에 제공된 버킷 이름을 검토하면 해당 이름의 버킷이 계정에 존재하지 않으므로 해당 버킷에 ‘액세스'할 수 없다는 점을 확인하게 됩니다.
코드 예제가 성공적으로 실행되도록 업데이트하려면
-
delete_bucket.cpp의main()함수로 돌아가 enum을 사용하여 리전을 계정의 리전으로 변경합니다. 계정의 리전을 찾으려면 AWS Management 콘솔에 로그인한 후 오른쪽 상단 모서리에서 리전을 찾습니다. 또한main()에서 버킷 이름을 계정에 있는 버킷으로 변경합니다. 현재 버킷 이름을 확인하는 방법은 다음과 같습니다.-
이 코드 예제의 폴더에도 있는
run_list_buckets실행 파일을 사용하여 버킷 이름을 프로그래밍 방식으로 가져올 수 있습니다. -
다음 AWS CLI 명령을 사용하여 Amazon S3 버킷을 나열할 수 있습니다.
$aws s3 ls2022-01-05 14:27:48amzn-s3-demo-bucket -
AWS Management 콘솔
도 사용할 수 있습니다. 기본 탐색 모음의 서비스 검색...에 S3를 입력합니다. 버킷 페이지에 계정의 버킷이 나열됩니다.
-
-
코드를 다시 빌드하고 업데이트된 실행 파일
run_delete_bucket을 실행합니다. -
AWS Management 콘솔 또는 AWS CLI를 사용하여 이전에 생성한 Amazon S3 버킷이 삭제되었는지 확인합니다.