As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Criar um pipeline no CodePipeline que usa recursos de outra conta da AWS.
Pode ser que você queira criar um pipeline que use os recursos criados ou gerenciados por outra conta da AWS. Por exemplo, talvez você precise usar uma conta para o pipeline e outra para os recursos do CodeDeploy.
nota
Depois de criar um pipeline com ações de várias contas, você deve configurar suas ações para que ainda possam acessar artefatos dentro das limitações de pipelines entre contas. As limitações a seguir se aplicam às ações entre contas:
-
Geralmente, uma ação só pode consumir um artefato se:
-
A ação está na mesma conta que o pipeline OU
-
O artefato foi criado na conta do pipeline para uma ação em outra conta OU
-
O artefato foi produzido por uma ação anterior na mesma conta
Ou seja, você não pode transmitir um artefato de uma conta para outra se nenhuma delas for a conta do pipeline.
-
-
Ações entre contas não são compatíveis com os seguintes tipos de ações:
-
Ações de compilações Jenkins
-
Para esse exemplo, você deve criar a chave do AWS Key Management Service (AWS KMS) para ser usada, adicionar a chave ao pipeline e configurar as políticas e as funções da conta para permitir o acesso entre as contas. Para uma chave do AWS KMS, você pode usar o ID da chave, o ARN da chave ou o ARN do alias.
nota
Os aliases são reconhecidos apenas na conta que criou a chave do KMS. Para ações entre contas, você só pode usar o ID ou o ARN da chave para identificar a chave. As ações entre contas envolvem o uso do perfil da outra conta (AccountB), portanto, a especificação do ID da chave usará a chave da outra conta (AccountB).
Nesta apresentação e nos seus exemplos, Conta A
é a conta usada originalmente para criar o pipeline. Ela tem acesso ao bucket do Amazon S3 usado para armazenar os artefatos do pipeline e o perfil de serviço usados pelo AWS CodePipeline. AccountB
é a conta usada originalmente para criar a aplicação CodeDeploy, o grupo de implantação e o perfil de serviço usados pelo CodeDeploy.
Para que AccountA
edite um pipeline para usar a aplicação CodeDeploy criada por AccountB
, AccountA
deve:
-
Solicitar o ID da conta ou o Nome de região da Amazon (ARN) da
Conta B
(nesta apresentação, o ID daConta B
é012ID_ACCOUNT_B
). -
Criar ou usar uma chave gerenciada pelo cliente do AWS KMS na região do pipeline e conceder permissões para usar essa chave no perfil de serviço (
CodePipeline_Service_Role
) e emAccountB
. -
Criar uma política de bucket do Amazon S3 que conceda a
AccountB
acesso ao bucket do Amazon S3 (por exemplo,codepipeline-us-east-2-1234567890
). -
Criar uma política que permita a
AccountA
assumir um perfil configurado porAccountB
e anexar essa política ao perfil de serviço (CodePipeline_Service_Role
). -
Editar o pipeline para que use a chave gerenciada pelo cliente do AWS KMS em vez da chave padrão.
Para que a Conta A
permita o acesso aos seus recursos a um pipeline criado na Conta A
, a Conta B
deve:
-
Solicitar o ID da conta ou o nome de região da Amazon (ARN) da
Conta A
(nesta apresentação, o ID daConta A
é012ID_ACCOUNT_A
). -
Criar uma política aplicada ao perfil de instância do Amazon EC2 configurado para o CodeDeploy que permita acesso ao bucket do Amazon S3(
codepipeline-us-east-2-1234567890
). -
Criar uma política aplicada ao perfil de instância do Amazon EC2 configurado para o CodeDeploy que permita o acesso à chave gerenciada pelo cliente do AWS KMS usada para criptografar os artefatos do pipeline em
AccountA
. -
Configure e associe um perfil do IAM (
CrossAccount_Role
) com uma política de relação de confiança que permita que o perfil de serviço do CodePipeline emAccountA
assuma esse perfil. -
Criar uma política que permita o acesso aos recursos de implantação exigidos pelo pipeline e anexá-la a
CrossAccount_Role
. -
Criar uma política que permita o acesso ao bucket do Amazon S3 (
codepipeline-us-east-2-1234567890
) e anexá-la aCrossAccount_Role
.
Tópicos
Pré-requisito: criar uma chave de criptografia do AWS KMS
Assim como todas as chaves do AWS KMS, as chaves gerenciadas por clientes são específicas de uma região. É necessário criar a chave gerenciada pelo cliente do AWS KMS na mesma região em que o pipeline foi criado (por exemplo, us-east-2
).
Como criar uma chave gerenciada pelo cliente no AWS KMS
-
Faça login no AWS Management Console com a
AccountA
e abra o console do AWS KMS. -
À esquerda, escolha Chaves gerenciadas pelo cliente.
-
Escolha Create key (Criar chave). Em Configurar chave, deixe a opção padrão Simétrica selecionada e escolha Próximo.
-
Em Alias, insira um alias a ser usado para essa chave (por exemplo,
PipelineName-Key
). Ou então, forneça uma descrição e tags para essa chave e selecione Próximo. -
Em Definir permissões administrativas da chave, escolha o(s) perfil(is) que devem atuar como administradores para essa chave e, em seguida, escolha Próximo.
-
Em Definir permissões de uso da chave, em Esta conta, selecione o nome do perfil de serviço do pipeline (por exemplo, CodePipeline_Service_Role). Em Outras contas da AWS, escolha Adicionar outra conta da AWS. Insira o ID da conta de
AccountB
para concluir o ARN e selecione Próximo. -
Em Revisar e editar política de chaves, revise a política e selecione Concluir.
-
Na lista de chaves, selecione o alias da chave e copie o ARN (por exemplo,
). Você precisará disso ao editar seu pipeline e configurar políticas.arn:aws:kms:us-east-2:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
Etapa 1: Configurar as políticas e funções da conta
Após criar a chave do AWS KMS, será necessário criar e anexar as políticas que permitirão o acesso entre contas. Isso requer ações da Conta A
e da Conta B
.
Tópicos
Configurar políticas e funções na conta que criará o pipeline (AccountA
)
Para criar um pipeline que usa os recursos do CodeDeploy associados a outra conta da AWS, AccountA
deve configurar políticas para o bucket do Amazon S3 usado para armazenar os artefatos e para o perfil de serviço do CodePipeline.
Para criar uma política para o bucket do Amazon S3 que conceda acesso a AccountB (console)
-
Faça login no AWS Management Console com
AccountA
e abra o console do Amazon S3 em https://console.aws.amazon.com/s3/. -
Na lista de buckets do Amazon S3, escolha o bucket do Amazon S3 em que os artefatos de seus pipelines serão armazenados. Esse bucket se chama
codepipeline-
, em queregion
-1234567EXAMPLE
region
é a região da AWS na qual o pipeline foi criado e1234567EXAMPLE
é um número aleatório de dez dígitos que garante a exclusividade do nome do bucket (por exemplo,codepipeline-us-east-2-1234567890
). -
Na página de detalhes do bucket do Amazon S3, escolha Propriedades.
-
No painel de propriedades, expanda Permissões e depois selecione Adicionar política de bucket.
nota
Se uma política já estiver anexada ao bucket do Amazon S3, escolha Editar política de bucket. Em seguida, você pode adicionar as instruções no exemplo a seguir para a política existente. Para adicionar uma nova política, selecione o link e siga as instruções no Gerador de política da AWS. Para obter mais informações, consulte Visão geral das políticas do IAM.
-
Na janela do Editor de política de bucket, digite a seguinte política. Isso permitirá que a
AccountB
acesse os artefatos do pipeline e dará àAccountB
a habilidade de adicionar artefatos de saída se uma ação, como uma fonte padrão ou ação de construção, criar tais artefatos.No exemplo a seguir, o ARN da
Conta B
é012ID_ACCOUNT_B
. O ARN do bucket do Amazon S3 écodepipeline-us-east-2-1234567890
. Substitua esses ARNs pelo ARN da conta à qual você deseja conceder acesso e pelo ARN do bucket do Amazon S3:{ "Version": "2012-10-17", "Id": "SSEAndSSLPolicy", "Statement": [ { "Sid": "DenyUnEncryptedObjectUploads", "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "aws:kms" } } }, { "Sid": "DenyInsecureConnections", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*", "Condition": { "Bool": { "aws:SecureTransport": false } } }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": [ "s3:Get*", "s3:Put*" ], "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
/*" }, { "Sid": "", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::012ID_ACCOUNT_B:root
" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::codepipeline-us-east-2-1234567890
" } ] } -
Selecione Salvar e depois feche o editor de políticas.
-
Escolha Salvar para salvar as permissões para o bucket do Amazon S3.
Para criar uma política para o perfil de serviço do CodePipeline (console)
-
Faça login no AWS Management Console com
AccountA
e abra o console do IAM em https://console.aws.amazon.com/iam/. -
No painel de navegação, escolha Perfis.
-
Na lista de perfis, em Nome do perfil, escolha o nome do perfil de serviço do CodePipeline.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a guia JSON e insira a política a seguir para permitir que
AccountB
assuma o perfil. No exemplo a seguir,012ID_ACCOUNT_B
é o ARN daConta B
:{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::
012ID_ACCOUNT_B
:role/*" ] } } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
Configurar políticas e funções na conta que possui o recurso da AWS (AccountB
)
Ao criar uma aplicação, uma implantação e um grupo de implantação no CodeDeploy, você também cria um perfil de instância do Amazon EC2. (Essa função é criada caso você use o assistente de apresentação de implantação de execução, mas também é possível criá-la manualmente.) Para que um pipeline criado em AccountA
use os recursos do CodeDeploy criados em AccountB
, você deve:
-
Configurar uma política para o perfil de instância que permita o acesso ao bucket do Amazon S3 em que os artefatos do pipeline serão armazenados.
-
Criar uma segunda função na
Conta B
configurada para o acesso entre contas.Além de ter acesso ao bucket do Amazon S3 em
AccountA
, esse segundo perfil precisa de uma política que permita o acesso aos recursos do CodeDeploy e uma política de relação de confiança que permita que o perfil de serviço do CodePipeline emAccountA
assuma o perfil.nota
Essas políticas são específicas para a configuração dos recursos do CodeDeploy a serem usados em um pipeline criado por meio de outra conta da AWS. Outros recursos da AWS exigirão políticas específicas para os requisitos dos recursos.
Para criar uma política para o perfil de instância do Amazon EC2 configurado para o CodeDeploy (console)
-
Faça login no AWS Management Console com
AccountB
e abra o console do IAM em https://console.aws.amazon.com/iam/. -
No painel de navegação, escolha Perfis.
-
Na lista de perfis, em Nome do perfil, escolha o nome do perfil de serviço usado como perfil de instância do Amazon EC2 para a aplicação do CodeDeploy. Esse nome da função pode variar e mais de uma função de instância pode ser usada por um grupo de implantação. Para obter mais informações, consulte Criar um perfil de instância do IAM para suas instâncias do Amazon EC2.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a guia JSON e insira a seguinte política para conceder acesso ao bucket Amazon S3 usado por
AccountA
para armazenar artefatos de pipelines (neste exemplo,codepipeline-us-east-2-1234567890
):{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:Get*" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::codepipeline-us-east-2-1234567890
" ] } ] } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Crie uma segunda política do AWS KMS em que
seja o ARN da chave gerenciada pelo cliente criada naarn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
AccountA
e configurada para permitir queAccountB
a use:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:DescribeKey", "kms:GenerateDataKey*", "kms:Encrypt", "kms:ReEncrypt*", "kms:Decrypt" ], "Resource": [ "arn:aws:kms:us-east-1:
012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
" ] } ] }Importante
Você deve usar o ID da
Conta A
nesta política como parte do ARN do recurso para a chave do AWS KMS, como mostrado aqui, ou a política não funcionará. -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
Agora, crie um perfil do IAM para usar o acesso entre contas e configure-o de modo que o perfil de serviço do CodePipeline em AccountA
possa assumir o perfil. Esse perfil deve conter políticas que permitam o acesso aos recursos do CodeDeploy e ao bucket do Amazon S3 usado para armazenar os artefatos em AccountA
.
Para configurar o perfil entre contas no IAM
-
Faça login no AWS Management Console com
AccountB
e abra o console do IAM em https://console.aws.amazon.com/iam. -
No painel de navegação, escolha Roles. Escolha Criar Perfil.
-
Em Selecionar tipo de entidade confiável, escolha Outra conta da AWS. Em Especificar contas que podem usar este perfil, em ID da conta, insira o ID da conta da AWS que criará o pipeline no CodePipeline (
AccountA
) e escolha Próximo: Permissões.Importante
Esta etapa cria a política de relação de confiança entre a
AccountB
e aAccountA
. No entanto, isso concede acesso de nível raiz à conta, e o CodePipeline recomenda restringi-lo ao perfil de serviço do CodePipeline emAccountA
. Siga a etapa 16 para restringir permissões. -
Na página Anexar políticas de permissões, escolha AmazonS3ReadOnlyAccess e escolha Próximo: Etiquetas.
nota
Esta não é a política que você utilizará. Você deve escolher uma política para concluir o assistente.
-
Selecione Next: Review (Próximo: revisar). Em Nome do perfil, digite um nome para este perfil (por exemplo,
CrossAccount_Role
). Você pode nomear esse perfil como quiser, desde que ele siga as convenções de nomenclatura do IAM. Considere atribuir uma nome à função que indique claramente o seu propósito. Selecione Criar função. -
Na lista de perfis, escolha o perfil que você acabou de criar (por exemplo,
CrossAccount_Role
) para abrir a página Resumo desse perfil. -
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a guia JSON e insira a seguinte política para permitir o acesso aos recursos do CodeDeploy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "codedeploy:CreateDeployment", "codedeploy:GetDeployment", "codedeploy:GetDeploymentConfig", "codedeploy:GetApplicationRevision", "codedeploy:RegisterApplicationRevision" ], "Resource": "*" } ] }
-
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Na guia Permissions (Permissões), escolha Add inline policy (Adicionar política em linha).
-
Escolha a guia JSON e insira a seguinte política para permitir que esse perfil recupere os artefatos de entrada. Em seguida, os coloque artefatos de saída no bucket do Amazon S3 em
AccountA
:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject*", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::
codepipeline-us-east-2-1234567890
/*" ] } ] } -
Escolha Revisar política.
-
Em Name (Nome), insira um nome para essa política. Escolha Criar política.
-
Na guia Permissões, localize Amazons3ReadOnlyAccess na lista de políticas em Nome da política e escolha o ícone de exclusão (X) ao lado da política. Quando solicitado, selecione Desanexar.
-
Selecione a guia Relação de confiança e escolha Editar política de confiança. Escolha a opção Adicionar uma entidade principal na coluna à esquerda. Em Tipo de entidade principal, escolha Perfis do IAM e forneça o ARN do perfil de serviço do CodePipeline em
AccountA
. Removaarn:aws:iam::Account_A:root
da lista de Entidades principais da AWS e selecione Atualizar política.
Etapa 2: Editar o pipeline
Você não pode usar o console do CodePipeline para criar ou editar um pipeline que usa recursos associados a outra conta da AWS. Mas você pode usar o console para criar a estrutura geral do pipeline e usar a AWS CLI para editar o pipeline e adicionar esses recursos. Como alternativa, você pode usar a estrutura de um pipeline existente e adicionar manualmente os recursos.
Para adicionar os recursos associados à outra conta da AWS (AWS CLI)
-
Em um terminal (Linux, macOS ou Unix) ou prompt de comando (Windows), execute o comando get-pipeline no pipeline ao qual deseja adicionar recursos. Copie a saída do comando em um arquivo JSON. Por exemplo, para um pipeline chamado MyFirstPipeline, você digitaria algo assim:
aws codepipeline get-pipeline --name
MyFirstPipeline
>pipeline.json
A saída é enviada ao arquivo
pipeline.json
. -
Abra o arquivo JSON em qualquer editor de texto simples. Depois de
"type": "S3"
no armazenamento de artefatos, adicione a encryptionKey do KMS, o ID e digite informações em quecodepipeline-us-east-2-1234567890
seja o nome do bucket do Amazon S3 usado para armazenar artefatos para o pipeline e
seja o ARN da chave gerenciada pelo cliente recém-criada:arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
{ "artifactStore”: { "location": "
codepipeline-us-east-2-1234567890
", "type": "S3", "encryptionKey": { "id": "arn:aws:kms:us-east-1:012ID_ACCOUNT_A:key/2222222-3333333-4444-556677EXAMPLE
", "type": "KMS" } }, -
Adicione uma ação de implantação em um estágio para usar os recursos do CodeDeploy associados a
AccountB
, incluindo os valoresroleArn
para o perfil entre contas que você criou (CrossAccount_Role
).O exemplo a seguir mostra JSON que adiciona uma ação de implantação nomeada de
ExternalDeploy
. Ele usa os recursos do CodeDeploy criados emAccountB
em um estágio chamadoPreparação
. No exemplo a seguir, o ARN para aConta B
é012ID_ACCOUNT_B
:, { "name": "Staging", "actions": [ { "inputArtifacts": [ { "name": "MyAppBuild" } ], "name": "
ExternalDeploy
", "actionTypeId": { "category": "Deploy", "owner": "AWS", "version": "1", "provider": "CodeDeploy" }, "outputArtifacts": [], "configuration": { "ApplicationName": "AccountBApplicationName
", "DeploymentGroupName": "AccountBApplicationGroupName
" }, "runOrder": 1, "roleArn": "arn:aws:iam::012ID_ACCOUNT_B
:role/CrossAccount_Role
" } ] }nota
Este não é o JSON para todo o pipeline, apenas a estrutura para a ação em um estágio.
-
Você deve remover as linhas
metadata
do arquivo para que o comando update-pipeline possa usá-lo. Remova a seção da estrutura do pipeline no arquivo JSON (as linhas de"metadata": { }
e os campos"created"
,"pipelineARN"
e"updated"
).Por exemplo, remova as seguintes linhas da estrutura:
"metadata": { "pipelineArn": "arn:aws:codepipeline:
region
:account-ID
:pipeline-name
", "created": "date
", "updated": "date
" }Salve o arquivo.
-
Para aplicar suas alterações, execute o comando update-pipeline, especificando o pipeline do arquivo JSON, de modo semelhante ao seguinte:
Importante
Não se esqueça de incluir
file://
antes do nome de arquivo. Ele é obrigatório nesse comando.aws codepipeline update-pipeline --cli-input-json file://
pipeline.json
Este comando retorna toda a estrutura do pipeline editado.
Para testar o pipeline que usa recursos associados a outra conta da AWS
-
Em um terminal (Linux, macOS ou Unix) ou prompt de comando (Windows), execute o comando start-pipeline-execution, especificando o nome do pipeline, da seguinte maneira:
aws codepipeline start-pipeline-execution --name MyFirstPipeline
Para ter mais informações, consulte Iniciar um pipeline manualmente.
-
Faça login no AWS Management Console com
AccountA
e abra o console do CodePipeline em http://console.aws.amazon.com/codesuite/codepipeline/home. Os nomes de todos os pipelines associados à sua conta da AWS são exibidos.
-
Em Nome, selecione o nome do pipeline recém-editado. Isso abre uma visão detalhada do pipeline, incluindo o estado de cada ação em cada estágio do pipeline.
-
Assista o progresso através do pipeline. Aguarde por uma mensagem de êxito na ação que usa o recurso associado a outra conta da AWS.
nota
Você receberá um erro se tentar visualizar os detalhes para a ação enquanto estiver conectado na
AccountA
. Saia da conta e depois faça login comAccountB
para visualizar os detalhes de implantação no CodeDeploy.