AWS 系统管理器 + CodeDeploy + Lightsail
AWS System Managers + CodeDeploy + Lightsail
我想将 AWS System Managers Store Parameters 与我的 CodeDeploy 管道一起使用,从而放弃我在 Lightsail 上的最后一次提交。
✅ 1. 我创建了一个 SSM 参数:MySecureString
.
参数在 SecureString
上设置,KMS 加密在 Actual account
上设置,ID alias/aws/ssm
。
我的SecureString
设置为:postgres://user:password@endpoint.rds.amazonaws.com:5432/myDatabase
✅ 2. 我创建了 CodeDeploy 实例使用的 IAM 策略
前往 IAM 并创建了附加到 MySpecificCodeDeployUser
的 JSON 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"ssm:GetParameter"
],
"Resource": [
"arn:aws:kms:*:<accountID>:key/alias/aws/ssm",
"arn:aws:ssm:us-east-1:<accountID>:parameter/MySecureString"
]
}
]
}
✅ 3. 测试 MySpecificFCodeDeployUser
访问 SSM MySecureString
:
键入 aws configure
以记录为 MySpecificFCodeDeployUser
并尝试 运行 在我的本地计算机上执行此命令:
aws --region=us-east-1 ssm get-parameter --name MySecureString --with-decryption --query Parameter.Value
RETURN ==> "postgres://user:password@endpoint.rds.amazonaws.com:5432/myDatabase"
请注意,删除 IAM 策略会给我一个未经授权的请求,因此 IAM 策略是正确的。
4. 添加MySecureString
到CodeDeploy执行的脚本:
正在编辑我的 appspec.yml
的 AfterInstall
脚本以添加:
aws --region=us-east-1 ssm get-parameter --name MySecureString --with-decryption --query Parameter.Value >> .env
给我一个 FAILED Build
with stderr
:
[stderr] An error occurred (AccessDeniedException) when calling the GetParameter operation: User: arn:aws:sts::<id>:assumed-role/AmazonLightsailInstanceRole/<id> is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:<id>:parameter/MySecureString
我看到 Lightsail 实例继承自 https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-using-service-linked-roles 的服务相关角色 AWSServiceRoleForLightsail
。
有没有办法向我的 lightsail 实例添加新策略,因为它似乎不是 CodeDeploy 用户需要它的事实?
Is there a way to add a new policy to my lightsail instance regarding the fact that it didn't seems to be CodeDeploy user needing it ?
很遗憾,您做不到。要使 lightsail 实例上的应用程序能够与 AWS 服务交互,您必须自己完成,方法是设置 .aws
凭证并让您的应用程序使用它(如果您使用 AWS SDK,则自动完成)。
Lightsail 实例不支持 基于用户的实例角色。为此,您需要常规的 EC2 实例,如以下所述:
我想将 AWS System Managers Store Parameters 与我的 CodeDeploy 管道一起使用,从而放弃我在 Lightsail 上的最后一次提交。
✅ 1. 我创建了一个 SSM 参数:MySecureString
.
参数在 SecureString
上设置,KMS 加密在 Actual account
上设置,ID alias/aws/ssm
。
我的SecureString
设置为:postgres://user:password@endpoint.rds.amazonaws.com:5432/myDatabase
✅ 2. 我创建了 CodeDeploy 实例使用的 IAM 策略
前往 IAM 并创建了附加到 MySpecificCodeDeployUser
的 JSON 策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"ssm:GetParameter"
],
"Resource": [
"arn:aws:kms:*:<accountID>:key/alias/aws/ssm",
"arn:aws:ssm:us-east-1:<accountID>:parameter/MySecureString"
]
}
]
}
✅ 3. 测试 MySpecificFCodeDeployUser
访问 SSM MySecureString
:
键入 aws configure
以记录为 MySpecificFCodeDeployUser
并尝试 运行 在我的本地计算机上执行此命令:
aws --region=us-east-1 ssm get-parameter --name MySecureString --with-decryption --query Parameter.Value
RETURN ==> "postgres://user:password@endpoint.rds.amazonaws.com:5432/myDatabase"
请注意,删除 IAM 策略会给我一个未经授权的请求,因此 IAM 策略是正确的。
4. 添加MySecureString
到CodeDeploy执行的脚本:
正在编辑我的 appspec.yml
的 AfterInstall
脚本以添加:
aws --region=us-east-1 ssm get-parameter --name MySecureString --with-decryption --query Parameter.Value >> .env
给我一个 FAILED Build
with stderr
:
[stderr] An error occurred (AccessDeniedException) when calling the GetParameter operation: User: arn:aws:sts::<id>:assumed-role/AmazonLightsailInstanceRole/<id> is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:<id>:parameter/MySecureString
我看到 Lightsail 实例继承自 https://lightsail.aws.amazon.com/ls/docs/en_us/articles/amazon-lightsail-using-service-linked-roles 的服务相关角色 AWSServiceRoleForLightsail
。
有没有办法向我的 lightsail 实例添加新策略,因为它似乎不是 CodeDeploy 用户需要它的事实?
Is there a way to add a new policy to my lightsail instance regarding the fact that it didn't seems to be CodeDeploy user needing it ?
很遗憾,您做不到。要使 lightsail 实例上的应用程序能够与 AWS 服务交互,您必须自己完成,方法是设置 .aws
凭证并让您的应用程序使用它(如果您使用 AWS SDK,则自动完成)。
Lightsail 实例不支持 基于用户的实例角色。为此,您需要常规的 EC2 实例,如以下所述: