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

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

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

今回から全二回でAWS Security Token Service (AWS STS)を使用し、一時的な認証をもつユーザーを発行してそのユーザーによってS3の操作をしてみようと思います!

実際はアプリなどに組み合わせて、一時的な認証を与えたユーザーからS3バケットへオブジェクトをアップロードや削除するといった使い方があるようですね。
認証は一時的なものなので、万が一、ユーザー情報が漏れたとしても一定期間以降使用不可になるものです。

今回は前編ということで、AWSのコンソールからSTSでユーザーを発行する下準備までやっていきます。

 

 

目次

①AWSコンソールでSTSの発行を許可する

AWSの公式ドキュメントに従ってAWSコンソールよりリージョンごとにSTSステータスがアクティブになっているか確認する。アクティブになっていない場合は、アクティブしておく。
今回は東京リージョンで実施するためすでにアクティブ済み。

②操作するS3バケットの作成

操作するS3バケットを作成します。今回は[s3-fs-example-bucket]という名前のS3バケットを作成しました。
あとはデフォルト設定で作成してしまいます。

 

③IAMよりSTSを発行するユーザーを発行する。

STSを呼び出すためのIAMユーザーを発行する。

今回はユーザー名[sts-s3-upload-user]にて作成
このユーザーには⑤にて再度設定を行うが、ここでは作成のみを行う

 

 

 

④S3を操作するためのIAMロールを準備する。

実際にSTSにて発行されるユーザーに付与したいIAMロールを準備していきます。
今回は、対象のS3バケットの中身の確認とアップロードする権限を付与していきます。

それではAWSコンソールからIAMのサービスからロールの画面に移動して
[ロールを作成]をクリック

AWSのサービスを選択し、他の AWS のサービスのユースケースに[S3]を入力

ポリシーを作成をクリック

JSONで下記を入力
※[バケット名]はそれぞれのS3バケット名を入力してください

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::[バケット名]/*"
        }
    ]
}

ポリシーの名前を設定し、[ポリシーを作成]をクリック



IAMロールの画面にてポリシーのリロードを行い、先ほど作成したロールを選択し、次へをクリック

そのまま、作成したいロール名を入力して作成する。
今回は[sts-s3-example-role]として作成した。
作成したIAMロールを選択し、信頼ポリシーを編集をクリック

下記を入力してポリシーを更新をクリック

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::[AWSアカウントID]:user/[③で作成したIAMユーザー名]"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

 

 

⑤IAMユーザーに追加設定をする

ここまでくれば、もうひと踏ん張りです。頑張りましょう。

③で作成したユーザーにインラインポリシーを追加します。

下記をJSON形式で入力
今回だと④で作成したIAMロール名はsts-s3-example-roleが入ります。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": "arn:aws:iam::[AWSアカウントID]:role/[④で作成したIAMロール名]"        }
    ]
}

最後にインラインポリシー名を入力して、ポリシーを作成

次回予告

少し、ややこしい手順になりましたが、今回のもので準備編は終わりです。
次回は準備したユーザーやSTSアカウントを利用して実際にS3を操作するところをお見せします!

もし、個人的に書きたくなったら解説回も作ろうと思います

それではまたお会いしましょう!