(1)現状の確認
まず何も設定していない状態ではWindows EC2インスタンスからS3のバケットにアクセスすると以下のエラーが発生することを確認します。
C:\>aws s3 ls s3://<バケット名>/
Unable to locate credentials. You can configure credentials by running "aws configure".
C:\>aws s3 cp --region ap-northeast-1 s3://<バケット名>/test.txt .
fatal error: Unable to locate credentials
(2)ポリシーを作成
AWS 管理コンソールよりポリシーを作成します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::<バケット名>",
"arn:aws:s3:::<バケット名>/*"
]
}
]
}
(*)バケットとオブジェクトの2行が必要な点に注意してください。
具体的には以下の2行です。
"arn:aws:s3:::<バケット名>",
"arn:aws:s3:::<バケット名>/*"
(3)ロールを作成
EC2インスタンスに上記のポリシーを適用するロールを作成します。
(4)
インスタンスに対して IMA ロールを割り当てます。新しいバージョンでは即座に適用されます。
古いバージョンではインスタンス起動前にロールをアサインする必要がありました。
(5)クレデンシャルの確認
メタデータでクレデンシャルを確認します。
ブラウザで以下をアクセスするとクレデンシャルが表示されます。
http://169.254.169.254/latest/meta-data/iam/security-credentials/s3_test_role
{
"Code" : "Success",
"LastUpdated" : "2018-07-01T08:23:55Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "**********************",
"SecretAccessKey" : "****************************************",
"Token" : "*****.....*****",
"Expiration" : "2018-07-01T14:59:49Z"
}
【2022年1月追記】
IMDS v1はセキュリティ上問題があるため v2が推奨しています。v2はセッショントークンによりメタ情報を取得します。方式は次を参考にしてください。
https://awsjp.com/AWS/hikaku/InstanceMetaData-v1-v2.html
(6)最終結果
以下の通り無事コマンドが成功するようになりました。
C:\>aws s3 ls s3://<バケット名>/
2018-07-01 06:42:31 5 test.txt
C:\>aws s3 cp --region ap-northeast-1 s3://<バケット名>/test.txt .
download: s3://<バケット名>/test.txt to .\test.txt
2012-10-17とは何か?
ポリシーのJson の先頭に記載されている次の日付は何でしょうか
{
"Version": "2012-10-17",
これは日付ではなく、ポリシーの書式のバージョンです。現行では 2012-10-17 が最新のようです。
これ以外に「2008-10-17」もあるようですが一般的にバージョン"2012-10-17"を使えばよいでしょう。
【超重要】本ページは情報が古くなっている可能性があります。参考程度にしてください。
[ 一覧に戻る]
【注意事項】本ページの内容は個人的に調査した結果がであり内容が正しいことは保証されません。
またAWSサービスは常に改良、アップデートされており本ページの内容が古く誤った内容になる可能性もあります。変更になっても本ページが正しく更新されるとは限りません。
あくまでも参考程度でご覧ください。内容により発生したいかなる時間的損害、金銭的損害、その他の損害に関しても何人も保証しません。