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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

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

Q&A

0回答

1105閲覧

aws-sdk-php で継承したプロファイル認証情報を参照したい

mixberryparfait

総合スコア21

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

AWS(Amazon Web Services)

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

0グッド

0クリップ

投稿2020/12/16 04:13

編集2020/12/17 08:38

前提・実現したいこと

複数の AWS オーガニゼーションにアクセスするため
1つのベースアカウントから継承ロールを利用しています

~/.aws/credentials

[default] aws_access_key_id = xxxxx aws_secret_access_key = xxxxx

~/.aws/config

[default] region = ap-northeast-1 [profile staging] source_profile = default role_arn = arn:aws:iam::xxxxx:role/xxxxx

という設定で環境変数に

export AWS_PROFILE=staging

を設定して

aws s3 ls

を実行すると arn:aws:iam::xxxxx がオーナーのオーガニゼーションのバケット一覧が参照できます

この状態で aws-sdk-php でもソース内に認証情報をかかずに S3 にアクセスしたいです

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

AWS SDK for PHP バージョン 3 での Amazon S3バケットの作成と使用
この AWS 公式のサンプルコードをコマンドラインから実行したところ
Fatal error: Uncaught Aws\Exception\CredentialsException: Error retrieving credentials from the instance profile metadata service. (cURL error 7: (see https://curl.haxx.se/libcurl/c/libcurl-errors.html)) ...
というエラーになってしまいます

該当のソースコード

test.php

php

1<?php 2require_once "vendor/autoload.php"; 3 4$s3Client = new Aws\S3\S3Client([ 5 'region' => 'ap-northeast-1', 6 'version' => 'latest' 7]); 8 9//Listing all S3 Bucket 10$buckets = $s3Client->listBuckets(); 11foreach ($buckets['Buckets'] as $bucket) { 12 echo $bucket['Name'] . "\n"; 13 break; 14} 15?>

試したこと

aws-sdk-ruby の場合は

ruby

1require "rubygems" 2require 'aws-sdk' 3 4s3 = Aws::S3::Resource.new 5 6s3.buckets.limit(10).each do |b| 7 puts "#{b.name}" 8end

このような何の設定もしないクライアントの作り方ですんなり動作します

さすがに同じ aws が作ってる aws-sdk-php と aws-sdk-ruby で
サポートする設定ファイルの記述が違うということはないと思いたいのですが

AWS 認証情報ファイルと認証情報プロファイルの使用
こちらの aws-sdk-php v3 公式ドキュメントにも

AWS_PROFILE 環境変数を設定するかクライアントをインスタンス化する際の profile オプションを選択することで、project1 で特定されたロールは、default プロファイルをソース認証情報を使用して継承されます。

とあって優先順位はインスタンスメタ情報より優先されるはずで書き方も間違ってないと思うのですが
プロファイル情報が参照されずにインスタンスメタ情報を探しに行ってエラーになっているようです

自分の設定ミス等があればご指摘いただけると幸いです

補足情報(FW/ツールのバージョンなど)

OS: MacOS X

PHP 7.3.11 (cli) (built: Jun 5 2020 23:50:40) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies

aws/aws-sdk-php: 3.154.1

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

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

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

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

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

yu_1985

2020/12/16 16:04

該当のPHPファイルはどのユーザで実行されるんでしょうか?
mixberryparfait

2020/12/17 08:19 編集

MAC上の一般ユーザ ~/.aws/credentials ~/.aws/config の所有ユーザです
yu_1985

2020/12/17 09:14

自分も手元で試してみましたが、たしかに環境変数にprofile設定しても読み込んでくれませんね…。 GitHubのIssueで聞いたほうがいいかもしれません。 https://github.com/aws/aws-sdk-php
mixberryparfait

2020/12/18 02:15

わざわざ検証ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問