5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ロール切替をしてaws-sdk-phpを使う

Last updated at Posted at 2021-05-29

ロール切替をして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 ポリシーを持ったアカウントを作成しアクセスキー・シークレットアクセスキーを取得

  1. "TargetAccountID" にはスイッチ先のアカウントIDを入力
  2. "TargetAccountRoleName" はスイッチ先のロールとして作成したロール名を指定

例:

{
    "Version": "2012-10-17",
    "Statement": 
        {
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::<TargetAccountId>:role/<TargetAccountRoleName>"
        }
    ]
}

PHP側

toyscreation-sandboxにアクセス可能なロールに切替

このコンソール操作をPHP側で行う
screencapture-signin-aws-amazon-switchrole-2021-05-29-13_39_28.png

<?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 お願いします :clap::clap::clap:

【PR】週末ハッカソンというイベントやってます! → https://weekend-hackathon.toyscreation.jp/about/

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?