AWS

[AWS] 開発時に「Amazon S3」にファイルをアップロードする場合の権限設定

プログラムでファイルを「Amazon S3」にアップロードする方法は、色々なサイトでも紹介されております。
しかし、その場合にAWSのIAMの設定やS3のバケットポリシーの設定が必要となり、それらについての記載が少ないと感じました。
今回は開発時の設定方法を記載します。
なお本番運用時はEC2などにロールを付与することが一般的となります。
そのためユーザーの作成は開発用として利用することを前提としています。

1. AWSのIAMの設定

開発用にアクセスキーを取得する方法を記述します。
あくまで開発用のため、上記にも記載したように本番運用時はIAMロールを使用することをお勧めします。

  1. AWSのコンソールにログインし、IAMの画面に移動します。
  1. まずは「AmazonS3FullAccess」のポリシーを付与したグループを作成します。
  1. 次にユーザーを作成を行い、先程作成したグループを付与します。
  1. ユーザーを作成して、作成したユーザーの「セキュリティ認証情報」のタブに移動します。
  1. 下にスクロールし「アクセスキーを作成」をクリックし、アクセスキーIDとシークレットアクセスキーを取得します。
  1. 「ローカルコード」を選択し「次へ」をクリックします。
  1. 任意の説明を入力し「アクセスキーを作成」をクリックします。
  2. アクセスキーIDとシークレットアクセスキーがメモするか、csvファイルをダウンロードして控えておきます。
  1. また後ほど設定する「S3」のバケットポリシーで使用するため、ユーザーの「ARN」を控えておきます。

このアクセスキーIDとシークレットアクセスキーをenvファイルなどに記載し、
Gitのコミットに含めないようにしてください。

2. S3のバケットポリシーの設定

S3では基本的にCloudFrontなどを通じてアクセスすることが一般的です。
セキュリティとして直接アップロードが可能となるケースを絞り込むために
S3のバケットポリシーを設定しておきましょう。

  1. S3のコンソールにログインし、バケットを選択します。
  1. バケットの「アクセス許可」タブに移動します。
  1. 「バケットポリシーエディター」の「編集」クリックします。
  1. 以下のようにポリシーを設定します。
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::ユーザーID:user/ユーザー名"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::バケット名",
                "arn:aws:s3:::バケット名/*"
            ]
        }
    ]
}

これで作成したユーザーのアクセスキーIDとシークレットアクセスキーを使って、設定したS3にファイルをアップロードすることができるようになります。
ただ何度も言うように、本番運用時はIAMロールを使用することをお勧めします。