ロール切替をしてaws-sdk-phpを使う
環境別にアクセスキー・シークレットアクセスキーを変更せずスイッチロールを使ってアクセス環境を変更してみた
スイッチロールはこちらの記事を参考
aws-sdk-phpの導入
PHP側でAWSを使うためaws-sdk-phpを使う
composerを使って導入
composer.json
{
"name": "sample/sample",
"authors": [
{
"name": "morita-toyscreation",
"email": "morita@toyscreation.jp"
}
],
"require": {
"aws/aws-sdk-php": "3.*"
}
}
インストール
$ composer install
ユーザー追加
ロール切替のポリシー sts:AssumeRole
ポリシーを持ったアカウントを作成しアクセスキー・シークレットアクセスキーを取得
- "TargetAccountID" にはスイッチ先のアカウントIDを入力
- "TargetAccountRoleName" はスイッチ先のロールとして作成したロール名を指定
例:
{
"Version": "2012-10-17",
"Statement":
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "arn:aws:iam::<TargetAccountId>:role/<TargetAccountRoleName>"
}
]
}
PHP側
toyscreation-sandboxにアクセス可能なロールに切替
<?php
require '../vendor/autoload.php';
use Aws\Credentials\CredentialProvider;
use Aws\Credentials\AssumeRoleCredentialProvider;
use Aws\S3\S3Client;
use Aws\Sts\StsClient;
// 1. スイッチロールはSTS権限が必要
$stsclient = new StsClient(
[
'version' => 'latest',
'region' => 'ap-northeast-1',
"credentials" => [
'key' => "xxx",
'secret' => "xxx"
],
]
);
// 2. toyscreation-sandboxにロール切替
$assumeRoleCredentials = new AssumeRoleCredentialProvider([
'client' => $stsclient,
'assume_role_params' => [
'RoleArn' => "arn:aws:iam::097754223854:role/toyscreation-sandbox",
'RoleSessionName' => 'toyscreation-sandbox',
],
]);
$provider = CredentialProvider::memoize($assumeRoleCredentials);
// 3. toyscreation-sandboxはS3アクセス可能
$client = new S3Client([
'version' => 'latest',
'region' => 'ap-northeast-1',
'credentials' => $provider
]);
$objectContent = $client->listObjects([
'Bucket' => "toyscreation-sandbox",
])['Contents'];
toyscreation-sandbox
toyscreation-prod
など複数ロールの権限があれば RoleArn
RoleSessionName
を書き換えることで一つのアカウントで環境切替が可能
$assumeRoleCredentials = new AssumeRoleCredentialProvider([
'client' => $stsclient,
'assume_role_params' => [
'RoleArn' => "arn:aws:iam::689371460795:role/toyscreation-prod",
'RoleSessionName' => 'toyscreation-prod',
],
]);
まとめ
コンソールアクセスはスイッチロールを使う人は多いが、プログラムのアクセスはあまり見かけなかったのでまとめみた。
アクセスキー、シークレットアクセスキーは最低限にして必要に応じてロール権限を与えることでセキュリティ、管理が楽になった
いいね!と思ったら LGTM お願いします
【PR】週末ハッカソンというイベントやってます! → https://weekend-hackathon.toyscreation.jp/about/