S3の操作できる一時的なクレデンシャルを発行してみた【後編】

ガジュマル育ててる人
2023-03-03
2023-03-03

こんにちは。ガジュマル育ててる人です。

前回に引き続き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-arn [使用するロールのARN] 
--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、応用すると多くのことができそうなので、もっと勉強していこうと思います!

それではまた!