MENU

Knowledge Oasisは主にAIとAWSの知識を共有するブログです。その他ITに関する知識やまれに生活に役立つ知識も共有するかもしれません。

KOふみ
名前はKOふみ(こふみ)。独立系SIerで20年のキャリアを持ち、新人研修の講師から請負開発まで幅広く経験。現在はAIを駆使したソリューション開発に従事。資格は応用情報技術者、データベーススペシャリスト、プロジェクトマネージャー、PMP、簿記2級。AWS学習中で、将来はAWSアンバサダーを目指す。

【AWS Technical Essentials】S3デモンストレーションの攻略法

【AWS Technical Essentials】S3デモンストレーションの攻略法
  • URLをコピーしました!

AWSの学習でAWS Technical Essentialsを進めています。なかなかすんなり進めません。S3のデモでも動画の通りでは動いてくれませんでした。私が対応した方法をご紹介します。

目次

動画で抜けているポイント

「デモンストレーション: Amazon S3 バケットを作成する」では動画の情報が古いということはなかったと思います。しかし、何も説明がなくどうしたらいいの? と悩むポイントがいくつかありました。

S3のバケットポリシーに記述するPrincipal?

S3のバケットポリシーを編集する箇所で動画ではペタっとコピペされますが、自分で動かすには自分で記述する必要があります。その際に何を入力して良いのか説明がなかったのがPrincipalについてです。

バケットポリシーを動画の画面から写経するのは面倒なので載せておきます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowS3ReadAccess",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::012345678910:role/ATE-EmployeeDirectoryAppRole"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::ate-employee-photo-bucket-001",
                "arn:aws:s3:::ate-employee-photo-bucket-001/*"
            ]
        }
    ]
}

Principalに入力する値はモジュール1の「AWS ロールベースのアクセス」で作成したロールの値です。IMAのロールからコピーしてPrincipalの値として入力します。Resourceの値も変える必要がありますが、デモの前半で作成したS3のバケット名なのでここは動画を見ていれば分かると思います。

「AWS ロールベースのアクセス」で作成したIAMロールのARNをコピーします。
「AWS ロールベースのアクセス」で作成したIAMロールのARNをコピーします。

動作確認でS3への接続が有効にならない

動画ではS3のバケットポリシーを変更して動作確認に進むのですが上手く行きません。S3 Access Enabledがのままです。RegionとAZも正しく表示されていませんが、これらはそのままでも動きました。

EC2インスタンスにログインしてログを仕込んで調査してみると以下のエラーが発生していました。

Error in hasS3Access: Error [CredentialsError]: Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1
    at IncomingMessage.<anonymous> (/var/app/node_modules/aws-sdk/lib/util.js:930:34)
    at IncomingMessage.emit (node:events:531:35)
    at IncomingMessage.emit (node:domain:488:12)
    at endReadableNT (node:internal/streams/readable:1696:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  statusCode: 404,
  retryable: false,
  time: 2024-06-18T23:36:13.548Z,
  code: 'CredentialsError',
  originalError: {
    message: 'Could not load credentials from any providers',
    statusCode: 404,
    retryable: false,
    time: 2024-06-18T23:36:13.547Z,
    code: 'CredentialsError',
    originalError: {
      message: 'EC2 Metadata roleName request returned error',
      statusCode: 404,
      retryable: false,
      time: 2024-06-18T23:36:13.547Z
    }
  }
}

原因を調べてみるとEC2からS3へのアクセス権限が足りていないようです。ChatGPT先生に相談するとアクセスキーが設定されていないと指摘されたのですが、アクセスキーを作成しに行こうとするとAWSコンソールではかなり強めにお勧めしないと言ってきます。アクセスキーを作るのはベストプラクティスではなさそうなので別の対応を調べました。

AWSサービス間の権限制御もIAMロールで行うということでEC2のIAMロールを確認したところ設定されていません。過去の動画を見直したのですがどこでもIAMロールを設定する手順はありませんでした。

上記の記事の対応を行うことで上手く動きました。

まとめ

「デモンストレーション: Amazon S3 バケットを作成する」で動画では分かりにくい部分を解説しました。どちらもIAMロールに関する設定でした。IAMロールについての理解が深まった気がします。こうやって調査させて理解をさせることを意図した動画ならば凄いと思うのですが、そんなことはないですよね……。

同じようにAWS Technical Essentialsで学習を進めている人の役に立つことを願っています。

  • URLをコピーしました!

コメント

コメントする

目次