LoginSignup
1
0

More than 3 years have passed since last update.

S3への画像アップロード権限をRoleを用いて付与し、セキュアに保つ。

Posted at

IAMからロールを作成しアタッチする

ユーザーのsecretキー、IDキーを作成する方法の場合キーが漏洩した際にインシデントになり得る。

なので極力ロールを作成して、それをインスタンスや、ECSのタスクにアタッチしていく。

ロールの作成方法

ロールは複数のポリシーが紐づいて構成されるのでまずポリシーを作る

image.png

サービスはS3を選択

image.png

アクションは権限を指定する、必要最低限にするべき。

画像アップロードに必要な権限は2つなのでこれだけ付与する

  • PutObject
  • PutObjectAcl

image.png

リソースを選択

ARNの追加をクリックするとダイアログが出るので、この権限で操作したいバケットを指定する。

image.png

バケット名はS3のバケット名をそのまま入れれば良い、この場合は hoge-fuga-piyo

image.png

リクエスト条件は空で良いがIP制限はかけても良いかもしれない。

ロールを作成する

EC2に画像アップロード権限を付与するならこちらをそのまま選択

image.png

ECSのタスクに紐づけたい場合

実は選択肢にないので、一旦EC2を選択で良い(あとで変更する)

Attachアクセス権限ポリシー

ここで、先ほど作成したポリシーを付与する。

タグはなくても良い、任意。

ECSのタスクに紐づけるばあいは、信頼関係の編集

image.png

このページの編集ボタンを押す。

ECSに紐づける設定を追記する
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

そしたらあとは簡単

ECSのタスク定義から対象のタスクを選択し、新しいリビジョンを作成

タスクロールの場所に先ほど追加したロールがあれば成功

ない場合は再度ECSに紐づける設定を追記する工程を見直す。

image.png

アプリケーションコードをちょっと修正する

AWSのキーを用いて画像をアップロードする仕組みになっていると思うので、使わない実装にする

例えばLaravelなら null に設定するなど(ライブラリ使ってます。

        's3' => [
            'driver' => 's3',
            'key' => null,
            'secret' => null,
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
        ],

完了

これで終わり。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0