ECSからS3にアクセスする方法


何をしたいか

ECSでlaravelアプリをホストしています。
サムネイルの表示や更新にS3を利用しているため、ECSでホストしたLaravelアプリからS3にアクセスしたいです。
ECSからS3を利用する場合、開発環境で行っていた方法とは少し異なるため記事にしました。

開発環境でのやり方

IAMでS3バケットを作成するアカウントを作成します。
そのアカウントでS3バケットを作成します。
.envを以下の様に編集します。

AWS_ACCESS_KEY_ID=******************** //先ほど作成したアカウントのアクセスキーID
AWS_SECRET_ACCESS_KEY=******************** //先ほど作成したアカウントのシークレットアクセスキー
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=バケット名
AWS_URL=https://s3-ap-northeast-1.amazonaws.com/バケット名/

おそらくこれで開発環境で作成したアプリからS3にアクセスできると思います。

本番環境(ECS)でのやり方

ECSからS3にアクセスする場合ECSタスクロールにS3アクセスのための権限を付与する必用があります。

ecs_task_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:ReplicateObject",
            "s3:DeleteObject"
            ],
            "Resource":"arn:aws:s3:::バケット名/*"
        }
    ]
}

.envは以下の様に編集します。

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=ap-northeast-1
AWS_BUCKET=バケット名
AWS_URL=https://s3-ap-northeast-1.amazonaws.com/バケット名/

これでECSからS3にアクセスできると思います。