CyberduckでMFAを利用してS3へ接続するための導入手順まとめ(Windows 10)

Windows 10でCyberduckを利用してS3にアクセスしたいけど、MFA周りのIAM設定がシンドイという方向けに書いたよ!
2022.07.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!コンサル部のinomaso(@inomasosan)です。

S3のオブジェクト(バケットに保存したテキストや動画等のデータ)を操作したい場合、AWSマネジメントコンソールからだとフォルダ単位でダウンロードできません。

AWS CLIのコマンドでフォルダ単位の操作もできますが、非エンジニアの方がS3を利用する場合は敷居が高くなってしまいます。
3rd Party製のアプリケーションであるCyberduckですとグラフィカルに操作できますので、今回はWindows 10での導入方法をまとめてみました。

Cyberduck以外に対応しているツールはないの?

Windows端末をメインで利用されているのであれば、WinSCPもS3に対応しております。
ただWinSCPは後述するMFAに対応していないようでしたので、今回は採用を見送りました。

WinSCPをご利用したい場合は、以下のブログをご参照願います。

構成図

今回導入設定する構成図となります。

ちなみにIAMロールを使用せずIAMユーザーのアクセスキーとシークレットアクセスキーのみで、S3へ接続することも可能です。
ただCyberduckでMFAを利用する場合は、IAMユーザーからIAMロールへのAssumeRoleが必要となります。

AssumeRoleすることでIAMロールの権限を引き受けることができます。
詳細に知りたい方は、以下のお面ブログを見るとイメージで理解することができます。

また、IAMユーザのアクセスキーは永続的な認証情報となるため、外部へ漏洩したい場合の影響が大きかったりします。
一方、IAM Roleの場合は、使用時に一時的なセキュリティ認証情報を生成することができるので、セキュアな運用が可能となります。

AWS側の手順

各リソースの設定ポイントをまとめました。

S3バケット作成

S3バケットはオブジェクトをアップロードするための箱のようなものです。

検証目的でS3への接続を優先して試したい場合は、バケット名以外はデフォルト設定で問題ありません。
誤った操作からオブジェクトを復旧するためのバージョニング設定やオブジェクトの暗号化等は、S3バケット作成後にも設定変更可能です。

IAMポリシー作成

IAMコンソールから、必要なポリシーを作成していきます。

1.MFA+パスワード変更

MFAを設定しないと、MFA設定及びパスワード変更以外の各種アクションの操作が出来ないポリシーとなります。

{
    "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"
                }
            }
        }
    ]
}

2.AssumeRole許可

IAMユーザーのAssumeRoleを許可するポリシーです。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

IAMグループ作成

IAMユーザにIAMポリシーをアタッチすることもできるのですが、将来的な運用で権限の過不足等のミスが発生しやすいです。 そのため、IAMグループでIAMユーザの権限を管理を推奨いたします。

1.IAMポリシーアタッチ

先ほど作成した、MFA+パスワード変更AssumeRole許可をアタッチします。

IAMユーザー作成

1.ユーザの詳細

各ユーザがMFAを設定するためにAWS マネジメントコンソールへのユーザーアクセスを提供するをチェック願います。

2.IAMユーザーをIAMグループに追加

先ほど作成したIAMグループを選択します。

3.MFA設定

IAMユーザを作成後に、以下のブログを参考にMFAを設定願います。

アクセスキーIDとシークレットアクセスキーの認証情報を保管

画面にアクセスキーIDとシークレットアクセスキーが表示されますので、後述するAWS CLIの設定用にメモしておきます。 csvのダウンロードしておくと確実でしょう。

IAMロール作成

1.信頼されたエンティティを選択

信頼されたエンティティタイプカスタム信頼ポリシーを選択します。
AWSアカウントIDにAssumeRole元のIAMユーザを作成したAWSアカウントIDを入力してください。
このポリシーを設定することで、指定したAWSアカウントのIAMユーザがMFAを利用している場合に、IAMロールの権限を引き受けることができるようになります。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWSアカウントID>:root"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "Bool": {
                    "aws:MultiFactorAuthPresent": "true"
                }
            }
        }
    ]
}

2.IAMポリシーアタッチ

許可ポリシーでS3に対するアクセス権限を追加します。
今回は広めの許可を与えるために、AWSにて既存で用意されているAmazonS3FullAccessを追加します。

クライアント側の手順

AWS CLIインストール

以下のURLを参考にWIndows端末にAWS CLIをインストールします。

AWS CLIのクレデンシャル設定

1.ファイル作成

以下のパスにファイルを作成します。

C:\Users\<ユーザー名>\.aws\credentials

2.credentialsファイル設定

IAMユーザのプロファイル名IAMロールのプロファイル名には、それぞれ任意の名前を入力します。特にこだわりがなければIAMユーザー名と同様にすると管理しやすいかと思います。

アクセスキーIDとシークレットアクセスキーは、IAMユーザー作成時にメモしたものを使用します。

MFAデバイスの割り当てのARNとスイッチしたいIAMロールのARNは、AWSマネジメントコンソールから確認し入力願います、 MFAデバイスの割り当てのARNは認証状号タブのMFAデバイスの割り当て記載されています。 (仮想)の部分は不要となりますので注意願います。

credentials

[<IAMユーザのプロファイル名>]
aws_access_key_id = <アクセスキーID>
aws_secret_access_key = <シークレットアクセスキー>

[<IAMロールのプロファイル名>]
region = ap-northeast-1
output = json
mfa_serial = <MFA デバイスの割り当てのARN>
role_arn = <スイッチしたいIAMロールのARN>
source_profile = <IAMユーザのプロファイル名>

Cyberduckインストール

以下のサイトからCyberduckをダウンロードし、インストールします。

AssumeRole用のプロファイル保管

以下のリンク先に今回利用するS3 (Credentials from AWS Security Token Service).cyberduckprofileというプロファイルがありますのでダウンロードします。

以下のパスに先ほどダウンロードしファイルをコピーします。

C:\Program Files\Cyberduck\profiles\S3 (Credentials from AWS Security Token Service).cyberduckprofile

CyberduckでS3へ接続確認

先ほど作成したプロファイルをダブルクリックします。

接続設定が表示されるため、下記の用に設定後に右上のバツボタンから閉じます。

ブックマークが作成されるので、該当のブックマークをダブルクリックします。

MFA認証画面が表示されたら、ワンダイムパスワードを入力し続けるをクリックします。

S3のバケット一覧が表示されれば成功です。

参考

まとめ

CyberduckでMFAを利用してS3へアクセスしたい場合に必要な導入手順のまとめとなります。 IAMの設定周りを含んだ手順が中々見つからなかったので、無いならブログを作成すればいいじゃないの精神で書きました。

この記事が、どなたかのお役に立てば幸いです。それでは!