こんにちは。ガジュマル育ててる人です。
前回に引き続きAWS Security Token Service (AWS STS)を使用して、一時的な認証をもつユーザーを発行して、そのユーザーによってS3の操作をしてみようかと思います。
前編で下準備を行ったので、前編を見ていないかたは前編からどうぞ!
いざ実践!
前編で準備したSTSを発行するためのユーザーをEC2等のクレデンシャルに設定しましょう。
EC2はAWSコマンドを実施する必要があるので、ない方はAWSコマンドを公式から入手するか、Amazon Linuxのプリインストールされているものを準備してください。
AWS画面よりsts-s3-upload-userのセキュリティ認証情報より、アクセスキーを作成してください。
上記で入手したアクセスキーとシークレットキーをsts-userのプロファイル名でEC2に設定します
$ aws configure --profile sts-user
AWS Access Key ID [None]: *******************
AWS Secret Access Key [None]: ***************************
Default region name [None]:
Default output format [None]:
次に事前に作成したsts-s3-example-roleのARNをコピーしてください。
それでは下記コマンドを入力してみましょう!
※ARNはそれぞれの環境のものを入力してください
$ aws sts assume-role --role-arn [上記でコピーしたARN] --role-session-name s3 --duration-second 900 --profile sts-user
{
"AssumedRoleUser": {
"AssumedRoleId": "AROASKSDXQVVUNV6JNP7W:s3",
"Arn": "arn:aws:sts::*********:assumed-role/sts-s3-example-role/s3"
},
"Credentials": {
"SecretAccessKey": "*************************",
"SessionToken": "******************************************************************************************************************",
"Expiration": "2023-02-27T09:10:14Z",
"AccessKeyId": "*****************"
}
}
これで、アクセスキー、シークレットキー、セッショントークンが発行されます。
ちなみにaws sts assume-role 各パラメータは下記です。
--role-session-name [任意のセッション名]
--duration-second [発行するクレデンシャルの有効期限]
--profile [stsを発行するためのクレデンシャル名]
発行されたアクセスキー、シークレットキー、セッショントークンを環境変数にいれて、awsコマンドを実行するとs3の中身を確認できました!
$ export AWS_ACCESS_KEY_ID=*****************
$ export AWS_SECRET_ACCESS_KEY=*************************
$ export AWS_SESSION_TOKEN=*************(以下略)
$ aws s3 ls s3-fs-example-bucket
2023-02-27 08:57:06 0 example.txt
$ touch test.txt
$ ls
test.txt
$ aws s3 mv test.txt s3://s3-fs-example-bucket/
move: ./test.txt to s3://s3-fs-example-bucket/test.txt
$ aws s3 ls s3-fs-example-bucket
2023-02-27 08:57:06 0 example.txt
2023-02-27 09:03:02 0 test.txt
20分後に再度確認したところきちんと無効化されていました!
$ aws s3 ls s3-fs-example-bucket
An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
最後に
今回はSTSを使った一時的な認証ユーザーにてS3を操作してみました。
実際に使用例としてはアプリに組み込んで、発行したユーザー情報を渡してアップロードなどしてもらうことが多そうです。
漏洩すると困るユーザー情報に有効期限を付けることで、万が一ユーザー名が漏れても大丈夫なSTS、応用すると多くのことができそうなので、もっと勉強していこうと思います!
それではまた!