これはなに
タイトルの通りですが
- AWS IAM Identity Center(旧AWS SSO)のアクセス情報をもらった!けどCyberDuckでS3にアクセスできない!
- AWS IAM Identity Center(旧AWS SSO)に切り替えていきたい!けどCyberduckを利用しているメンバーにS3への接続方法をどう伝えれば…?
となっている人の助けになれば
お急ぎの方は
序文
(2024/09/04現在)
旧来はS3へのアクセスにIAMユーザを作成し
AWS_ACCESS_KEY_ID=XXX
AWS_SECRET_ACCESS_KEY=XXX
のようにアクセスキーを利用することが一般的だったように思います。
しかし最近はアクセスキーのような長期的認証情報を作成することは非推奨になっています。
IAM Identity Center
(旧AWS SSO
)がよく利用されるようになり、ブラウザやCLIから利用する分にはセキュアで大変便利です。
しかし、GUIアプリでは問題があります。
IAM Identity Centerでは一時的な認証情報が発行されますが、AWS_ACCESS_KEY_ID、AWS_SECRET_ACCESS_KEYの他に AWS_SESSION_TOKEN
の設定が必要です。
これに対応していない、または対応していても非常にわかりにくいものが多い印象です。
私はS3へのファイルアップロードにCyberDuckをよく利用しますが、設定が複雑だったのでここにまとめます。
Cyberduckでの設定方法
Cyberduck公式に記載があります。
https://docs.cyberduck.io/protocols/s3/#connecting-using-credentials-from-aws-command-line-interface
が、すんなり設定できなかったので噛み砕いて説明します。
前提条件
(必ずしもこれではないと動かないということはないと思いますが)
macOS Sonoma 14.6.1
Cyberduck 9.0.1
aws-cli 2.9.16
事前設定
Cyberduckのインストール
(インストール済みなら次へ)
AWS CLIのインストール
(インストール済みなら次へ)
インストールの確認は以下コマンドでバージョン番号が表示されること。
aws --version
AWS CLIにIAM Identity Centerの設定(profile)を追加
(設定済みなら次へ)
-
上記画面のURLを覚えておく
以下は https://xxx
.awsapps.com/start/... だった場合の設定例 -
AWS のprofile名を決める
ここではSOMEプロジェクト用のAWSアカウントのAdministratorAccessロールとしてxxx_some_admin
とする -
AWS CLIでSSOの設定をする
$ aws configure sso --profile xxx_some_admin SSO session name (Recommended): xxx-sso SSO start URL [None]: https://xxx.awsapps.com/start SSO region [None]: ap-northeast-1 SSO registration scopes [None]: sso:account:access
- ブラウザが起動してAWSへのアクセス許可を求められるので許可する
- ターミナルに戻る
- 利用できるAWSアカウントが列挙されるので選択する(例
999999999999
)- 1つしかない場合はスキップされるかも
- 利用できるロールが列挙されるので選択する(例
AdministratorAccess
)- 1つしかない場合はスキップされるかも
- リージョンを聞かれるので設定する(東京なら
ap-northeast-1
) - CLI default output formatを指定(大抵
json
で良い) -
~/.aws/config
に設定が追加される(テキストエディタで直接編集しても良い)[sso-session xxx-sso] sso_start_url = https://xxx.awsapps.com/start sso_region = ap-northeast-1 sso_registration_scopes = sso:account:access [profile xxx_some_admin] sso_session = xxx-sso sso_account_id = 999999999999 sso_role_name = AdministratorAccess region = ap-northeast-1 output = json
Cyberduckにprofile(cyberduckprofile)を追加
(設定済みなら次へ)
Cyberduckはprofile(拡張子.cyberduckprofile
)で接続方法を追加することができる。
以下のS3 (Credentials from AWS Command Line Interface) profile for preconfigured settings
をダウンロードしてダブルクリックする。
CyberDuckの環境設定→Profilesで上記が追加されていればOK
以上で事前準備は完了です
おつかれさまでした。
CyberduckでS3に接続する
いよいよ接続です。
AWS CLIでログインする
事前準備で設定したAWS profileでログインする。
以下ではxxx_some_admin
の例
aws sso login --profile xxx_some_admin
Cyberduckから認証情報を取得するためにもう1手間
(~/.aws/sso/cache
に認証情報がキャッシュされ、CyberDuckがこれを参照する)
aws sts get-caller-identity --profile xxx_some_admin
Cyberduckに接続情報を設定
ブックマーク編集画面で以下を設定
(設定済みなら次へ)
- (1)
S3 (Credentials from AWS Command Line Interface)
を選択 - (2) AWS profileを指定する
- (3) S3のバケット名を指定する
接続する
あとは通常通りブックマークから接続すればOKです。
うまくいかない時は
ここからデバッグログを確認できます。
AWSに強い人に助けを求めてみてください。
私の場合は、~/.aws/config
と ~/.aws/credentials
にコメントアウトした行があったのが原因でした。
感想
もっと簡単になってほしい!
おわり