【WinSCP】MFA環境でAmazon S3にアクセスするための手順まとめ

AWS

2025.1.27

Topics

はじめに

こんにちは。kisaragi です。

今回は、MFA 環境で WinSCP を利用して S3 へアクセスする方法をご紹介します。
この記事では MFA 環境での方法を解説いたします。MFA がない環境の場合は下記のブログをご参照ください。

関連記事
Amazon S3とローカルPCをWinSCPでシンプルにファイル共有してみた

この記事、何がうれしい?

組織のセキュリティ要件上、MFA が必要になる場合がありますが、WinSCP は MFA 環境での Amazon S3 アクセスをサポートしていません。
その時、Assume Role を活用することで MFA 環境でも WinSCP で S3 にアクセス出来る裏ワザを紹介します!

前提

  • Windows 10
  • aws-cli/2.15.24
  • AWS IAM と S3 に対する十分な権限

事前準備

1. WinSCP のインストール

以下のリンクから WinSCP をインストールしてください。
WinSCP 6.3 Download

2. AWS CLI のインストール

以下のリンクを参考にし、AWS CLI をインストールしてください。
AWS CLI の最新バージョンのインストールまたは更新

AWS側の手順

1. S3 バケット作成

  • AWS コンソール画面から S3 サービスへ移動します。

  • バケット作成に移動します。

  • 任意のバケット名を入力し、バケットを作成します。(この記事では、デフォルトのまま作成します)


  • バケットが作成できたことを確認します。

2. IAM ポリシーの作成

  • 画像のポリシー3つを作成していきます。
STS ポリシーの作成 【Click】

– AWS コンソール画面から IAM ポリシーへ移動します。

  • ポリシーの作成へ移動します。

  • ポリシーエディタを JSON に変更し、下記のサンプル JSON を入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}
  • 任意のポリシー名を入力し、作成します。

MFA 強制ポリシーの作成 【Click】

– AWS コンソール画面から IAM ポリシーへ移動します。

  • ポリシーの作成へ移動します。

  • ポリシーエディタを JSON に変更し、下記のサンプル JSON を入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowListActions",
            "Effect": "Allow",
            "Action": [
                "iam:ListUsers",
                "iam:ListVirtualMFADevices"
            ],
            "Resource": "*"
        },
        {
            "Sid": "AllowUserToCreateVirtualMFADevice",
            "Effect": "Allow",
            "Action": [
                "iam:CreateVirtualMFADevice"
            ],
            "Resource": "arn:aws:iam::*:mfa/*"
        },
        {
            "Sid": "AllowManageOwnPasswords",
            "Effect": "Allow",
            "Action": [
                "iam:ChangePassword",
                "iam:GetUser"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowUserToManageTheirOwnMFA",
            "Effect": "Allow",
            "Action": [
                "iam:EnableMFADevice",
                "iam:GetMFADevice",
                "iam:ListMFADevices",
                "iam:ResyncMFADevice"
            ],
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        },
        {
            "Sid": "AllowUserToDeactivateTheirOwnMFAOnlyWhenUsingMFA",
            "Effect": "Allow",
            "Action": [
                "iam:DeactivateMFADevice"
            ],
            "Resource": [
                "arn:aws:iam::*:user/${aws:username}"
            ],
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        },
        {
            "Sid": "BlockMostAccessUnlessSignedInWithMFA",
            "Effect": "Deny",
            "NotAction": [
                "iam:ChangePassword",
                "iam:CreateVirtualMFADevice",
                "iam:EnableMFADevice",
                "iam:ListMFADevices",
                "iam:ListUsers",
                "iam:ListVirtualMFADevices",
                "iam:ResyncMFADevice",
                "sts:GetSessionToken"
            ],
            "Resource": "*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        }
    ]
}
  • 任意のポリシー名を入力し、作成します。


S3 バケットポリシーの作成 【Click】

– AWS コンソール画面から IAM ポリシーへ移動します。

  • ポリシーの作成へ移動します。

  • ポリシーエディタを JSON に変更し、下記のサンプル JSON を入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::[バケット名]"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::[バケット名]/*"
            ]
        }
    ]
}
  • 任意のポリシー名を入力し、作成します。

3. IAM ユーザーの作成

  • AWS コンソール画面から IAM ユーザーへ移動します。

  • ユーザーの作成へ移動します。

  • 任意のユーザー名を入力します。

  • ポリシーを直接アタッチするを選択後、作成した STS ポリシーと MFA ポリシーを選択します。

  • ユーザーを作成します。

4. IAM ロールの作成

  • AWS コンソール画面から IAM ロールへ移動します。

  • ロールを作成へ移動します。

  • カスタム信頼ポリシーを選択後、下記のサンプル JSON を入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[AWSアカウントID]:user/[作成したIAMユーザー名]"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
  • 作成したバケットポリシーを選択します。

  • 任意のロール名を入力し、作成します。


5. アクセスキーの発行

※ アクセスキーの取り扱いは、細心の注意を払う必要があります。
本章を実施する前に、以下のドキュメントをご確認ください。

AWS アクセスキーを管理するためのベストプラクティス

  • AWS コンソール画面から IAM ユーザーへ移動します。

  • 先ほど作成したユーザーへ移動します。

  • アクセスキーを作成へ移動します。

  • その他に設定します。

※ アクセスキーとシークレットキーを控えます。シークレットキーは、後で確認できないため、.csvファイルもダウンロードしておきます。

(これらのキーは、パブリックな場所や外部から閲覧可能な場所へ決して置かないでください。)

6. MFA 設定

  • AWS コンソール画面から IAM ユーザーへ移動します。

  • 先ほど作成したユーザーへ移動します。

  • セキュリティ認証情報タブから MFA デバイスの割り当てへ移動します。

  • MFA デバイスが登録されたことを確認します。

クライアント側の手順

1. credentials ファイルの初期設定

  • 以下のパスに aws cli のための credentials ファイルを作成します。
C:\Users\<ユーザー名>\.aws\credentials
  • credentials ファイルの中身に作成したIAMユーザーのアクセスキー情報を入力します。

2. Assume Role

  • AWS CLI 実行のため、cmd を実行します。

  • AWS CLI に下記のコマンドを入力し、Session Token を発行します。
aws sts get-session-token --serial-number ${MFAのarn} --token-code ${MFAコード} --duration-seconds ${お好きな有効期限} --profile ${credentialsの名前}

  • 取得した Session Token を Credentials ファイルに収納します

  • 続いて Assume Role 認証情報を取得し、Credentials ファイルに収納します

3. WinSCP の設定

  • WinSCP を実行します。

  • 画像のように設定の上、設定へ移動します。

  • リモートディレクトリーに S3 バケット名を入力します。

  • Assume Role のセッショントークン情報を入力します。

  • Assume Role のアクセスキーを入力します。

  • S3 バケットにアクセスし、index.html ファイルをアップロードしてみます。

  • 無事に S3 バケットにアップロードできたことを確認します。

最後に

本記事では、MFA 環境でも WinSCP で Amazon S3 にアクセスする方法をご紹介しました。WinSCP は MFA 環境での Amazon S3 アクセスを直接サポートしていないため、Assume Role を活用するなどの方法が必要となります。

この記事が、MFA 環境において WinSCP を用いて Amazon S3 へアクセスしたい人に届けば幸いです!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

kisaragi

- 2024 Japan AWS Jr. Champions

2023年度新卒入社。出身は韓国です。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら