flAWSレベル2、やる。
flawsやるシリーズ、今回はレベル2を進めます。
設問は次のとおりです。
The next level is fairly similar, with a slight twist. You're going to need your own AWS account for this. You just need the free tier.
ということで、今回は挑戦者自身のAWSアカウントが必要みたいです。自分のアカウントはすでに作成済みなのでよかったー!高額請求が発生したけど、ここで手間が省けたからよかったー!
ここではAWS CLIを使えるように設定する手順から始めます。
AWS CLI と IAM Identity Center の設定
まず公式の手順に沿って、ローカル端末にAWS CLIの最新バージョンをインストールします。
次にAWSコンソール上でIAM Identity Centerを有効化しユーザとグループを追加、
そして権限セットを設定しグループに割り当てます。
すると自分のAWSアカウントのIAM Identity Centerダッシュボード上に「AWSアクセスポータルのURL」が表示されます。
そして、さっきユーザーを追加したときのメール認証を済ませると、IAM Identity Centerのユーザー管理画面上で「アクティブなセッション」が追加されていることを確認できます。
これで必要な情報が揃ったので、ローカル端末のターミナルでaws configure sso
を実行します。
ウィザードに従って、以下の情報を入力します。
- セッション名
- アクセスポータルURL
- リージョン名
% aws configure sso
SSO session name (Recommended): xxxxxx
SSO start URL [None]: https://xxxxxx.awsapps.com/start
SSO region [None]: ap-northeast-1
SSO registration scopes [sso:account:access]:
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:
https://device.sso.ap-northeast-1.amazonaws.com/
Then enter the code:
XXXX-XXXX
「このURLでこのコードを入力してね」と表示されるのと同時に、ブラウザが自動的に起動するので、このターミナルに表示されたコードとユーザー名を入力するとログインできます。
ログインに成功してターミナルに戻ると、すでに次のウィザードが始まっているので、引き続きAWSアカウントのプロファイルを作成します。
The only AWS account available to you is: 00000000
Using the account ID 00000000
The only role available to you is: AdministratorAccess
Using the role name "AdministratorAccess"
CLI default client Region [ap-northeast-3]:
CLI default output format [json]:
CLI profile name [AdministratorAccess-00000000]: sso-admin
To use this profile, specify the profile name using --profile, as shown:
aws s3 ls --profile sso-admin
"CLI profile name"は任意の文字列です。
試しに、最終行の通りコマンドを実行してみます。
% aws s3 ls --profile sso-admin
2023-03-26 16:31:45 mybucket
自分のAWSアカウント上にあるS3バケットの一覧を見ることができました。(1こだけど)
これにてAWS CLIをIAM Identity Centerで認証させるまでが完了しました。
flAWSアカウントのS3バケット一覧を取得
たったいま実行したS3コマンドと同じ要領で、今度はflAWSレベル2のバケットを指定して、中身が見れるかやってみます。
% aws s3 --profile sso-admin ls s3://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud
2017-02-27 11:02:15 80751 everyone.png
2017-03-03 12:47:17 1433 hint1.html
2017-02-27 11:04:39 1035 hint2.html
2017-02-27 11:02:14 2786 index.html
2017-02-27 11:02:14 26 robots.txt
2017-02-27 11:02:15 1051 secret-e4443fc.html
見れます。
はい、レベル1と基本的に似ているので大きな感動はありません。見れるんだろうなと。
さてこのレベル2バケット内にもまた"secret"と命名されたファイルが確認できます。
シークレットは知りたくなるもののため、URLを次のようにしてアクセスしてみます。
http://level2-c8b217a33fcf1f839f6f1f73a00a9ae7.flaws.cloud/secret-e4443fc.html
クリアです。レベル1の解き方を一度知ると、レベル2は簡単に思えます。
今回の問題点
この設問は、S3バケットを設定した人が権限を間違えて付与していることが問題のようです。
この場合、「認証されたAWSユーザー」という権限がバケットに付与されていて、設定者は「(自分のAWSアカウントの)認証されたAWSユーザー」であると勘違いしてこれを付与してしまうケースがあります。
「認証されたAWSユーザー」権限は、実際にはAWSアカウントを持つユーザーのことを指すので、つまりAWSアカウントさえ持っていれば、世界中の誰でもアクセスできてしまうということです。
(これはネーミングが悪いのでは)
今現在ではAWSの管理画面からこの設定を行うことはできなくなっていますが、サードパーティ製のツールを介して設定できてしまう場合があるので、十分に注意が必要!ってことです。
Discussion