Closed7
GitHub Actions で AWS の OIDC Provider 経由で認証する
を参考に AWS と GitHub Actions を設定したけど、以下のようなエラーが出た
Run aws-actions/configure-aws-credentials@v1
Error: Credentials could not be loaded, please check your action inputs: Could not load credentials from any providers
のコメントにあったように job に permissions
を追加したら解消した
jobs:
hoge:
permissions:
id-token: write
contents: read
よく見たら README の example にもしれっと記載があった
jobs:
deploy:
name: Upload to Amazon S3
runs-on: ubuntu-latest
# These permissions are needed to interact with GitHub's OIDC Token endpoint.
permissions:
id-token: write
contents: read
aws-actions/amazon-ecs-deploy-task-definition@v1 で エラーとなる
エラーメッセージ
Error: Failed to register task definition in ECS: User: arn:aws:sts::***:assumed-role/{oidc role name}/GitHubActions is not authorized to perform: iam:PassRole on resource: arn:aws:iam::***:role/{task role} because no identity-based policy allows the iam:PassRole action
原因
Policy による AssumeRole を許可するロールのARNを記述する際に {task role}
に指定するべきロールが、誤ってスケジュールタスク用のロールを指定していたため。
また、その後タスクロールに加えてタスク実行ロールも必要であることが判明した。
対応
Policy を修正本来のタスクロールに変更するのと同時にタスク実行ロールを追加した。
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::{aws account id}:role/{task role}",
"arn:aws:iam::{aws account id}:role/{task execution role}"
]
}
参考
タスクロールとタスク実行ロールがいつもわからなくなるので、以下は参考ページ。
必要なパーミッションの確認
workflow から利用している Action から必要そうな Permission を洗い出してみる
aws-actions/amazon-ecs-render-task-definition@v1
index.js 見る限り AWS API は利用してなさそう
aws-actions/amazon-ecs-deploy-task-definition@v1
README に記載がある
aws-actions/amazon-ecr-login@v1
こちらも README に記載がある
Songmu/ecschedule@main
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"events:PutTargets",
"ecs:RunTask",
"events:PutRule",
"events:ListTargetsByRule"
],
"Resource": [
"arn:aws:ecs:ap-northeast-1:${local.account}:task-definition/*:*",
"arn:aws:events:*:${local.account}:rule/*"
]
},
{
"Effect": "Allow",
"Action": [
"events:ListRules",
"ecs:DescribeTaskDefinition"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": aws_iam_role.ecs_events.arn // ECS イベントのロール
}
]
}
secretsmanager:GetSecretValue を追加した
workflow の中から AWS CLI 経由で SecretsManager の値を参照しているのでその権限を追加した
必要なパーミッションの確認
workflow から利用している Action から必要そうな Permission を洗い出してみる
aws-actions/amazon-ecs-render-task-definition@v1
index.js 見る限り AWS API は利用してなさそう
aws-actions/amazon-ecs-deploy-task-definition@v1
README に記載がある
aws-actions/amazon-ecr-login@v1
こちらも README に記載がある
- login
- push / pull
記述が分かれているので両方必要なときには注意
Songmu/ecschedule@main
json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"events:PutTargets",
"ecs:RunTask",
"events:PutRule",
"events:ListTargetsByRule"
],
"Resource": [
"arn:aws:ecs:ap-northeast-1:${local.account}:task-definition/*:*",
"arn:aws:events:*:${local.account}:rule/*"
]
},
{
"Effect": "Allow",
"Action": [
"events:ListRules",
"ecs:DescribeTaskDefinition"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": aws_iam_role.ecs_events.arn // ECS イベントのロール
}
]
}
ecr:GetAuthorizationToken
が必要
ECR に login するための権限として
の push and pull の権限だけ指定してたら、ログインで権限足りないと怒られたので ecr:GetAuthorizationToken
も付与するのを忘れずに
このスクラップは2023/11/29にクローズされました