前提
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で扱うにはどうすればよいのかわからないでいます。
対応方法をご教示いただけますと幸いです。
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/12 00:28 編集
2022/07/12 01:37
2022/07/12 02:35
2022/07/12 08:28
2022/07/12 13:48