概要
SecretManagerのパラメータをECS Taskからクロスアカウントで取得しようとした場合、
AWSの公式手順のやり方では取得できなかったので掲載します。
詳細
どれだけググってもこの説明をしているページがなかったのでここに掲載します。
クロスアカウントを用いてSecretManagerからパラメータを取得しようとする場合、AWSで公式の手順が紹介されています。
要はIAM roleとKMS(CMK)とSecretManagerのそれぞれで権限指定が必要と言っているのですが、SecretManagerで権限を指定してもECS Task定義の環境変数経由でクロスアカウントのSecretManagerのパラメータを取得することができませんでした。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Principal" : {
"AWS" : "arn:aws:iam::Dev_Account:user/SecretsUser"
},
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"secretsmanager:VersionStage": "AWSCURRENT"
}
}
}
]
}
で、以下のように変えたら取得できるようになりました。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Action": "secretsmanager:GetSecretValue",
"Principal" : {
"AWS" : "arn:aws:iam::Dev_Account:role/AWSLierECSTaskRole"
},
"Resource": "*"
}
]
}
注意: ステップ 5 のポリシーでは、AWSCURRENT バージョンステージへの参照が明示的に必要です。
と書かれているのに、これは罠ですよね・・・
続く「これは、シークレットが次のように SecretsUser によって取得される場合は常に明示的に要求する必要があります。」と言うのは、タスクはそうじゃないよということかもしれませんが・・・
手順としても割と最近掲載されたものなので、誰かの一助になればと。