Нужно ли моему приложению запрашивать роль в экземпляре ec2 для настройки сеанса или оставить его пустым? - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать aws-sdk-go в своем приложении.Он работает на экземпляре EC2.Теперь в Configuring Credentials документа, https://docs.aws.amazon.com/sdk-for-go/api/, говорится, что он будет выглядеть как

*Environment Credentials - Set of environment variables that are useful when sub processes are created for specific roles.

* Shared Credentials file (~/.aws/credentials) - This file stores your credentials based on a profile name and is useful for local development.

*EC2 Instance Role Credentials - Use EC2 Instance Role to assign credentials to application running on an EC2 instance. This removes the need to manage credential files in production.`

Не будет ли лучший порядок обратным порядком?Но мой главный вопрос заключается в том, нужно ли мне спрашивать у экземпляра, есть ли у него роль, а затем использовать его для настройки учетных данных, если у него есть роль?Вот где я не уверен, что мне нужно делать и как.

Я попытался провести простой тест по созданию пустого конфига, по существу устанавливая только регион и выполняя его на экземпляре с ролью икажется, что это «сработало», но в этом случае я не уверен, нужно ли мне явно устанавливать роль или нет.

awsSDK.Config{
    Region:      awsSDK.String(a.region),
    MaxRetries:  awsSDK.Int(maxRetries),
    HTTPClient:  http.DefaultClient,
}

Я просто хочу подтвердить, является ли это правильным способом сделать это илине.Я думаю, мне нужно сделать что-то вроде следующего:

   role = use sdk call to get role on machine
   set awsSDK.Config { Credentials: credentials form of role,
            ...
       }

   issue service command with returned client.

Любые другие документы / указатели были бы великолепны!

Ответы [ 2 ]

0 голосов
/ 30 января 2019

В моих приложениях, когда мне нужно подключиться к ресурсам AWS, я обычно использую ключ доступа и секретный ключ, которые имеют определенные предопределенные роли IAM.Предполагая, что у меня есть эти два, код, который я использую для создания сеанса:

awsCredentials := credentials.NewStaticCredentials(awsAccessKeyID, awsSecretAccessKey, "")
awsSession = session.Must(session.NewSession(&aws.Config{
            Credentials: awsCredentials,
            Region:      aws.String(awsRegion),
        }))

Когда я использую это, два ключа обычно указываются как переменные среды (если я развертываюсь в контейнере Docker).

Полный пример: https://github.com/retgits/flogo-components/blob/master/activity/amazons3/activity.go

0 голосов
/ 30 января 2019

Я никогда не использовал go SDK, но используемые мной AWS SDK автоматически используют роль экземпляра EC2, если учетные данные не найдены ни в каком другом источнике.

Вот сообщение в блоге AWS, объясняющее подход SDK AWSпри получении учетных данных: https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/. В частности, смотрите это:

Если вы используете такой код, SDK ищут учетные данные в следующем порядке:

  1. В переменных среды.(Не .NET SDK, как отмечалось ранее.)
  2. В центральном файле учетных данных (~ / .aws / credentials или% USERPROFILE% .awscredentials).
  3. В существующем стандартном SDK-файле конфигурации, если таковой существует.Это будет иметь место, если вы использовали SDK до того, как были внесены эти изменения.
  4. Для .NET SDK, в SDK Store, если он существует.
  5. Если код выполняется на экземпляре EC2, через роль IAM для Amazon EC2.В этом случае код получает временные учетные данные безопасности от службы метаданных экземпляра;учетные данные имеют разрешения, полученные из роли, связанной с экземпляром.
...