AWS EC2からS3へアクセスする(ユーザーのアクセスキー)

目次

概要と準備

  • privateにあるEC2からVPCエンドポイント(Gatewayタイプ)を使用してS3にアクセスします。
    privateのEC2にはpublicのEC2からログインします。
  • IAMユーザーのキーをEC2に割り当てS3へアクセスします。
    →注意:アクセスキーとシークレットキーの使用はセキュリティ的に非推奨です。
    ここでは、動作確認のため行っています。
  • EC2のユーザ名(ec2-user)とIAMユーザ名(s3-user)は異なっていてもS3にアクセスできます。
    →ec2-userにIAMユーザの権限を与えるイメージ
  • VPCエンドポイントのIDの最初は、vpce-になります。(vpc + endpointのe)
  • 以下の場合は、VPCエンドポイントは不要です。
    public subnetにあるEC2からInternet Gatewayでつながっている場合のS3へのアクセス
    private subnetにあるEC2からNAT gateway→Internet Gatewayでつながっている場合のS3へのアクセス
  • 以下が行われていることが前提です。
    AWS Tera TermのSSHでEC2に接続する

 

S3操作の権限を持つIAMユーザーを作成する

1.検索入力欄で「IAM」と入力し、表示された「IAM」をクリックします。

2.左の画面で「ユーザー」をクリックし、「ユーザーを追加」ボタンをクリックします。

3.ユーザー名を入力します。

 

4.AWSのアクセスの種類は、「アクセスキー・プログラムによるアクセス」にチェックを入れます。
「次のステップ:アクセス権限」ボタンをクリックします。

 

5.「既存のポリシーを直接アタッチ」をクリックし、入力欄にs3を入力して検索し「AmazonS3FullAccess」にチェックを入れ
「次のステップ:タグ」→「次のステップ:確認」→「ユーザーの作成」ボタンをクリックしてユーザーを作成します。

 

6..csvのダウンロードでファイルをダウンロードして保存しておきます。

ファイルの中にアクセスキーシークレットキーが記載されています。

 

VPCエンドポイントを作成する

1.検索入力欄で「VPC」と入力し、表示された「VPC」をクリックします。

2.左の画面で「エンドポイント」をクリックし、「エンドポイントを作成」をクリックします。

3.エンドポイントの名前タグを入力します。サービスカテゴリは、AWSのサービスを選択します。

 

4.検索欄でS3と入力し、Gatewayタイプのサービス名を選択します。

 

5.VPCは、作成したVPCを選択します。

 

6.ルートテーブルは、privateのsubnetに関連付けして作成したルートテーブルを選択します。

 

7.ポリシーは、フルアクセスにしました。
「エンドポイントの作成」をクリックするとエンドポイントが作成されます。

 

備考

VPCエンドポイントのIDの最初は、vpce-になります。(vpc + endpointのe)

 

VPCエンドポイントを作成すると、ルートテーブルにはターゲットは自動で追加されます。

エンドポイント追加前 privateのルートテーブル(test11-route-private)

 

 

エンドポイント追加後 privateのルートテーブル(test11-route-private)

 

EC2からS3にアクセスする設定を行う(aws configure)

1.Tera TermのSSHでEC2に接続します。
Tera TermのSSHでEC2に接続する

 

2.コンソールでaws configureで設定を行います。

aws configure listで設定を確認します。まだ設定していないため、以下のように表示されます。

[ec2-user@ip-10-0-0-80 ~]$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
    region                <not set>             None    None
[ec2-user@ip-10-0-0-80 ~]$

aws configureを入力し、1行ずつ入力します。

[ec2-user@ip-10-0-10-4 ~]$ aws configure
AWS Access Key ID [None]: アクセスキー
AWS Secret Access Key [None]: シークレットキー
Default region name [None]: ap-northeast-1
Default output format [None]:

3行目は、デフォルトにするリージョンを入力します。
4行目は、何も入力せずエンターキーを押します。

 

EC2のコンソールからS3のファイルを参照/取得する(aws s3 ls/cp)

aws s3 lsでバケットを参照できます。

[ec2-user@ip-10-0-10-4 ~]$ aws s3 ls
2022-07-12 15:35:34 test-s3-data-2022
[ec2-user@ip-10-0-10-4 ~]$ aws s3 ls s3://test-s3-data-2022
2022-07-13 16:36:42        774 aws-test1.png
2022-07-21 15:10:39         16 test-data1.txt
[ec2-user@ip-10-0-10-4 ~]$

3行目は、バケット内のファイルを表示しています。

デフォルトのリージョンではない場合は、コマンドの後に--region リージョン名を指定します。

aws s3 ls s3://test-s3-data-2022 --region ap-northeast-1

aws configureの設定ができていない場合、以下のメッセージが表示されます。

Unable to locate credentials. You can configure credentials by running "aws configure".

 

EC2のS3にアクセスする設定を削除する

aws configureコマンドで設定した値は、以下にファイルで配置されます。

[ec2-user@ip-10-0-10-4 ~]$ ls -l ~/.aws
total 8
-rw------- 1 ec2-user ec2-user  82 Apr  8 16:03 config
-rw------- 1 ec2-user ec2-user 238 Apr  8 16:03 credentials
[ec2-user@ip-10-0-10-4 ~]$

 

削除

rm -r ~/.aws

1行目は、キーの内容が表示されます。
3行目は、フォルダごと削除され、アクセスの権限がなくなります。

 

(参考)configファイル

regionが設定されています。

[ec2-user@ip-10-0-10-4 ~]$ cat ~/.aws/config
[profile test-ec2-user]
region = ap-northeast-1
[default]
region = ap-northeast-1
[ec2-user@ip-10-0-10-4 ~]$

aws configure --profile (プロファイル名)で設定するとdefault以外のプロファイル名で保存できます。

 

(参考)credentialsファイル

アクセスキーとシークレットキーが保存されています。

[ec2-user@ip-10-0-10-4 ~]$ cat ~/.aws/credentials
[test-ec2-user]
aws_access_key_id = xxx
aws_secret_access_key = xxxx
[default]
aws_access_key_id = xxx
aws_secret_access_key = xxxx
[ec2-user@ip-10-0-10-4 ~]$

aws configure --profile (プロファイル名)で設定するとdefault以外のプロファイル名で保存できます。

関連の記事

AWS EC2からS3へアクセス(EC2にロールをセット)

△上に戻る