AWSを使ってみた!【署名付URLの作成】

  • Posted on: 24 September 2018
  • By: maho

AWS(Amazon Web Service)を用いて署名付きURLを作成したときの手順です。
AWS初心者な人が書いているので、自己責任でお願いいたします。。。m(_ _)m

<今回用いたAWSのサービス>

  • IAM(Identity and Access Management):AWS リソースへのアクセスを安全に制御するためのウェブサービス。ユーザーやグループの作成やアクセス権限の付与として使えます。
  • EC2(Elastic Compute Cloud):安全でサイズ変更可能なコンピューティング性能をクラウド内で提供するウェブサービス。インスタンスを作成し、様々なサービス(今回はS3)を管理するツールとして使えます。
  • S3(Simple Storage Service):どこからの、どのような量のデータでも保存と取得が可能なオブジェクトストレージ。データの置き場所として利用できます。

【手順】

〜大まかな流れ〜
1、ユーザの作成
2、インスタンス(仮想サーバ)の作成
3、署名付きURLの作成

下準備:AWSにアカウントを登録しておきます。この時のアカウントが管理者(ルートアカウント)になります。最初のユーザー/グループの追加や権限の付与はこのアカウントから行います。

  • ユーザーの登録
    この手順でアクセスキーIDとシークレットアクセスキーIDを取得します。
    1. コンソールへログインします。以下の画面がAWSのコンソール画面になります。

    2. ヘッダーの「サービス」を選択するとサービス一覧が表示されるので「IAM」を選択します。

    3. 以下のIAMのコンソールが表示されたら左の欄から「ユーザー」を選択し、その後「ユーザーの追加」を選択します。

    4. ここで、新規に作成するユーザー名(任意)を入力し、「プログラムによるアクセス」にチェックを入れ、「次のステップ:アクセス権限」を選択します。

    5. 「既存のポリシーを直接アタッチ」を選択し、S3を制御(バケットの作成等)を行うために「AmazonS3FullAccess」にチェックを入れる。「S3」で検索をかけると見つけやすいです。その後、「次のステップ:確認」を選択します。

    6. 以下のようになっているかを確認し、「ユーザーの作成」を選択します。

    7. アクセスキーIDとシークレットアクセスキーの情報を保存しておくために「.cvsのダウンロード」を選択し、CVSファイルをダウンロードしておきます。これでS3を制御管理するユーザの作成が完了しました。


  • インスタンスの作成

    1. ユーザーを作成したら、アカウントをそのまま(管理者のまま)でユーザの作成と同じ手順でサービス一覧から「EC2」を選択します。すると、以下の画面になります。

    2. 「インスタンスの作成」を選択すると、以下の選択メニューになるので、今回は無料対象枠の「Amazon Linux 2 AMI (HVM), SSD Volume Type」を選択します。(ここで、「Amazon Linux」以外を選択しても良いですが、今後利用するコマンドを他のOSで利用するにはインストールが必要になるかもしれません。)

    3. ステップ2[インスタンスタイプの選択]〜5[タグの追加]まではデフォルトで設定を行いましたが、用途に合わせて変更すると良いです。

    4. 次にセキュリティグループの設定を行います。新規のセキュリティグループを作成するを選択し、セキュリティグループ名を入力します。
      SSHでログインするので、SSHでログインできるようにしておきます。(ここでソースをマイIPにすると、現在アクセスしているグローバルIPが自動で設定されます。)これによって自身のIPからのみSSHでログインできるようになります。

    5. (オプション:後にWEBサーバとしてこのインスタンスを使う場合のためにルールを追加しておく)続けて、「ルールの追加」を選択し、「タイプ:HTTP」を選択する。下記画面のようにHTTPのルールが追加されていることを確認し、「確認と作成」を選択します。

    6. インスタンスの内容が設定どおりであることを確認し、「作成」を選択すると、以下のキーペアについてのウィンドウが出てきます。ここで、プルダウンメニューで「新しいキーペアの作成」を選択し、キーペア名(任意)を入力し、キーペアのダウンロードを行います。その後「インスタンスの作成」を選択します。

    7. 以下画面が表示されたら、「インスタンスの表示」を選択し、インスタンスの状態を確かめます。インスタンスが正常に起動すると完了です。


  • バケットの作成

    1. 先程作成したインスタンスを選択し、「IPv4 パブリック IP」を確認(コピー)します。

    2. 自分のPC(私のPCはCentOS7です)のターミナルを起動し、インスタンス作成時にダウンロードしたキーペアが置いている場所(例:Downloads)に移動し、キーペアのパーミッションを「r--------」に変更します。
      $cd {キーペアが置いている場所へのパス}
      $chmod 400 {キーペア}


    3. 先程のアドレスにSSHでログインします。この時、ユーザー名はec2-userとし、キーペアを指定します。
      $ssh ec2-user@{IPv4 パブリック IP} -i {キーペア}
      The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
      ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
      ECDSA key fingerprint is MD5:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts.

      __| __|_ )
      _| ( / Amazon Linux 2 AMI
      ___|\___|___|

      https://aws.amazon.com/amazon-linux-2/
      2 package(s) needed for security, out of 9 available
      Run "sudo yum update" to apply all updates.
      $

    4. インスタンスに無事ログインできましたら、AWS コマンドラインインターフェイス(CLI)を使うための初期設定を行います。AWSにアクセスするには認証情報が必要となるため、ユーザー登録のときに作成したアクセスキー/シークレットキーを設定する必要があります。以下で設定ができます。
      $ aws configure
      AWS Access Key ID [None]: {アクセスキーID}
      AWS Secret Access Key [None]:{シークレットキーID}
      Default region name [None]: ap-northeast-1 ←リージョンがTokyoであることを示しています。
      Default output format [None]: text ←コマンドの出力の表示形式を設定します(table,json,textから選べます)
      $


    5. 上記設定が完了すると、S3にデータをアップロードするためのバケットを作成します。
      $ aws s3 mb s3://xxxxx-bucket ←例)xxxxx-bucketという名のバケットの作成
      make_bucket: xxxxx-bucket
      $ aws s3 ls
      2018-09-25 07:33:43 xxxxx-bucket ←バケットが作成されているか確認


      ※ちなみに

      $ aws s3 mb s3://demo-bucket
      make_bucket failed: s3://demo-bucket An error occurred (BucketAlreadyExists) when calling the CreateBucket operation: The requested bucket name is not available. The bucket namespace is shared by all users of the system. Please select a different name and try again.

      と出力されたときは既にdemo-bucketという名前のバケットが他人に使われていることを示しています。

    6. ここで0バイトのテスト用ファイルを作成し、xxxxx-bucket にアップロードします。
      $ touch test-file ←テスト用ファイルの作成
      $ aws s3 cp test-file s3://xxxxx-bucket ←xxxxx-bucket にアップロード
      upload: ./test-file to s3://xxxxx-bucket/test-file
      $ aws s3 ls s3://xxxxx-bucket ←xxxxx-bucket にtest-fileがアップロードされているか確認
      2018-09-25 07:40:53 0 test-file
      $


    7. 署名付きURL(有効期限:300秒(5分))を作成します。実行結果として表示されたURLが署名付きURLであり、5分間アクセス可能となります。
      $ aws s3 presign s3://xxxxx-bucket/test-file --expires-in 300
      https://xxxxx-bucket.s3.amazonaws.com/test-file?AWSAccessKeyId=xxxxxxxxx...
      $



以上が署名付きURLの作成手順でした。