View a markdown version of this page

でのランタイムエラーのトラブルシューティングの開始方法 AWS SDK for C++ - AWS SDK for C++

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

でのランタイムエラーのトラブルシューティングの開始方法 AWS SDK for C++

を使用してアプリケーションを開発する方法を学ぶ際には AWS SDK for C++、 AWS マネジメントコンソール と の両方の使用に慣れることも重要です AWS CLI。これらのツールは、ランタイムエラー発生時のさまざまなトラブルシューティングや診断に互換的に使用できます。

次のチュートリアルでは、こうしたトラブルシューティングおよび診断作業の一例を示します。ここでは、いくつかの異なる理由で発生する可能性がある Access denied エラーに焦点を当てます。このチュートリアルは、エラーの実際の原因をどのように特定するかの例を示します。ここでは、主に次の 2 つの原因に注目します。現在のユーザーに対してアクセス許可が正しくないこと、リソースが利用できないことです。

プロジェクトのソースと実行可能ファイルを取得するには
  1. GitHub の AWS コードサンプルリポジトリから Amazon S3 のコード例フォルダをダウンロードします。

  2. delete_bucket.cpp を開き、main()DeleteBucket() の 2 つのメソッドがあることを確認します。DeleteBucket() は SDK を使用してバケットを削除します。

  3. AWS SDK for C++の開始方法」で説明しているのと同じビルド手順を使用して、Amazon S3 の例をビルドします。ビルドプロセスでは、ソースファイルごとに実行可能ファイルが生成されます。

  4. ビルドされた実行可能ファイルが出力されたフォルダをコマンドプロンプトで開きます。実行可能ファイル run_create_bucket を実行します (実際のファイル名はオペレーティングシステムによって異なります)。これにより、アカウント内にバケット (後で削除するバケット) が作成されます。

  5. コマンドプロンプトで実行可能ファイル run_delete_bucket を実行します。この例では、削除対象のバケットの名前をパラメータとして指定する必要があります。正しくないバケット名 (意図的にタイプミスを含めた名前) を入力し、トラブルシューティングを試してみましょう。

  6. Access Denied エラーメッセージが表示されることを確認します。Access Denied エラーメッセージが表示されると、Amazon S3 に対して完全なアクセス許可を持つユーザーを作成したかどうかが疑問になります。次はこの点を確認します。

をインストール AWS CLI し、 を呼び出すユーザー名を検索するには AWS
  1. 最新の を開発マシン AWS CLI にインストールするには、AWS Command Line Interface 「 ユーザーガイド」の「 AWS CLIのインストール」を参照してください。

  2. AWS CLI が動作していることを確認するには、コマンドプロンプトを開き、コマンドを実行します。 aws -\-version

    $ aws -\-version aws-cli/2.1.29 Python/3.8.8 Windows/10 exe/AMD64 prompt/off
  3. 実際に呼び出しを行っているユーザー名を取得するには 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のコマンド構造」を参照してください。

ユーザーにバケットを削除するためのアクセス許可があるかを確認するには
  1. AWS マネジメントコンソール を開き、ログインします。詳細については、「AWS マネジメントコンソールの開始方法」を参照してください。

  2. メインナビゲーションバーの [サービスの検索] に「IAM」と入力し、表示された結果から IAM サービスを選択します。

  3. ダッシュボードのサイドバーまたは [IAM リソース] で、[ユーザー] を選択します。

  4. アカウントで使用可能なユーザーの一覧から、前の手順で取得したユーザー名を選択します。

  5. [概要] ページの [アクセス許可] タブを選択し、ポリシー名の一覧から [AmazonS3FullAccess] を選択します。

  6. [ポリシーの概要] と JSON データを確認します。このユーザーが Amazon S3 サービスに対して完全な権限を持っていることを確認します。

    "Effect": "Allow", "Action": "s3:*", "Resource": "*"

このような除外による確認手順は、問題の原因を特定する上でよく使用されます。今回の場合、ユーザーに正しいアクセス許可があることが確認されたため、問題は他にあると考えられます。つまり、バケットにアクセスするための正しいアクセス許可があるにもかかわらず Access Denied エラーが発生する場合は、自分のものでないバケットにアクセスしようとしている可能性があります。トラブルシューティングの次の手順として、プログラムに指定されたバケット名を確認すると、その名前のバケットがアカウントに存在しないこと、つまりそのバケットに「アクセス」できないことがわかります。

コード例を正常に動作するように更新するには
  1. delete_bucket.cppmain() 関数に戻り、enum を使用してリージョンを自分のアカウントのリージョンに変更します。アカウントのリージョンを検索するには、 にログインし AWS マネジメントコンソール、右上隅にあるリージョンを見つけます。また main() 内で、バケット名を自分のアカウントに存在するバケットに変更します。現在のバケット名を見つける方法はいくつかあります。

    • このコード例のフォルダ内にある run_list_buckets 実行可能ファイルを使用して、バケットの名前をプログラムで取得できます。

    • または、次の AWS CLI コマンドを使用して Amazon S3 バケットを一覧表示することもできます。

      $ aws s3 ls 2022-01-05 14:27:48 amzn-s3-demo-bucket
    • あるいは、AWS マネジメントコンソール エイリアスを使用することもできます。メインナビゲーションバーの [サービスの検索] に「S3」と入力します。バケットのページに、アカウントのバケットが一覧表示されます。

  2. コードを再ビルドし、更新された実行可能ファイル run_delete_bucket を実行します。

  3. AWS マネジメントコンソール または を使用して AWS CLI、前に作成した Amazon S3 バケットが削除されていることを確認します。