これは何か?
AWSのEC2セットアップ中にdnfやyumを使用してもStatus code: 403
となってしまい、インストールができなくて解決までに時間を要しました。
そのため誰かの助けになればと思い書きました。
もし筆者の間違いや、認識、思い違いなどがあればご指摘ください。
ではスタート!!
事件が起きました!Amazon Linux 2023でdnfやyumで403
AWSのEC2のお話しです。
Dockerコンテナ内ではなく、ホストマシンのお話です。
調べるとリポジトリのロックなどの記事がありますが、欲しい情報はそうでは、無かった。。。
環境
- 東京リージョン
ap-northeast-1
結論
-
s3向けのゲートウェイ型エンドポイントのポリシーに1行追加しました。
-
追加したポリシーがこれ!
"arn:aws:s3:::al2023-repos-ap-northeast-1-de612dc2/*"
-
なおS3へのバケットポリシーがフルアクセス
"Resource": "*"
の状態であれば、このような問題は発生しないです。 -
例
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::hoge-bucket",
"arn:aws:s3:::hoge-bucket/*",
"arn:aws:s3:::al2023-repos-ap-northeast-1-de612dc2/*" ←これを追加
]
}
]
}
- S3へのゲートウェイエンドポイントを作成したVPCでは、リポジトリ(S3)への許可が必要ということに気がつきました。
状態としてはこのような感じです。
gitでもdockerでもインストールしようとすると必ず怒られます。
$ sudo dnf install -y git
Amazon Linux 2023 repository 813 B/s | 243 B 00:00
Errors during downloading metadata for repository 'amazonlinux':
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/core/mirrors/2023.5.20240819/x86_64/mirror.list (IP: 52.219.16.134)
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/core/mirrors/2023.5.20240819/x86_64/mirror.list (IP: 52.219.12.70)
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/core/mirrors/2023.5.20240819/x86_64/mirror.list (IP: 52.219.162.100)
Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/core/mirrors/2023.5.20240819/x86_64/mirror.list (IP: 52.219.12.70)
Amazon Linux 2023 Kernel Livepatch repository 841 B/s | 243 B 00:00
Errors during downloading metadata for repository 'kernel-livepatch':
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/kernel-livepatch/mirrors/al2023/x86_64/mirror.list (IP: 52.219.199.36)
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/kernel-livepatch/mirrors/al2023/x86_64/mirror.list (IP: 52.219.172.56)
- Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/kernel-livepatch/mirrors/al2023/x86_64/mirror.list (IP: 52.219.0.198)
Error: Failed to download metadata for repo 'kernel-livepatch': Cannot prepare internal mirrorlist: Status code: 403 for https://al2023-repos-ap-northeast-1-de612dc2.s3.dualstack.ap-northeast-1.amazonaws.com/kernel-livepatch/mirrors/al2023/x86_64/mirror.list (IP: 52.219.172.56)
Ignoring repositories: amazonlinux, kernel-livepatch
No match for argument: git
Error: Unable to find a match: git
原因と解決策
EC2とS3の間の通信料金を無料にする目的で、VPCは特定S3バケットに対して、VPCエンドポイントのゲートウェイ型を使っていました。
エンドポイントポリシーのResouceにはhoge-bucket
バケットのみ許可しています。
"Resource": [
"arn:aws:s3:::hoge-bucket",
"arn:aws:s3:::hoge-bucket/*",
]
下記の記事を参考に、Resouceにリポジトリにアクセスできる許可を追加したら解決です!。
- s3向けのゲートウェイ型エンドポイントのポリシーに1行追加
- 追加したポリシー
"arn:aws:s3:::al2023-repos-ap-northeast-1-de612dc2/*"
- 参考にした記事
試行錯誤と考察
- エラー内容ではリポジトリにアクセスできない内容だった
- エンドポイントを作成していなかったデフォルトVPCで、Amazon Linux 2023をテストしたら、インストールができていた事もあり、何か根本的に変だ?
- ネットワークに問題があると睨んでいたが、ルートテーブル、サブネット、など付け替えましたが変わりません。
- 『EC2とS3の間の通信料金を無料にする』は、S3に対してインターネットを通らないという事になるのですが、リポジトリがS3に置いてあることに気がつくまで、しばらく時間がかかった。
- よって、S3へのゲートウェイエンドポイントを作成していなかったデフォルトVPCでテストが成功していたのは、①インターネット経由でリポジトリ(S3)へ通信しているのか、②ひょっとしたら暗黙のエンドポイントがあってresouceのポリシーがフルアクセス
"Resource": "*"
の状態なものか、のどちらかであると考えられ、エンドポイントを作成しているVPCで、S3への許可が必要ということに気がつきました。 - なおS3へのバケットポリシーがフルアクセス
"Resource": "*"
の状態であれば、このような問題は発生しないです。
参考記事