0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

S3へのクロスアカウントアクセスを設定してみた

Last updated at Posted at 2021-08-18

#はじめに
・S3(アカウントA)←EC2(アカウントB)というアカウントまたぎのアクセスを設定する機会があったので、設定方法を残しておきます。

#概要
そもそもS3へのアクセスを設定する方法は主に以下の2つ
①S3アクセス用のIAMユーザを発行し、
EC2にアクセスキー・シークレットアクセスキーを埋め込んでしまう
(セキュリティ的に非推奨:参照↓)
https://zenn.dev/yutaro1985/articles/daa2aaa6cc9907#%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%82%AD%E3%83%BC%E3%82%92%E5%85%B1%E6%9C%89%E3%81%97%E3%81%AA%E3%81%84
②IAMロールを作成し、IAMロールにS3へのアクセス権があるIAMポリシーをアタッチ、
作成したIAMロールをEC2にアタッチする。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cross-account-access-s3/

①のやり方だと、アカウントまたぎでも関係なくアクセスできるが、
セキュリティ的にAWS公式では非推奨となっている。
②のやり方が使われるのが多いと思われるが、アカウントまたぎの場合、S3バケット側のバケットポリシーに作成したIAMロールを受け入れる設定が追加で必要になる。

#前提条件
・S3が存在する(アカウントA)
・EC2が存在する(アカウントB)

#①の設定方法
(1)S3アクセス用のIAMユーザを作成する

IAMの画面で「ユーザ」を選択し、「ユーザを追加」をクリック
スクリーンショット 2021-08-14 12.15.44.png

任意のユーザ名を入力し、「プログラムによるアクセス」にチェック
スクリーンショット 2021-08-14 12.16.09.png

アクセス許可の設定で「既存のポリシー」から「AmazonS3FullAccess」を選択
(フルアクセスをつけたくない場合は、ご自身で作成したポリシーを選択してください。)
スクリーンショット 2021-08-14 12.16.31.png

問題ないことを確認してIAMユーザを作成する
スクリーンショット 2021-08-14 12.16.42.png

最後に.csvのダウンロードをクリックし、アクセスキーとシークレットアクセスキーを取得する
スクリーンショット 2021-08-14 12.16.53.png

(2)上記で取得したアクセスキーとシークレットアクセスキーをEC2に設定する。

設定する前に、対象のS3にアップロードできないことを確認する。
s3://○○○○のところはご自身のS3名を入力してください。

$ touch test

$ ll
合計 0
-rw-rw-r-- 1 ec2-user ec2-user 0  8月 14 03:19 test

$ aws s3 cp test s3://20210814cross-account-test
upload failed: ./test to s3://20210814cross-account-test/test Unable to locate credentials

アップロードに失敗する

EC2に対して、先程取得したアクセスキーとシークレットアクセスキーを設定する。

$ aws configure

と入力すると

AWS Access Key ID [None]: 
AWS Secret Access Key [None]: 
Default region name [None]:
Default output format [None]:

の画面が出るので、「AWS Access Key ID」と「AWS Secret Access Key」に
先ほど取得した値を入力する。その他の項目はお好みで。

入力したら、もう1回S3へのアップロードを試す。

$ aws s3 cp test s3://20210814cross-account-test
upload: ./test to s3://20210814cross-account-test/test

アップロードできる。
コンソールでもアップロードされてるのが確認できる。
スクリーンショット 2021-08-14 12.23.25.png

#②の設定方法
(0)まず①のやり方をやった場合、aws configureの値が残ってしまっているので

$ rm -r ~/.aws

で設定値をリセットする。

(1)EC2用のIAMロールを作成する。

IAMの画面で「ロール」を選択し、「ロールを作成」をクリック
スクリーンショット 2021-08-14 13.04.28.png

「AWSサービス」の「EC2」を選択する
スクリーンショット 2021-08-14 13.04.39.png

アクセス許可の設定で「AmazonS3FullAccess」を選択
(フルアクセスをつけたくない場合は、ご自身で作成したポリシーを選択してください。)
スクリーンショット 2021-08-14 13.04.57.png

ロール名に任意の名前を入力
スクリーンショット 2021-08-14 13.05.13.png

(2)作成したロールをEC2に設定する。
対象のEC2を選択して、「アクション」→「セキュリティ」→「IAMロールを変更」
スクリーンショット 2021-08-14 13.06.24.png

さっき作ったIAMロールを選択して、保存
スクリーンショット 2021-08-14 13.07.19.png

EC2にIAMロールが設定されていることを確認する
スクリーンショット 2021-08-14 13.07.37.png

この時点でS3へのアップロードを試してみる。
s3://○○○○のところはご自身のS3名を入力してください。
(test2というファイルを作成しています)

$ aws s3 cp test2 s3://20210814cross-account-test
upload failed: ./test2 to s3://20210814cross-account-test/test2 An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

さっきとは違うエラー文が出てアップロードが失敗する。

(3)S3のバケットポリシーを編集する。

S3の画面の「バケット」→「対象バケット」→「アクセス許可」をクリック
スクリーンショット 2021-08-15 16.46.21.png

バケットポリシーの内容を編集する。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::アカウントID:role/作成したIAMロール名"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl"
            ],
            "Resource": "arn:aws:s3:::対象バケット名/*"
        }
    ]
}

Principalのarnのところは、作成したIAMロールの画面からもコピーできる。
スクリーンショット 2021-08-14 13.09.48.png

S3へのアップロードを試す。

$ aws s3 cp test2 s3://20210814cross-account-test
upload: ./test2 to s3://20210814cross-account-test/test2

成功して、コンソールからもアップロードされていることを確認できる。
スクリーンショット 2021-08-14 13.11.15.png

#注意事項
アップロードしたオブジェクトの所有者がアップロードした側(今回だとEC2側のアカウント)になってしまいS3側のアカウントでは権限エラーになってしまい何もできないことがある。
アップロード時のオプションに--acl bucket-owner-full-controlをつければ良い。

#引用
https://aws.amazon.com/jp/premiumsupport/knowledge-center/cross-account-access-s3/

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?