今回は、新ユーザーを作成して「アクセスキー」と「シークレットキー」を作成し、Windows よりインターネット経由で AWS S3 にアクセスをするための設定手順について解説をします。
Amazon S3(Simple Storage Service)とは
Amazon S3(Simple Storage Service)とは、インターネット上にあるストレージサービスです。
S3 の堅牢性はイレブンナイン(9が11個)と呼ばれ、99.999999999% の耐久性があると言われています。
このイレブンナインですが、絶対に S3 のサービスが停止しないというわけではなく、1年のうちに S3 を利用できない時間が数分間という意味のようです。
Amazon S3 料金表
Amazon S3 の料金表です。
Amazon S3 Pricing
https://aws.amazon.com/jp/s3/pricing/?p=ps
下図を確認しても分かりますが、ほとんどの企業でも「50TB」は超えることはないと思うので「実質「0.025USD/GB」で利用できます。
※仮に超えたとしても「0.024USD/GB」となり多少割安になります。
S3 はバックアップ用ストレージに優れている
S3 の「データ転送料金表」を確認すると S3 はバックアップ用ストレージとして優れています。
基本的にバックアップデータは万が一の時のために保存するだけで、万が一がなければバックアップデータを復元することはないため「データ転送料金」としては実質0円と計算できます。
しょっちゅうバックアップデータをリストアするような環境の場合は、別のサービスを利用する方がお得かもしれません。
Amazon S3 の利用料金の計算例
例えば、バックアップデータ100GBを7世代(一週間分)取得するとして
100GB×7=700GB
1USD=113.65円
700GB×0.025×113.65=1988.875円
1か月 1,988円
700GB のバックアップデータを「Amazon S3」に保存するとした場合、1か月の利用料金は約2,000円になります。
作業の概要
以下の手順で設定し動作確認をします。
- Amazon S3 バケットの作成
- S3へアクセスするための「ユーザー」と「アクセスキー(Access key ID)」と「シークレットキー(Secret access key)」を取得する
- Windows に AWS Cli をインストールする
- S3 へのアクセス確認
Amazon S3 バケットの作成手順
初めに Amazon S3 バケットを作成します。
AWS マネジメントコンソールにログインし、「サービス」–「ストレージ」–「S3」をクリックします。
Amazon S3 のトップ画面に移動するので、下図のように「バケットを作成する」ボタンをクリックします。
以下のように「バケットの作成」画面が表示されます。
- バケット名: ← DNS準拠のバケット名を入力する
「DNS準拠のバケット名」と記載があります。
S3バケットの命名規則
Amazon S3 バケットの命名規則は以下のようにまとめられています。
バケットの制約と制限
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/BucketRestrictions.html
バケット名は「DNS 命名規則に沿って命名する必要があります。」とありますが、「DNS 命名規則」とはなんでしょうか。
■ DNS 命名規則とは
DNS 命名規則を簡単にまとめると以下のようになります。
- 長さが 25 文字を超えない
- 文字で始まり、英数字で終わる。英数字とハイフン以外は使用しない
- 末尾にハイフンと数字を付けない
以下のようにバケット名を入力して「次へ」ボタンをクリックします。
- バケット名 : backup-s3-001
- リージョン : アジアパシフィック(東京)
■①名前とリージョン【Part.1】
■①名前とリージョン【Part.2】
バージョニングとは
バージョニングを使用すると、1 つのバケットで複数バージョンのオブジェクト(ファイルなど)を維持できます。
つまりバージョニングとは、同じバケット内でファイルの複数バージョンを保持する機能です。
(Windows のシャドウコピーがイメージしやすいかもしれません)
バージョニングを利用すると Amazon S3 バケットに格納されたあらゆるファイルの過去のバージョンを取得したり復元できます。
そのため、誤ってユーザーがファイルを消した場合や、過去のファイルを上書きしてしまった場合でも簡単に回復することができます。
■今回の S3 使用方法
今回作成した S3 バケットは、バックアップファイルを保存する目的で、バックアップファイルは以下のように考えています。
【ファイル名の例】
- backup-20181001
- backup-20181002
- backup-20181003
つまり日付ごとのバックアップファイルで、障害がなければファイルを開くことはないため、バージョニングの機能は不要です。
サーバーアクセスのログ記録とは
サーバーアクセスのログには、バケットに対するリクエストの詳細が記録され、そのログ情報はセキュリティやアクセスの監査に役立ちます。
Amazon S3 バケットに対するサーバーアクセスのログ記録を有効にしても追加料金は発生しませんが、システムが配信するログファイルについては、通常のストレージ料金がかかります (ログファイルはいつでも削除できます)。
今回は利用しません。
「次へ」ボタンをクリックします。
■③アクセス許可の設定画面
「パブリックアクセス許可を管理する」で、今回は「このバケットにパブリック読み取り権限を付与しない(推奨)」を選択します。
※パブリックアクセスを許可にすると世界中からアクセスが可能になるので注意です。
以下の 2 つの S3 へのパブリックアクセスの許可を設定できます。
設定を確認し問題がなければ「バケットを作成」ボタンをクリックします。
以下のように S3 バケットが作成されました。
S3へアクセスするための「ユーザー」と「アクセスキー(Access key ID)」と「シークレットキー(Secret access key)」を取得する手順
S3へアクセスするための「ユーザー」と「アクセスキー(Access key ID)」と「シークレットキー(Secret access key)」を取得する手順です。
AWS コンソール画面にログインし、下図のようにアカウントをクリックし「セキュリティ認証情報」をクリックします。
「セキュリティ認証情報」画面に移動したら、右側ペインより「ユーザー」をクリックします。
「ユーザーを追加」ボタンをクリックします。
下図のように設定を入れます。
- ユーザー名 : 任意のユーザー名を入力します。
- アクセスの種類 : 「プログラムによるアクセス」を選択します。
「アクセス権限」ボタンをクリックします。
下図のように設定します。
- アクセス許可の設定 : 「既存のポリシーを直接アタッチ」を選択します。
下図のように「ポリシーのフィルタ」に「S3」と入力して検索すると、「AmazonS3FullAccess」が検索結果として表示されるのでクリックします。
「確認」ボタンをクリックします。
設定を確認し問題がなければ「ユーザーの作成」ボタンをクリックします。
以下のように「ユーザーを追加」画面が表示されるので「.csv のダウンロード」ボタンをクリックします。
「credentials.csv」ファイルがダウンロードされるのでダブルクリックして開きます。
以下のように「User name」、「Access key ID」、「Secret access key」が記載されていることを確認します。
AmazonS3FullAccess の権限内容の確認
今回割り当てた「AmazonS3FullAccess」の権限はどのように規定されているのか確認します。
今回作成した
今回割り当てたデフォルトで存在している「AmazonS3FullAccess」は、下図のように「Resource」が “*(アスタリスク)”になっているため、すべての S3 に対して権限が割り当てられます。
そのため、特定の S3 に対してのみ権限を割り当てたい場合は、別途ポリシー(例:AmazonS3BackupFullAccess等)を作成し、Resource に特定のバケットを設定します。
※「AmazonS3FullAccess」はどのバケットでもどのフォルダにもアクセスができ、更にファイルを削除したりファイルを変更できる一番強い権限です。そのためセキュリティのリスクが高いので最低限必要な権限だけを割り当てるようにします。権限を絞ったポリシーの設定は以下で解説をします。
権限を絞ったポリシーを作成してユーザーに割り当てる手順
先ほど作成した「buckup-s3-upload-user」ユーザーは「AmazonS3FullAccess」が割り当てられているため権限が強すぎます。
そのため、権限を絞ったポリシーを作成して「buckup-s3-upload-user」ユーザーに割り当てます。
新規ポリシーを作成する
AWS 管理コンソール画面より、右上のアカウントをクリックして「セキュリティ認証情報」をクリックします。
「Identity and Access Management」画面に移動したら左側ペインより「ポリシー」をクリックします。
「ポリシーの作成」ボタンをクリックします。
「ポリシーの作成」画面で「JSON」タブをクリックします。
以下のようにポリシーを設定します。
ポリシーはすべてのバケットに対する権限を割り当てるのではなく、特定のバケット(backup-s3-001)に対してだけ権限を割り当てています。
{ |
「Review policy」ボタンをクリックします。
名前を入力します。
「Create policy」ボタンをクリックします。
S3 バケットのアクセス権の設定手順
S3 バケットのアクセス権は「アクセス権限」タブをクリックすると以下のように 3つのボタンを確認できます。
- アクセスコントロールリスト
- バケットポリシー
- CORS の設定
下図のようにアカウントの「AWS 正規ユーザー ID(Cannonical User ID)」を確認できます。
AWS 正規ユーザー ID(AWS Cannonical User ID)の確認方法
他にも AWS 正規ユーザー ID(AWS Cannonical User ID)は AWS マネジメントコンソールより確認することができます。
アカウントをクリックして「セキュリティ認証情報」をクリックします。
下図のように「AWS アカウント ID(AWS Account ID)」と「正規ユーザー ID(Cannonical User ID)」を確認することができます。
アクセスコントロールリストについて
「バケット」と「オブジェクト(ファイル)」へのアクセスを管理できます。
各バケットとオブジェクトには ACL がアタッチされています。
各バケットとオブジェクトに対してアクセスが許可される「アカウントもしくはグループ」と「アクセスの種類」が定義されます。
バケットポリシーについて
ポリシーを JSON で定義します。
上部でユーザー「backup-s3-upload-user」にポリシー「AmazonS3FullAccess」を割り当てて「アクセスキー」と「シークレットキー」を取得する手順を解説しましたが、「バケットポリシー」は設定画面に直接ポリシーを書き込むイメージです。
特定の IAMユーザー、特定の AWS アカウントを指定できます。
Condition(条件)で接続元IPアドレスを絞ったり、細かく条件を指定できます。
■バケットポリシーの例
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/example-bucket-policies.html
バケットポリシーの例
{ |
- Sid:ステートメントID。ユーザーが識別しやすいタグのようなもの。かぶらなければOKです。
- Effect:Allow(許可)、Deny(拒否)かを記載します。
- Principal:リソースへのアクセスを許可または拒否するユーザー、アカウント、サービスを指定します。「*」の場合は全部が対象です。
- Action:どのような操作(オペレーション)をするか記載します。(例:CreateBucket、DeleteBucket、ListBucket など)
- Resource:対象となるオブジェクトを記載します。ARN で記載します。(例:arn:aws:s3:::backup-s3-001 など)
バケットの ARN は以下の方法で確認できます。
下図の赤い枠で囲まれた部分をクリックします。
※「backup-s3-001」のリンクをクリックするとバケットの下に移動します。
下図の「バケット ARN をコピーする」ボタンをクリックすると、ARN をコピーすることができます。
CORS の設定について
CORSは「Cross-Origin Resource Sharing」の略です。
特定のドメインにロードされた クライアント ウェブ アプリケーション が異なるドメイン内のリソースと通信する方法を定義します。
Windows に AWS Cli をインストールする手順
S3 へのバックアップファイルのアップロードのため Windows に AWS Cli をインストールします。
以下のURLにアクセスします。
Microsoft Windows で AWS Command Line Interface をインストールする
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/awscli-install-windows.html
使用している Windows の「システムの種類」を確認し「64ビット」もしくは「32ビット」の MSI インストーラの URL をクリックしてダウンロードします。
「コントロールパネル」–「システム」をクリックして「64ビット」もしくは「32ビット」かを確認します。
ダウンロードした「AWSCLI32.msi」ファイルをダブルクリックします。
下図の画面が表示されたら「実行」ボタンをクリックします。
「Next」ボタンをクリックします。
「I accept the terms in the License Agreement」にチェックを入れて「Next」ボタンをクリックします。
「Next」ボタンをクリックします。
「Install」ボタンをクリックします。
インストールが完了したら「Finish」ボタンをクリックします。
S3 へのアクセス確認
最後に S3 へアクセスができるか確認します。
コマンドプロンプトを起動します。
以下のように「aws –version」コマンドを実行し、aws-cliのバージョンが表示されれば正常にインストールされています。
C:\>aws –version |
以下のように「aws configure」コマンドで先ほど取得した「アクセスキー(Access Key ID)」と「シークレットキー(Secret Access Key)」を設定します。
C:\>aws –version |
「aws s3 ls」コマンドを実行し以下のようにバケット一覧が表示されれば正常に設定ができています。
C:\>aws s3 ls |
Amazon S3 へアクセスするためのポート
社内やデータセンターから Amazon S3 へアクセスする場合は、ファイアウォールでアウトバウンドで「TCP/443」を許可しておきます。
まとめ
ポリシーや権限がいろいろからんで複雑に見えますが、シンプルに以下の手順で S3 に正しくアクセス権限を設定できると思います。
- どこに誰からどの権限でアクセスをさせたいのか決める(設計)
- S3バケットを作る←ARNができる
- 作成したS3バケット用のポリシーを作る(AmazonS3FullAccessをコピーしてリソースや権限を変更して作る)
- 新規でユーザーを作成し、作成したポリシーを割り当てて、「アクセスキー」と「シークレットキー」を取得する
- クライアントに「AWS CLI」をインストールして「アクセスキー」と「シークレットキー」を設定する
コメント