0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS SDK for PHPにMFA認証・AssumeRoleを使用する

Last updated at Posted at 2025-02-08

やりたいこと

・ AWS SDK for PHPを使用してローカル環境からS3等を使用したい
・ IAMユーザの権限はAssumeRoleのみ
・ IAMユーザを使用するにはMFA認証を必須としたい
・ IAMユーザのアクセスキーは「~/.aws/credentials」にのみ保存したい

事前準備(詳細は割愛)

・IAMユーザの作成
・IAMユーザにMFA認証を追加
・IAMユーザのアクセスキー発行
・IAMユーザの権限はAssumeRoleのみ(MFAを必須とする)
・ロールの作成
・ロールの権限は必要な権限(S3とか)を付与
・ロールの信頼関係に作成したIAMユーザを追加
・~/.aws/credentialsに発行したアクセスキー等を登録

困っていたこと

AWS SDK for PHPの開発ガイドにはロールの引き受け(AssumeRole)や一時的な認証情報に関することが記載されているがMFA認証に関する記述がなかった

こっちにはPythonではあるがMFA認証&AssumeRoleを使用したS3へのアクセス方法が記載されているが、MFAの認証コード(30秒のワンタイムパスワード)を使用しており、現実的ではない
※自分がやりたいのはDockerコンテナ内で起動するWEBアプリケーションである
特定のページへアクセスした際にS3等を使用するので事前にワンタイムパスワードを設定することは困難である

解決策(とりあえず感があるけど)

まずはコード

    {
        $this->s3 = new S3Client([
            'version' => 'latest',
            'region' => 'ap-northeast-1',
            'credentials' => [
                'key' => env('AWS_ACCESS_KEY_ID'),
                'secret' => env('AWS_SECRET_ACCESS_KEY'),
                'token' => env('AWS_SESSION_TOKEN'),
            ],
        ]);
    }

環境変数に下記3つを登録(設定する値は後述)
・AWS_ACCESS_KEY_ID
・AWS_SECRET_ACCESS_KEY
・AWS_SESSION_TOKEN

CLIコマンドを使用して一時的な認証情報を取得

aws sts assume-role --role-arn "AssumeRoleのロールarn" --role-session-name "temp-session(任意のセッション名)" --serial-number "登録したMFAのarn" --token-code "123456(MFAの認証コード)" --profile credentialsに登録した名前(デフォルトの場合は不要かな?)

このコマンドの結果は以下

{
    "Credentials": {
        "AccessKeyId": "一時的なアクセスキー",
        "SecretAccessKey": "一時的なシークレットキー",
        "SessionToken": "一時的なセッショントークン",
        "Expiration": "有効期限(UTC)"
    },
略

ここで取得したAccessKeyId、SecretAccessKey、SessionTokenを環境変数(.envファイル等)に設定して、コンテナを起動することでコンテナ内で起動するWEBアプリケーションがAWSサービスを使用することができる

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?