質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

2130閲覧

タスク用のIAMロールを用いてFargateで起動したコンテナからS3操作をしたい

owatata

総合スコア25

SDK

SDK(software development kit)は特定のハードウェアのプラットフォーム、開発環境又はソフトウェアパッケージでソフトウェアをつくるのに必要な開発ツールのセットです。SDKはAPI、IDE又は他の開発ツールとフレームワークを組み合わせたもので構成されていることがあります。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

1クリップ

投稿2022/07/09 02:05

編集2022/07/12 00:10

前提

Fargateで起動したコンテナからIAM roleを用いてS3にファイルをアップロードしたいと考えています。

下記ページを参考に、

IAMポリシー, IAMロールを作成。
ECSのタスク定義にてタスクロールに作成したIAMロールを選択し、
コンテナ内から169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URIを実行することで認証情報取得ができています。

実現したいこと

上記前提にて、

AWSJavaScriptSDK(v2)のAWS.S3のupload() を用いてファイルをアップしようと試みています。

発生している問題・エラーメッセージ

error InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.

該当のソースコード

javascript

1const creds = await axios.get(`http://169.254.170.2${process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI}`); 2accessKeyId = creds.data.AccessKeyId; 3secretAccessKey = creds.data.SecretAccessKey; 4// securityToken = creds.data.Token; 5 6AWS.config.update({ 7 credentials: new AWS.Credentials({ 8 accessKeyId: accessKeyId, 9 secretAccessKey: secretAccessKey, 10 }) 11}); 12 13const S3 = new AWS.S3({ 14 apiVersion: '2006-03-01', 15 // accessKeyId: accessKeyId, 16 // secretAccessKey: secretAccessKey, 17 region: 'ap-northeast-1', 18 params: { Bucket: 'bucketName' }, 19}); 20 21S3.upload( 22 { 23 Key: xxxxxx, 24 Body: xxxxxx, 25 ACL: 'public-read', 26 ContentType: file.mime, 27 }, 28 (err, data) => { 29 ...... 30 } 31);

試したこと

s3の権限を持つIAMユーザーのアクセスキーとシークレットキーを上記コードにベタ書きした場合はアップできました。

AWS.config.update() を使わずに、new AWS.S3()のみを使用した場合も同じエラーでした。

STS temporary credentials: "Access Key Id you provided does not exist" から、
169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URIから取得できる
"Token": "SECURITY_TOKEN_STRING"x-amz-security-tokenとして使用すれば良いのか?
と考えているのですが、AWSJavaScriptSDKで扱うにはどうすればよいのかわからないでいます。

対応方法をご教示いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

正直Node.jsはあまり詳しくないのですが・・・

AWS.config.updateするのをやめて、いきなりconst S3・・・で始まるコードに変えたらどうなるか、確認頂けないでしょうか?

awscliの話になってしまいますが、aws configureを一切行わなくても、aws sts get-caller-identityの結果は、タスクロールの権限となります。
※コード上でクレデンシャルを明示しなくても、ライブラリ側でコンテナメタデータにアクセスしてハンドリングしてくれる。
Node.jsも同じ仕組みなのではと考えました。

投稿2022/07/11 14:34

ninja250r

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

owatata

2022/07/12 00:28 編集

aws configure使わなくてもできるのはわかっていたのですが、いろいろ試している間にこの形になっていました。 (キーの使い方に差はないのかな?と思い、試したことには書かずに割愛していました) 下記のようにすれば、ということだと思うのですが結果は同じでした。 でも確かに、クレデンシャル発行されているのにnew AWS.Credentials()するのはおかしかったですね。 const S3 = new AWS.S3({ apiVersion: '2006-03-01', accessKeyId: credential.accessKeyId, secretAccessKey: credential.secretAccessKey, region: 'ap-northeast-1', params: { Bucket: 'bucketName' }, });
yu_1985

2022/07/12 01:37

ロールの権限を使うならアクセスキーとシークレットキーは渡さなくていいはずです。 Node.jsでどう定義するかについてはあまり把握してませんが、少なくとも明示的にキーを渡そうとするとそれを使おうとしてしまいます。
owatata

2022/07/12 02:35

おお。`error AccessDenied: Access Denied` に変わりました。 IAM周り見直してみます
owatata

2022/07/12 08:28

解決しました。 ありがとうございます。
ninja250r

2022/07/12 13:48

良かったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問