Если вы являетесь разработчиком AWS и используете AWS Services в вашем приложении, то вам, должно быть, надоело, что ищете лучший способ надежно хранить и получить доступ к своим учетным данным AWS. Чтобы обеспечить нашу учетную запись AWS Security, для нас важно понять модель общинной ответственности AWS. В двух словах он утверждает, что AWS отвечает за безопасность Облако и США, клиенты, несут ответственность за безопасность в облако. Проще говоря, для разработчиков это означает, что мы должны особое уход за нашими учетными данными AWS, как идентификатор доступа ключей ключа и секретный ключ доступа.
Если вы новичок в AWS, используйте раздел «Ссылки» ниже для получения дополнительной информации.
1. Антигиблон: Учетные данные о жестком состоянии
Это анти-шаблон и следует избегать любой ценой. Если ваш код выглядит следующим образом, вы должны действовать сейчас
const AWS = require("aws-sdk");
AWS.config.update({
credentials: {
access_key_id: "",
secret_access_key: ""
}
})
1.1. Почему это плохо?
Как разработчик, вы, скорее всего, вы будете совершать этот код в некотором репозитории, такими как частный репо GitHub или ваш хранилище команды, такие как Bitbucket или AWS CodeCommit. Помимо риска использования анти-образца, вы не хотите, чтобы кто-то получил доступ к своим жестким клавишам, потому что он позволит им получить доступ к/управлять всеми ресурсами, к которым эти учетные данные предоставляют доступ. Если политика IAM присоединяется к пользователю, чьи учетные данные вы используете, выглядит следующее, это означает, что вы передали ключи от вашего AWS Kingdom к любому, кто имеет доступ к вашему коду
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": "*",
"Resource": "*"
}
}
1.2. Как мне смягчить?
Если вы думаете, что вы не можете внести изменения в свой код, вы должны изменить политику IAM, прикрепленную к этой роли или переместить их в группу IAM с ограничительными привилегиями E.G. IAM Политика, которая дает минимум привилегии только к данным ведре Amazon S3:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ListYourObjects",
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": ["arn:aws:s3:::bucket-name"]
},
{
"Sid": "ReadWriteDeleteYourObjects",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": ["arn:aws:s3:::bucket-name"]
}
]
}
2. Смотри Ма, нет жестких полномочий
С этим анти-образным узором вы можете принять один из следующих подходов для использования ваших учетных данных AWS.
2.1. Используйте переменные среды
$ export AWS_ACCESS_KEY_ID="" $ export AWS_SECRET_ACCESS_KEY=" "
Затем в приложении JavaScript/Node.js используйте следующие
const AWS = require("aws-sdk");
AWS.config.update({
credentials: {
access_key_id: process.env.AWS_ACCESS_KEY_ID,
secret_access_key: process.env.AWS_SECRET_ACCESS_KEY
}
})
2.2. Использовать профиль AWS
Вы можете использовать AWS по имени профили для хранения более одного уважения. Вы можете проверить следующие два файла:
~/.aws/учетные данные: содержитAWS_ACCESS_KEY_IDиaws_secret_access_key.~/.aws/config: содержитобластьивывод
Мой ~/.aws/учетные данные Файл выглядит как следующее, и он показывает, что я использую 2 профилей: по умолчанию и личный
[default] aws_access_key_id = "" aws_secret_access_key = " " [personal] aws_access_key_id = " " aws_secret_access_key = " "
Мой ~/.aws/config Файл выглядит следующим образом:
[default] region = us-west-2 output=json [profile personal] region = us-west-2 output = json
Если я хочу использовать свою учетную запись по умолчанию, я могу использовать следующий код:
const AWS = require("aws-sdk");
const credentials = new AWS.SharedIniFileCredentials({ profile: "default" });
AWS.config.credentials = credentials;
А как насчет моего кода работает в Amazon EC2, AWS Lambda?
У меня есть 3 слова для вас: «Используйте роли IAM».
Если у вас есть свой код, работающий в контейнере Docker на экземпляре Amazon EC2, понять, что каждый процесс в системе имеет доступ к IAM ролям, и ваш контейнер будет принимать, что эта роль без необходимости указывать ее.
Вывод
Для моей среды развития я обнаружил последний подход к использованию профилей AWS и используя их для доступа к учетным данным в коде лучше, чем на необходимость экспорта. Код гораздо чище и не изменяется, если я поворачиваю свои ключи. Все, что мне нужно сделать, это бегать AWS Configure на моей рабочей станции разработчика и делать с ним. Кроме того, он спасает меня от анти-образного узора жесткокодирующих учетных данных в моем коде. Однако Этот подход означает, что вам, возможно, придется изменить код или запись условного кода (редко хорошая практика) или используйте определенные файлы среды для ваших неразвичных сред, где профиль может или не может существовать. Если вы столкнетесь с таким процессом принятия решений, используя переменный подход среды – это путь.
использованная литература
- AWS IAM начать
- AWS IAM лучшие практики
- AWS IAM роли
- AWS IAM политики
- AWS IAM пользователи и группы
- AWS разделял модель ответственности
- Scoping IAM в Docker Continers
- AWS CLI по имени профили
- Загрузка учетных данных в Node.js
Оригинал: “https://dev.to/sahays/best-practices-to-use-aws-access-key-and-secret-in-your-development-environment-23ki”