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のバケット名なのでここは動画を見ていれば分かると思います。
動作確認で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で学習を進めている人の役に立つことを願っています。
コメント