はじめに
AWSのEC2にアクセスキーを発行するのはアンチパターン。
キーが盗まれて使われることがあるので、キーは発行しないのが一番良い。
EC2にIAMロールっていう一時的なアクセスキーを発行するのが良いパターン。
Pythonで使う
run.py
import boto3
session = boto3.session.Session(profile_name='prodaccess')
credentials = session.get_credentials()
# この値をbotoとかで自由に使って。
print(credentials.access_key)
print(credentials.secret_key)
print(credentials.token)
PHPで使う
Laravelで使う
aws-sdk-php-laravelってライブラリがある。
aws-sdk-php-laravel
IAM Roleを使ってAWS ElasticSearch ServiceのデータをLaravelで取得する
公式 AWS SDK for PHP への一時認証情報の提供
composer require aws/aws-sdk-php
composer.json
{
"require": {
"aws/aws-sdk-php-laravel": "~3.0"
}
}
公式の通りだけど
PHP SDKを直で使う
createTokenがよし何やる。
ここにもサンプルはある。
$token = $RdsAuthGenerator->createToken($clusterEndpoint . ":" . $clusterPort, $clusterRegion, $dbUsername);
$mysqli = mysqli_init();
mysqli_options($mysqli, MYSQLI_READ_DEFAULT_FILE, "./my.cnf");
$mysqli->real_connect($clusterEndpoint, $dbUsername, $token, $dbDatabase, $clusterPort, NULL, MYSQLI_CLIENT_SSL);
if ($mysqli->connect_errno) {
echo "Error: Failed to make a MySQL connection, here is why: <br />";
echo "Errno: " . $mysqli->connect_errno . "<br />";
echo "Error: " . $mysqli->connect_error . "<br />";
exit;
}
/***** Example code to perform a query and return all tables in the DB *****/
$tableList = array();
$res = mysqli_query($mysqli,"SHOW TABLES");
while($cRow = mysqli_fetch_array($res))
{
$tableList[] = $cRow[0];
}